Pytest потерпел неудачу при тестировании API с правильным URL и данными
Когда я создаю Clinic
через Swagger
или Postman
, он работает нормально и поле с теми же данными при тестировании!
модель
class Clinic(models.Model):
name = models.CharField(max_length=50)
price = models.FloatField()
doctor = models.ForeignKey(User, on_delete=models.CASCADE, related_name='doctor_clinic')
date = models.ManyToManyField(ClinicDate, related_name='clinic_date')
сериализатор
class ClinicDateSerializers(serializers.ModelSerializer):
class Meta:
model = ClinicDate
fields = ['day','start_time', 'end_time']
class ClinicSerializers(serializers.ModelSerializer):
doctor = serializers.StringRelatedField(required=False)
date = ClinicDateSerializers(many=True, required=True)
class Meta:
model = Clinic
fields = ['name', 'price', 'doctor', 'date']
def create(self, validated_data):
dates_data = validated_data.pop('date')
user = self.context['request'].user
clinic = Clinic.objects.create(doctor=user, **validated_data)
for date_data in dates_data:
dt = ClinicDate.objects.create(**date_data)
clinic.date.add(dt)
return clinic
URL
path('add/', views.ClinicCreateView.as_view(), name='clinic-create'),
pytest
@pytest.mark.django_db
class TestClinic:
@pytest.fixture
def setup(self):
User.objects.create_doctor(email="doctor1@doctoronline.com", password="12345")
data = {
'email':'doctor1@doctoronline.com',
'password':'12345',
}
response = client.post(reverse('token_obtain_pair_doctor'), data=data)
self.access_token = response.json()['access']
client.credentials(HTTP_AUTHORIZATION='Bearer ' + self.access_token)
def test_valid_create_clinic(self, setup):
data = {
"name": "Clinic 1",
"price": 1000,
"date": [
{
"day": "SATURDAY",
"start_time": "2021-08-24T21:21:17.960Z",
"end_time": "2021-08-24T21:21:17.960Z"
}
]
}
response = client.post(reverse('clinic-create'), data=data)
assert response.status_code == status.HTTP_201_CREATED
Подсказка нет проблем с setup
или data
Просто для протокола: Проблема была в том, что я имею дело с вложенным сериализатором, а по умолчанию формат multipart не поддерживает вложенные данные, поэтому я просто хочу установить `formate = 'json'
response = client.post(reverse('clinic-create'), data=data, format='json')