from rest_framework.test import APITestCase from rest_framework import status from .models import Product from django.urls import reverse class ProductAPITest(APITestCase): def setUp(self): # Создание тестового продукта self.product_data = { 'name': 'Test Product', 'manufacturer_name': 'Test Manufacturer', 'manufacturer_country': 'Test Country', 'unit_of_measure': 'pcs', 'shelf_life_days': 365, 'barcode': '123456789012', } self.product = Product.objects.create(**self.product_data) self.url = reverse('product-list') # Замени на свой URL def test_create_product(self): """Test creating a new product""" response = self.client.post(self.url, self.product_data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(Product.objects.count(), 2) self.assertEqual(Product.objects.latest('id').name, self.product_data['name']) def test_get_product(self): """Test retrieving a product""" response = self.client.get(self.url) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 1) # Только один продукт в базе def test_update_product(self): """Test updating a product""" updated_data = {'name': 'Updated Product'} response = self.client.put(reverse('product-detail', args=[self.product.id]), updated_data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.product.refresh_from_db() self.assertEqual(self.product.name, 'Updated Product') def test_delete_product(self): """Test deleting a product""" response = self.client.delete(reverse('product-detail', args=[self.product.id])) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(Product.objects.count(), 0) # Продукт должен быть удален