def testMissing(self):
     'APIGateway.getAndValidateEntity() should raise a 400 HttpError if body is missing'
     event = {}
     sut = APIGateway(mockLoggerFactory, event)
     schema = {}
     name = 'entity'
     with self.assertRaises(HttpError) as cm:
         sut.getAndValidateEntity(schema, name)
     self.assertEqual(cm.exception.statusCode, 400)
     self.assertEqual(cm.exception.message, 'Missing entity')
 def testNotJSON(self):
     'APIGateway.getAndValidateEntity() should raise a 415 HttpError if Content-Type is not `application/json`'
     event = {
         'headers': {
             'Content-Type': 'application/xml'
         }
     }
     sut = APIGateway(mockLoggerFactory, event)
     schema = {}
     name = 'entity'
     with self.assertRaises(HttpError) as cm:
         sut.getAndValidateEntity(schema, name)
     self.assertEqual(cm.exception.statusCode, 415)
     self.assertEqual(cm.exception.message, 'Expected application/json Content-Type')
 def testInvalidJSON(self):
     'APIGateway.getAndValidateEntity() should raise a 422 HttpError if body is not a valid JSON'
     event = {
         'body': '[1]'
     }
     sut = APIGateway(mockLoggerFactory, event)
     schema = {'type': 'object'}
     name = 'entity'
     with self.assertRaises(HttpError) as cm:
         sut.getAndValidateEntity(schema, name)
     self.assertEqual(cm.exception.statusCode, 422)
     self.assertEqual(cm.exception.message, 'Invalid entity')
     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 testMalformedJSON(self):
     'APIGateway.getAndValidateEntity() should raise a 400 HttpError if body is not a JSON string'
     event = {
         'body': 'hello'
     }
     sut = APIGateway(mockLoggerFactory, event)
     schema = {}
     name = 'entity'
     with self.assertRaises(HttpError) as cm:
         sut.getAndValidateEntity(schema, name)
     self.assertEqual(cm.exception.statusCode, 400)
     self.assertEqual(cm.exception.message, 'Malformed entity JSON')
     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 testInvalidJSONSchema(self):
     '''
     APIGateway.getAndValidateEntity() should raise an INTERNAL_SERVER_ERROR NspError if passed schema
     is not a valid JSON schema
     '''
     event = {
         'body': '[1]'
     }
     sut = APIGateway(mockLoggerFactory, event)
     schema = {'type': 'objective'}
     name = 'entity'
     with self.assertRaises(NspError) as cm:
         sut.getAndValidateEntity(schema, name)
     self.assertEqual(cm.exception.code, 'INTERNAL_SERVER_ERROR')
     self.assertEqual(cm.exception.message, 'Invalid entity JSON schema')
     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.getAndValidateEntity() should return the parsed entity as a dictionary with the datetimes converted'
     e = {
         'name': 'entity',
         'created': '2013-01-31T03:45:00.000Z'
     }
     expected = e.copy()
     expected['created'] = jsonutils.json2datetime(e['created'])
     event = {
         'body': json.dumps(e, default=jsonutils.dumpdefault)
     }
     sut = APIGateway(mockLoggerFactory, event)
     schema = {'type': 'object'}
     name = 'entity'
     entity = sut.getAndValidateEntity(schema, name)
     self.assertEqual(entity, expected)