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)  # Продукт должен быть удален
