From 7dd92c0e54acf971051cc2d9cd3c4dd88a12faa8 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Fri, 14 Jun 2024 14:21:25 +0200 Subject: [PATCH] add webhook tests --- webhook/tests.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/webhook/tests.py b/webhook/tests.py index 7ce503c..35b923f 100644 --- a/webhook/tests.py +++ b/webhook/tests.py @@ -1,3 +1,76 @@ -from django.test import TestCase +import json -# Create your tests here. +from uuid import uuid4 +from django.test import TestCase +from django.core.cache import cache +from django.urls import reverse +from django.conf import settings + +from idhub_auth.models import User +from oidc4vp.models import Organization +from webhook.models import Token + + +class AdminDashboardViewTest(TestCase): + + def setUp(self): + cache.set("KEY_DIDS", '1234', None) + self.user = User.objects.create_user( + email='normaluser@example.org', + password='testpass12', + ) + self.user.accept_gdpr=True + self.user.save() + + self.admin_user = User.objects.create_superuser( + email='adminuser@example.org', + password='adminpass12') + self.admin_user.accept_gdpr=True + self.admin_user.save() + self.org = Organization.objects.create(name="testserver", main=True) + + settings.DOMAIN = self.org.name + settings.ENABLE_EMAIL = False + self.client.login(email='adminuser@example.org', password='adminpass12') + + def get_credential(self): + return {'@context': ['https://www.w3.org/2018/credentials/v1', 'https://idhub.pangea.org/context/base.jsonld', 'https://idhub.pangea.org/context/membership-card.jsonld'], 'type': ['VerifiableCredential', 'VerifiableAttestation', 'MembershipCard'], 'id': 'http://localhost/credentials/1', 'issuer': {'id': 'did:web:idhub.pangea.org:dids:z6Mko7ParpJZzBopW48DY8125Tcz9hMCaH7YzteWKnFcVzhu', 'name': 'Pangea'}, 'issuanceDate': '2024-06-11T14:41:12Z', 'issued': '2024-06-11T14:41:12Z', 'validFrom': '2024-06-11T14:41:12Z', 'name': [{'value': 'Membership Card', 'lang': 'en'}, {'value': 'Carnet de soci/a', 'lang': 'ca_ES'}, {'value': 'Carnet de socio/a', 'lang': 'es'}], 'description': [{'value': "The membership card specifies an individual's subscription or enrollment in specific services or benefits issued by an organization.", 'lang': 'en'}, {'value': "El carnet de soci especifica la subscripció o la inscripció d'un individu en serveis o beneficis específics emesos per una organització.", 'lang': 'ca_ES'}, {'value': 'El carnet de socio especifica la suscripción o inscripción de un individuo en servicios o beneficios específicos emitidos por uns organización.', 'lang': 'es'}], 'credentialSubject': {'id': 'did:web:localhost:did-registry:z6MkoAQJ96ppDQFw1idhvcR9NssPJQLFBoVDD2L62r7fh5yS', 'firstName': 'Pedro', 'lastName': 'Lagasta', 'email': 'user1@example.org', 'typeOfPerson': 'natural', 'organisation': 'Pangea', 'membershipType': 'Employee', 'membershipId': '1a', 'affiliatedSince': '2023-01-01'}, 'credentialSchema': {'id': 'https://idhub.pangea.org/vc_schemas/membership-card.json', 'type': 'FullJsonSchemaValidator2021'}, 'proof': {'type': 'Ed25519Signature2018', 'proofPurpose': 'assertionMethod', 'verificationMethod': 'did:web:idhub.pangea.org:dids:z6Mko7ParpJZzBopW48DY8125Tcz9hMCaH7YzteWKnFcVzhu#z6Mko7ParpJZzBopW48DY8125Tcz9hMCaH7YzteWKnFcVzhu', 'created': '2024-06-11T14:59:37Z', 'jws': 'eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..kC2_QSkWRQ_fZ6C0_lRWvf4xuuxOueeCMb6dQFPKyn1h3gAHg_tb98RETIZeaQD6759wjJuH-IPJpvo4vzCDDA'}} + + def test_render_tokens_page(self): + response = self.client.get('/webhook/tokens/', follow=True) + + self.assertEqual(response.status_code, 200) + + def test_new_token(self): + response = self.client.get('/webhook/tokens/new', follow=True) + + self.assertEqual(response.status_code, 200) + self.assertEqual(Token.objects.count(), 1) + + tk = Token.objects.first() + url = "/webhook/tokens/{}/del".format(tk.id) + response = self.client.get(url, follow=True) + + self.assertEqual(Token.objects.count(), 0) + + def test_verify(self): + token = uuid4() + Token.objects.create(token=token) + data = { + "type": "credential", + "data": self.get_credential() + } + headers = { + "Authorization": f"Bearer {token}", + "Content-Type": "application/json" + } + response = self.client.post( + reverse('webhook:verify'), + content_type='application/json', + data=data, + headers=headers + ) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), {'status': 'success'}) + self.client.headers = None