mirror of
https://github.com/Sea-Haven-Industries/afterhours-shift-manager.git
synced 2026-09-30 10:13:11 +00:00
Dev portal actions could still name the production Slack channel and phone queue. Skip those calls unless STAGE is prod, and leave the identifiers empty on non-prod tasks.
52 lines
2 KiB
Python
52 lines
2 KiB
Python
"""Non-prod must not call Slack or 3CX."""
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
from shared.effects import prod_side_effects_enabled
|
|
from shared.holiday_flow import activate
|
|
from shared.side_effects import slack_call, slack_token, update_3cx_routing
|
|
|
|
|
|
def test_missing_stage_keeps_prod_effects(monkeypatch):
|
|
monkeypatch.delenv("STAGE", raising=False)
|
|
assert prod_side_effects_enabled() is True
|
|
|
|
|
|
def test_dev_stage_disables_effects(monkeypatch):
|
|
monkeypatch.setenv("STAGE", "dev")
|
|
assert prod_side_effects_enabled() is False
|
|
|
|
|
|
def test_dev_slack_token_does_not_read_secrets(monkeypatch):
|
|
monkeypatch.setenv("STAGE", "dev")
|
|
monkeypatch.setenv("SLACK_BOT_TOKEN_SECRET", "afterhours-shift-manager/slack-bot-token")
|
|
read = MagicMock(side_effect=AssertionError("secret read"))
|
|
monkeypatch.setattr("shared.side_effects.get_secret", read)
|
|
assert slack_token() is None
|
|
read.assert_not_called()
|
|
|
|
|
|
def test_dev_slack_call_does_not_post(monkeypatch):
|
|
monkeypatch.setenv("STAGE", "dev")
|
|
post = MagicMock(side_effect=AssertionError("slack post"))
|
|
monkeypatch.setattr("shared.side_effects.requests.post", post)
|
|
assert slack_call("chat.postMessage", "xoxb-token", channel="C0APATP612N") is False
|
|
post.assert_not_called()
|
|
|
|
|
|
def test_dev_skips_3cx_even_when_queue_is_configured(monkeypatch):
|
|
monkeypatch.setenv("STAGE", "dev")
|
|
monkeypatch.setenv("QUEUE_NUMBER", "801")
|
|
monkeypatch.setenv("TCX_SECRET_PREFIX", "afterhours-shift-manager/3cx-")
|
|
route = MagicMock(side_effect=AssertionError("3cx"))
|
|
monkeypatch.setattr("shared.side_effects.update_queue_routing", route)
|
|
update_3cx_routing("101")
|
|
route.assert_not_called()
|
|
|
|
|
|
def test_dev_holiday_activate_does_not_build_a_client(monkeypatch):
|
|
monkeypatch.setenv("STAGE", "dev")
|
|
factory = MagicMock(side_effect=AssertionError("3cx client"))
|
|
result = activate(MagicMock(), "2026-07-04", client_factory=factory)
|
|
assert result["skipped"] == "non_prod"
|
|
factory.assert_not_called()
|