78 lines
3.0 KiB
Python
78 lines
3.0 KiB
Python
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)
|