def test_patch_add_submodel(self): """Test for updating a single instance of the model by adding a related model using the :http:method:`patch` method. """ # Let's create a row as usual response = self.app.post('/api/person', data=dumps({'name': u'Lincoln', 'age': 23})) self.assertEqual(response.status_code, 201) data = {'computers': {'add': [{'name': u'lixeiro', 'vendor': u'Lemote'}]} } response = self.app.patch('/api/person/1', data=dumps(data)) self.assertEqual(response.status_code, 200) # Let's check it out response = self.app.get('/api/person/1') loaded = loads(response.data) self.assertEqual(len(loaded['computers']), 1) self.assertEqual(loaded['computers'][0]['name'], data['computers']['add'][0]['name']) self.assertEqual(loaded['computers'][0]['vendor'], data['computers']['add'][0]['vendor']) # test that this new computer was added to the database as well computer = _get_by(self.db.session, self.Computer, id=1) self.assertIsNotNone(computer) self.assertEqual(data['computers']['add'][0]['name'], computer.name) self.assertEqual(data['computers']['add'][0]['vendor'], computer.vendor)
def test_post(self): """Test for creating a new instance of the database model using the :http:method:`post` method. """ # Invalid JSON in request data should respond with error. response = self.app.post('/api/person', data='Invalid JSON string') self.assertEqual(response.status_code, 400) self.assertEqual(loads(response.data)['message'], 'Unable to decode data') # Now, let's test the validation stuff # response = self.app.post('/api/person', data=dumps({'name': u'Test', # 'age': 'oi'})) # assert loads(response.data)['message'] == 'Validation error' # assert loads(response.data)['error_list'].keys() == ['age'] response = self.app.post('/api/person', data=dumps({'name': 'Lincoln', 'age': 23})) self.assertEqual(response.status_code, 201) self.assertIn('id', loads(response.data)) response = self.app.get('/api/person/1') self.assertEqual(response.status_code, 200) deep = {'computers': []} inst = _to_dict(_get_by(self.db.session, self.Person, id=1), deep) self.assertEqual(loads(response.data), inst)
def test_delete(self): """Test for deleting an instance of the database using the :http:method:`delete` method. """ # Creating the person who's gonna be deleted response = self.app.post('/api/person', data=dumps({'name': 'Lincoln', 'age': 23})) self.assertEqual(response.status_code, 201) self.assertIn('id', loads(response.data)) # Making sure it has been created deep = {'computers': []} inst = _to_dict(_get_by(self.db.session, self.Person, id=1), deep) response = self.app.get('/api/person/1') self.assertEqual(loads(response.data), inst) # Deleting it response = self.app.delete('/api/person/1') self.assertEqual(response.status_code, 204) # Making sure it has been deleted self.assertIsNone(_get_by(self.db.session, self.Person, id=1))
def test_query_related_field(self): """Test for making a query with respect to a related field.""" # add a computer to person 1 computer = self.Computer(name=u'turing', vendor=u'Dell') p1 = _get_by(self.db.session, self.Person, id=1) p1.computers.append(computer) self.db.session.commit() d = {'filters': [{'name': 'computers__name', 'val': u'turing', 'op': 'any'}]} query = create_query(self.db.session, self.Person, d) self.assertEqual(query.count(), 1) self.assertEqual(query.one().computers[0].name, 'turing') d = {'filters': [{'name': 'age', 'op': 'lte', 'field': 'other'}], 'order_by': [{'field': 'other'}]} query = create_query(self.db.session, self.Person, d) self.assertEqual(query.count(), 2) results = query.all() self.assertEqual(results[0].other, 10) self.assertEqual(results[1].other, 19)