Я использую Django Rest Framework (DRF) и пытаюсь протестировать метод POST.
Это мои модели:
class CustomUser(AbstractUser):
def __str__(self):
return self.email
class Meta:
ordering = ('id',)
verbose_name = 'user'
class Brand(Group):
owner = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='%(class)ss',
related_query_name='%(class)s')
description = models.TextField('description', max_length=3000, blank=True)
facebook_url = models.URLField('facebook url', blank=True)
twitter_url = models.URLField('twitter url', blank=True)
instagram_url = models.URLField('instagram url', blank=True)
pinterest_url = models.URLField('pinterest url', blank=True)
portfolio_url = models.URLField('portfolio url', blank=True)
phone_number = PhoneNumberField('phone number', blank=True)
Это мои сериализаторы:
class CustomUserSerializer(HyperlinkedModelSerializer):
brands = HyperlinkedRelatedField(
many=True,
read_only=True,
view_name='brand-detail'
)
class Meta:
model = CustomUser
fields = (
'url',
'username',
'email',
'brands',
)
class BrandSerializer(HyperlinkedModelSerializer):
addresses = HyperlinkedRelatedField(many=True,
read_only=True,
view_name='address-detail')
class Meta:
model = Brand
fields = (
'url',
'name',
'owner',
'description',
'facebook_url',
'twitter_url',
'instagram_url',
'pinterest_url',
'portfolio_url',
'phone_number',
)
Вот мои взгляды:
class CustomUserViewSet(ModelViewSet):
""""A view set for viewing and editing custom users."""
queryset = CustomUser.objects.all()
serializer_class = CustomUserSerializer
class BrandViewSet(ModelViewSet):
"""A view set for viewing and editing brands."""
queryset = Brand.objects.all()
serializer_class = BrandSerializer
И это мой тест, я использую pytest:
@pytest.mark.django_db
def test_create_brand_with_valid_data(client):
"""Tests POST method with valid data to create a Brand instance."""
user = CustomUser.objects.create(username='x',
email='x@example.com',
password='abc123', )
data = {
'owner': f'http://testserver/api/users/{user.id}/',
'name': 'NA',
}
print(data)
response = client.post(reverse('address-list'),
data=json.dumps(data),
content_type='application/json')
assert response.status_code == HTTP_201_CREATED
Вместо ответа 201 я получаю400, так что я делаю что-то не так, но я не знаю, что.
Traceback:
_________________________________________________________________________________ test_create_brand_with_valid_data _________________________________________________________________________________
client = <django.test.client.Client object at 0x10c2199b0>
@pytest.mark.django_db
def test_create_brand_with_valid_data(client):
"""Tests POST method with valid data to create a Brand instance."""
user = CustomUser.objects.create(username='x',
email='x@example.com',
password='abc123', )
data = {
'owner': f'http://testserver/api/users/{user.id}/',
'name': 'NA',
}
print(data)
response = client.post(reverse('address-list'),
data=json.dumps(data),
content_type='application/json')
> assert response.status_code == HTTP_201_CREATED
E assert 400 == 201
E + where 400 = <Response status_code=400, "application/json">.status_code
api/tests/test_brand.py:98: AssertionError