test_views.py

#
from django.test import TestCase

from .models import Model
from vendor.models import Model as VendorModel
from .forms import FormDisabled
from .forms import Form
from . import app_label

from django.contrib.auth.models import User

from django.core.exceptions import ObjectDoesNotExist

from django.urls import reverse


from sm.utils import random_string
#
class Tester(TestCase):
    teststring = random_string()
    testitem = None
    password = random_string()
    fixtures = [
        "%s/fixtures/01_initial.yaml" % "vendor",
        "%s/fixtures/01_initial.yaml" % app_label,
    ]
#

Login as user

    def login(self):
#
        self.client.login(username=self.user.username, password=self.password)
#

Create user Create some item in models for testing

    def setUp(self):
#
        username = random_string()
        self.user = User.objects.create_superuser(
            username=username,
            password=self.password,
        )

        self.vendor = VendorModel.objects.all().order_by("name").first()
        self.testitem, created = Model.objects.get_or_create(
            version=self.teststring,
            vendor=self.vendor,
        )
#
    def test_login_redir(self):
        response = self.client.get(reverse("%s:index" % app_label))
        self.assertEqual(response.status_code, 302, "no redirect?")
#
    def test_listview(self):
        Model.objects.all().delete()
        self.setUp()
        self.login()
        response = self.client.get(reverse("%s:index" % app_label))
        self.assertEqual(response.status_code, 200, "no status 200?")
        item = response.context[-1]["object_list"].first()
#

It should be a VendorModel because of the grouped view

        self.assertIsInstance(item, VendorModel, "object not the correct model!?")
        self.assertEqual(
            item.operatingsystem_set.all().first().version, self.teststring
        )
#
    def test_detailview(self):
        self.login()
        url = reverse("%s:detail" % app_label, args=[self.testitem.pk])
        self.assertEqual("/%s/detail/%i/" % (app_label, self.testitem.pk), url)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200, "no status 200?")
        item = response.context[-1]["object"]
        self.assertIsInstance(item, Model, "object not the correct model!?")
        self.assertEqual(item.version, self.teststring)
        self.assertEqual(item.vendor.name, self.vendor.name)
        form = response.context[-1]["form"]
        self.assertIsInstance(form, FormDisabled)
        for field in ["version", "vendor"]:
            self.assertTrue(form.fields[field].widget.attrs["disabled"])
#
    def test_updateview(self):
        self.login()
        url = reverse("%s:update" % app_label, args=[self.testitem.pk])
        self.assertEqual("/%s/update/%i/" % (app_label, self.testitem.pk), url)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200, "no status 200?")
        item = response.context[-1]["object"]
        self.assertIsInstance(item, Model, "object not the correct model!?")
        self.assertEqual(item.version, self.teststring)
        self.assertEqual(item.vendor.name, self.vendor.name)
        form = response.context[-1]["form"]
        self.assertIsInstance(form, Form)
        for field in ["version", "vendor"]:
            self.assertRaises(
                KeyError,
                form.fields[field].widget.attrs.__getitem__,
                "disabled",
            )
#
    def test_deleteview(self):
        self.login()
        url = reverse("%s:delete" % app_label, args=[self.testitem.pk])
        self.assertEqual("/%s/delete/%i/" % (app_label, self.testitem.pk), url)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200, "no status 200?")
        item = response.context[-1]["object"]
        self.assertIsInstance(item, Model, "object not the correct model!?")
        self.assertEqual(item.version, self.teststring)
        self.assertEqual(item.vendor.name, self.vendor.name)
        self.assertContains(response, "Are you sure you want to delete")
        self.assertContains(response, "Confirm Delete")
#
    def test_deleteview_post(self):
        self.login()
        response = self.client.post(
            reverse("%s:delete" % app_label, args=[self.testitem.pk]),
            follow=True,
        )
        self.assertEqual(response.status_code, 200, "no status 200?")
        self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302)
        self.assertContains(
            response, "%s was deleted successfully" % self.testitem.version
        )
        with self.assertRaises(ObjectDoesNotExist):
            Model.objects.get(version=self.testitem.version, vendor=self.vendor)
#
    def test_createview(self):
        self.login()
        url = reverse("%s:create" % app_label)
        self.assertEqual("/%s/create" % app_label, url)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200, "no status 200?")
        self.assertRaises(KeyError, response.context[-1].__getitem__, "object")
        self.assertIn("form", response.context[-1])
        form = response.context[-1]["form"]
        self.assertRaises(
            KeyError,
            form.fields["version"].widget.attrs.__getitem__,
            "disabled",
        )
#
    def test_createview_post(self):
#

Make sure we have no objects in there

        Model.objects.all().delete()
        self.login()
        data = {
            "version": self.teststring,
            "vendor": self.vendor.pk,
        }
        response = self.client.post(
            reverse("%s:create" % app_label),
            data,
            follow=True,
        )
        self.assertEqual(response.status_code, 200, "no status 200?")
        self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302)
        item = response.context[-1]["object_list"].first()
        self.assertIsInstance(item, VendorModel)
        self.assertEqual(
            item.operatingsystem_set.all().first().version, data["version"]
        )
        self.assertEqual(
            item.operatingsystem_set.all().first().vendor.pk, data["vendor"]
        )

        self.assertContains(response, "%s was created successfully" % data["version"])
#
    def test_listview_empty_true_wo_obj(self):
        self.login()
#

Set cookie!

        self.client.cookies["srvmanager-show_empty"] = "true"
#

Make sure we have no objects in there

        Model.objects.all().delete()
        response = self.client.get(reverse("%s:index" % app_label))
        item = response.context[-1]["object_list"].first()
#

Since it returns all Vendors, CentOS (from fixtures) should still be there

        self.assertIsInstance(item, VendorModel)
#
    def test_listview_empty_false_w_obj(self):
        self.login()
#

Set cookie!

        self.client.cookies["srvmanager-show_empty"] = "false"
#

Make sure we have objects in there

        Model.objects.all().delete()
        self.setUp()
        self.login()  # New user created in setUp
        response = self.client.get(reverse("%s:index" % app_label))
        item = response.context[-1]["object_list"].first()
        self.assertIsInstance(item, VendorModel, "object not the correct model!?")
        self.assertEqual(
            item.operatingsystem_set.all().first().version, self.teststring
        )