diff --git a/bookwyrm/tests/models/test_site.py b/bookwyrm/tests/models/test_site.py new file mode 100644 index 00000000..457bdf5e --- /dev/null +++ b/bookwyrm/tests/models/test_site.py @@ -0,0 +1,95 @@ +""" testing models """ +from datetime import timedelta +from unittest.mock import patch + +from django.db import IntegrityError +from django.test import TestCase +from django.utils import timezone + +from bookwyrm import models, settings + + +class SiteModels(TestCase): + """tests for site models""" + + def setUp(self): + """we need basic test data and mocks""" + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): + self.local_user = models.User.objects.create_user( + "mouse@local.com", + "mouse@mouse.com", + "mouseword", + local=True, + localname="mouse", + remote_id="https://example.com/users/mouse", + ) + + def test_site_settings_absent(self): + """create and load site settings""" + self.assertFalse(models.SiteSettings.objects.exists()) + result = models.SiteSettings.get() + self.assertTrue(models.SiteSettings.objects.exists()) + self.assertEqual(result.id, 1) + self.assertEqual(result.name, "BookWyrm") + + def test_site_settings_present(self): + """load site settings""" + models.SiteSettings.objects.create(name="Fish Town") + result = models.SiteSettings.get() + self.assertEqual(result.id, 1) + self.assertEqual(result.name, "Fish Town") + self.assertEqual(models.SiteSettings.objects.all().count(), 1) + + def test_site_invite(self): + """default invite""" + invite = models.SiteInvite.objects.create( + user=self.local_user, + ) + self.assertTrue(invite.valid()) + + def test_site_invite_with_limit(self): + """with use limit""" + # valid + invite = models.SiteInvite.objects.create(user=self.local_user, use_limit=1) + self.assertTrue(invite.valid()) + + # invalid + invite = models.SiteInvite.objects.create(user=self.local_user, use_limit=0) + self.assertFalse(invite.valid()) + invite = models.SiteInvite.objects.create( + user=self.local_user, use_limit=1, times_used=1 + ) + self.assertFalse(invite.valid()) + + def test_site_invite_with_expiry(self): + """with expiration date""" + date = timezone.now() + timedelta(days=1) + invite = models.SiteInvite.objects.create(user=self.local_user, expiry=date) + self.assertTrue(invite.valid()) + + date = timezone.now() - timedelta(days=1) + invite = models.SiteInvite.objects.create(user=self.local_user, expiry=date) + self.assertFalse(invite.valid()) + + def test_site_invite_link(self): + """invite link generator""" + invite = models.SiteInvite.objects.create(user=self.local_user, code="hello") + self.assertEqual(invite.link, f"https://{settings.DOMAIN}/invite/hello") + + def test_invite_request(self): + """someone wants an invite""" + # normal and good + request = models.InviteRequest.objects.create(email="mouse.reeve@gmail.com") + self.assertIsNone(request.invite) + + # already in use + with self.assertRaises(IntegrityError): + request = models.InviteRequest.objects.create(email="mouse@mouse.com") + + def test_password_reset(self): + """password reset token""" + token = models.PasswordReset.objects.create(user=self.local_user, code="hello") + self.assertTrue(token.valid()) + self.assertEqual(token.link, f"https://{settings.DOMAIN}/password-reset/hello")