GMashtalyar

Simple testing

1) set up code 2) logic to test 3) assertions

class TestModels(TestCase):
    def setUp(self):
        """
        Set up before each test
        """
        self.user = User.objects.create_user(username='testuser', password='password')
        self.category = Category.objects.create(name="Test Category")

    def test_model_InventoryItem(self):
        inventory_item = InventoryItem.objects.create(name="Test Item", quantity=10, user=self.user, category=self.category)

        self.assertEquals(str(inventory_item), 'Test Item')
        self.assertTrue(isinstance(inventory_item, InventoryItem))


class TestViews(TestCase):

    def setUp(self):
        self.client = Client()
        self.user = User.objects.create_user(username='testuser', password='password')
        self.client.login(username='testuser', password='password')
        self.category = Category.objects.create(name="Test Category")
        self.inventory_item = InventoryItem.objects.create(name="Test Item", quantity=10, user=self.user, category=self.category)

        # urls
        self.index_url = reverse('index')
        self.dashboard_url = reverse('dashboard')
        self.add_item_url = reverse('add-item')
        self.edit_item_url = reverse("edit-item", args=[self.inventory_item.id])
        self.delete_item_url = reverse("delete-item", args=[self.inventory_item.id])

    def test_index_GET(self):
        # mock the response
        response = self.client.get(self.index_url)

        # write assertions
        self.assertEquals(response.status_code, 200)
        self.assertTemplateUsed(response, 'testing/index.html')

    def test_dashboard_GET(self):
        response = self.client.get(self.dashboard_url)
        self.assertEquals(response.status_code, 200)
        self.assertTemplateUsed(response, 'testing/dashboard.html')

    def test_dashboard_GET_not_logged_in(self):
        self.client.logout()
        response = self.client.get(self.dashboard_url)
        self.assertEquals(response.status_code, 302)

    def test_add_item_POST(self):
        response = self.client.post(self.add_item_url, {
            'name': "Test Item 2",
            'quantity': 15,
            'user': self.user.id,
            'category': self.category.id})

        self.assertEquals(response.status_code, 302)
        self.assertEquals(InventoryItem.objects.count(), 2)
        self.assertEquals(InventoryItem.objects.last().name, "Test Item 2")

    def test_yem_POST_no_data(self):
        response = self.client.post(self.add_item_url)

        self.assertEquals(response.status_code, 200)
        self.assertEquals(InventoryItem.objects.count(), 1)

    def test_edit_item_POST(self):
        response = self.client.post(self.edit_item_url, {
            'name': "Updated Test Item",
            'quantity': 10,
            'user': self.user.id,
            'category': self.category.id})
        # self.inventory_item.refresh_from_db() JUST IN CASE
        self.assertEquals(response.status_code, 302)
        self.assertEquals(InventoryItem.objects.first().name, "Updated Test Item")
        self.assertEquals(InventoryItem.objects.count(), 1)

    def test_delete_item_DELETE(self):
        response = self.client.delete(self.delete_item_url)
        self.assertEquals(response.status_code, 302)
        self.assertEquals(InventoryItem.objects.count(), 0)