from django.core import mail from rest_framework import status from userausfall.models import TrustBridge, User from userausfall.rest_api.tests.auth import UserMixin from userausfall.rest_api.tests.userausfall import get_url, UserausfallAPITestCase class TrustBridgeMixin(UserMixin): trust_bridge: TrustBridge trust_giver: User def create_trust_bridge(self, is_trusted=False): self.trust_giver = self.create_user() self.create_user() self.trust_bridge = TrustBridge.objects.create( trust_taker=self.user, trust_giver=self.trust_giver, is_trusted=is_trusted ) return self.trust_bridge class TrustBridgeTestCase(TrustBridgeMixin, UserausfallAPITestCase): def test_create_trust_bridge(self): """Create a trust bridge for the current user.""" url = "/trust-bridges/" trust_giver = self.create_user() self.create_user() self.authenticate_user() response = self.client.post( self.get_api_url(url), { "trust_giver": { "username": trust_giver.username, }, }, ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(TrustBridge.objects.count(), 1) self.assertEqual(TrustBridge.objects.get().trust_giver, trust_giver) def test_retrieve_trust_bridge(self): """Retrieve the trust bridge information of a user without an ldap account.""" url = "/trust-bridges/{pk}/" self.create_trust_bridge() self.authenticate_user() response = self.client.get(self.get_api_url(url, pk=self.trust_bridge.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertDictEqual( response.data, { "id": self.trust_bridge.id, "is_trusted": False, "trust_giver": { "id": self.trust_giver.id, "username": self.trust_giver.username, "url": get_url(response, "user", self.trust_giver), }, "url": get_url(response, "trustbridge", self.trust_bridge), }, ) def test_send_confirmation_email_on_creation(self): """When setting a trust giver a confirmation email is sent.""" self.create_trust_bridge() self.assertEqual(len(mail.outbox), 1) self.assertIn(self.user.trust_bridge.get_confirmation_token(), mail.outbox[0].body) def test_confirm_trust_bridge(self): """The trust giver may confirm the trust bridge.""" url = "/trust-bridges/{pk}/confirm/" self.create_trust_bridge() response = self.client.post( self.get_api_url(url, pk=self.trust_bridge.pk), {"token": self.trust_bridge.get_confirmation_token()} ) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.trust_bridge.refresh_from_db() self.assertTrue(self.trust_bridge.is_trusted)