from django.test import TestCase
from .models import WarehouseItem

class WarehouseItemModelTest(TestCase):
    def setUp(self):
        WarehouseItem.objects.create(name="Test Item", quantity=10, description="Test Description")

    def test_warehouse_item_creation(self):
        item = WarehouseItem.objects.get(name="Test Item")
        self.assertEqual(item.quantity, 10)
        self.assertEqual(item.description, "Test Description")

class WarehouseItemViewTest(TestCase):
    def setUp(self):
        self.item = WarehouseItem.objects.create(name="Test Item", quantity=10, description="Test Description")

    def test_warehouse_item_list_view(self):
        response = self.client.get('/warehouse/')
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "Test Item")

    def test_warehouse_item_detail_view(self):
        response = self.client.get(f'/warehouse/{self.item.id}/')
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "Test Item")

    def test_warehouse_item_create_view(self):
        response = self.client.post('/warehouse/create/', {
            'name': 'New Item',
            'quantity': 5,
            'description': 'New Description'
        })
        self.assertEqual(response.status_code, 302)  # Redirect after successful creation
        self.assertTrue(WarehouseItem.objects.filter(name='New Item').exists())

    def test_warehouse_item_update_view(self):
        response = self.client.post(f'/warehouse/{self.item.id}/update/', {
            'name': 'Updated Item',
            'quantity': 20,
            'description': 'Updated Description'
        })
        self.assertEqual(response.status_code, 302)  # Redirect after successful update
        self.item.refresh_from_db()
        self.assertEqual(self.item.name, 'Updated Item')

    def test_warehouse_item_delete_view(self):
        response = self.client.post(f'/warehouse/{self.item.id}/delete/')
        self.assertEqual(response.status_code, 302)  # Redirect after successful deletion
        self.assertFalse(WarehouseItem.objects.filter(id=self.item.id).exists())