""" testing models """ from unittest.mock import patch from django.test import TestCase from bookwyrm import models class FederatedServer(TestCase): """federate server management""" def setUp(self): """we'll need a user""" self.server = models.FederatedServer.objects.create(server_name="test.server") with patch("bookwyrm.preview_images.generate_user_preview_image_task.delay"): with patch("bookwyrm.models.user.set_remote_server.delay"): self.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", federated_server=self.server, local=False, remote_id="https://example.com/users/rat", inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) self.inactive_remote_user = models.User.objects.create_user( "nutria", "nutria@nutria.com", "nutriaword", federated_server=self.server, local=False, remote_id="https://example.com/users/nutria", inbox="https://example.com/users/nutria/inbox", outbox="https://example.com/users/nutria/outbox", is_active=False, deactivation_reason="self_deletion", ) def test_block_unblock(self): """block a server and all users on it""" self.assertEqual(self.server.status, "federated") self.assertTrue(self.remote_user.is_active) self.assertFalse(self.inactive_remote_user.is_active) self.server.block() self.assertEqual(self.server.status, "blocked") self.remote_user.refresh_from_db() self.assertFalse(self.remote_user.is_active) self.assertEqual(self.remote_user.deactivation_reason, "domain_block") self.inactive_remote_user.refresh_from_db() self.assertFalse(self.inactive_remote_user.is_active) self.assertEqual(self.inactive_remote_user.deactivation_reason, "self_deletion") # UNBLOCK self.server.unblock() self.assertEqual(self.server.status, "federated") # user blocked in deactivation is reactivated self.remote_user.refresh_from_db() self.assertTrue(self.remote_user.is_active) self.assertIsNone(self.remote_user.deactivation_reason) # deleted user remains deleted self.inactive_remote_user.refresh_from_db() self.assertFalse(self.inactive_remote_user.is_active) self.assertEqual(self.inactive_remote_user.deactivation_reason, "self_deletion")