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']))