def testMissing(self): 'APIGateway.getAndValidatePrincipal() should raise a 401 HttpError if principalId is missing' event = {} sut = APIGateway(mockLoggerFactory, event) with self.assertRaises(HttpError) as cm: sut.getAndValidatePrincipal() self.assertEqual(cm.exception.statusCode, 401) self.assertEqual(cm.exception.message, 'Missing principal')
def testInvalidJSON(self): 'APIGateway.getAndValidatePrincipal() should raise a 401 HttpError if principalId is not a valid JSON' event = { 'requestContext': { 'authorizer': { 'principalId': '{}' } } } sut = APIGateway(mockLoggerFactory, event) with self.assertRaises(HttpError) as cm: sut.getAndValidatePrincipal() self.assertEqual(cm.exception.statusCode, 401) self.assertEqual(cm.exception.message, 'Invalid principal') self.assertIsInstance(cm.exception.causes, list) self.assertGreater(len(cm.exception.causes), 0) for i in range(len(cm.exception.causes)): with self.subTest(i=i): self.assertIsInstance(cm.exception.causes[i], str)
def testOK(self): 'APIGateway.getAndValidatePrincipal() should return the principal as a Principal instance' p = {'organizationId': 'id', 'roles': []} event = { 'requestContext': { 'authorizer': { 'principalId': json.dumps(p) } } } sut = APIGateway(mockLoggerFactory, event) principal = sut.getAndValidatePrincipal() # Non si possono confrontare i Principal se non si scrive il loro operatore, e per i test non ne vale la pena self.assertIsInstance(principal, Principal) self.assertEqual(principal.organizationId, p['organizationId']) self.assertEqual(principal.roles, set(p['roles']))