Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)