from unittest import mock import pytest from core.models import Config from users.models import User @pytest.fixture def config_system(): # TODO: Good enough for now, but a better Config mocking system is needed result = Config.load_system() with mock.patch("core.models.Config.load_system", return_value=result): yield result @pytest.mark.django_db def test_signup_disabled(client, config_system): # Signup disabled and no signup text config_system.signup_allowed = False resp = client.get("/auth/signup/") assert resp.status_code == 200 content = str(resp.content) assert "Not accepting new users at this time" in content assert "" not in content # Signup disabled with signup text configured config_system.signup_text = "Go away!!!!!!" resp = client.get("/auth/signup/") assert resp.status_code == 200 content = str(resp.content) assert "Go away!!!!!!" in content # Ensure direct POST doesn't side step guard resp = client.post( "/auth/signup/", data={"email": "test_signup_disabled@example.org"} ) assert resp.status_code == 200 assert not User.objects.filter(email="test_signup_disabled@example.org").exists() # Signup enabled config_system.signup_allowed = True resp = client.get("/auth/signup/") assert resp.status_code == 200 content = str(resp.content) assert "Not accepting new users at this time" not in content assert "" in content @pytest.mark.django_db def test_signup_invite_only(client, config_system): config_system.signup_allowed = True config_system.signup_invite_only = True resp = client.get("/auth/signup/") assert resp.status_code == 200 content = str(resp.content) assert 'name="invite_code"' in content # TODO: Actually test this