Jake Mulhern
Jake Mulhern

Reputation: 772

Testing a PUT request in Django Rest Framework

When I run this test

def test_update_car(self):
        new_car = Car.objects.create(make='Chevy', model='Equinox', year=2012, seats=4, color='green', VIN='12345671234567abc', current_mileage=19000, service_interval='3 months', next_service='april')
        url = reverse('car-detail', kwargs={'pk': new_car.pk})
        data = {
            'make': 'test',
            'model': 'test',
            'year': 2014,
            'seats': 5,
            'color': 'blue',
            'VIN': '12345671234567abc',
            'current_mileage': 20000,
            'service_interval': '6 months',
            'next_service': 'July',
        }
        response = self.client.put(url, data=data)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(new_car.make, 'test')

I get an assertion error

AssertionError: 'Chevy' != 'test'

How should I structure this differently so that the PUT request actually changes the make and model of the new_car?

Upvotes: 4

Views: 1039

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476493

If your view indeed responds to a PUT request, the problem is located at the test itself. You need to refresh the data from the database with .refresh_from_db(…) [Django-doc]:

def test_update_car(self):
    new_car = Car.objects.create(make='Chevy', model='Equinox', year=2012, seats=4, color='green', VIN='12345671234567abc', current_mileage=19000, service_interval='3 months', next_service='april')
    url = reverse('car-detail', kwargs={'pk': new_car.pk})
    data = {
        'make': 'test',
        'model': 'test',
        'year': 2014,
        'seats': 5,
        'color': 'blue',
        'VIN': '12345671234567abc',
        'current_mileage': 20000,
        'service_interval': '6 months',
        'next_service': 'July',
    }
    response = self.client.put(url, data=data)
    new_car.refresh_from_db()
    self.assertEqual(response.status_code, status.HTTP_200_OK)
    self.assertEqual(new_car.make, 'test')

Upvotes: 5

Related Questions