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)