The great thing about prometheus alerting rules is you can just enter them into the GUI as normal queries. If the graph is blank, there's no alert. If it's non-blank (i.e. there are timeseries visible) then these are the timeseries which would trigger an alert. This makes them easy to debug.
Regarding your tests: firstly the test references "prometheus_alerting_rules.yml", but your file was called "Prometheus_alerting_rules.yml"
After fixing that, your alert fires if you set the evaluation time to 16m in the test.
('for: 15m' means the alert must have been firing continuously for 15 minutes, i.e. from t=X to t=X+15 inclusive; however, because you're checking for an increase over a time window, it doesn't start to fire until you have two data points, i.e. it starts at t=1 not t=0)
Then the only remaining problem is label mismatch:
Unit Testing: interop_alert_rule_test.yml
FAILED:
alertname:NoMessageForAnOrganizationMod, time:16m0s,
exp:"[Labels:{alertname=\"NoMessageForAnOrganizationMod\", instance=\"localhost:9090\", job=\"prometheus\", severity=\"moderate\"} Annotations:{summary=\"localhost:9090 of job prometheus shows no Messages for organization {{ $labels.custom_message_volume_endpoint_organization_total}}\"}]",
got:"[Labels:{alertname=\"NoMessageForAnOrganizationMod\", instance=\"localhost:9090\", job=\"prometheus\", severity=\"moderate\"} Annotations:{summary=\"localhost:9090 of job prometheus shows no Messages for organization \"}]"
I'm not sure what you're actually trying to put in the annotation, but if you want the value of the metric then you get it using $value not $labels.metric_name, e.g.
summary: '{{ $labels.instance }} of job {{ $labels.job }} shows no Messages for organization {{ $value }} '
Your test must match the actual value returned, not the template string, e.g.
exp_annotations:
summary: "localhost:9090 of job prometheus shows no Messages for organization 0 "