Module todo.tests.test_views

Expand source code
# MIT License

# Copyright © 2024 Akarsh Reddy Eathamukkala

# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the “Software”), to deal in
# the Software without restriction, including without limitation the rights to
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
# of the Software, and to permit persons to whom the Software is furnished to
# do so, subject to the following conditions:

# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.

from django.urls import reverse
from django.test import TestCase, Client, RequestFactory
from django.contrib.auth.models import User
from todo.views import config, config_hook, delete_template, login_request, template_from_todo, template, delete_todo, index, getListTagsByUserid, removeListItem, addNewListItem, updateListItem, createNewTodoList, register_request, getListItemByName, getListItemById, markListItem, todo_from_template
from django.utils import timezone
from todo.models import List, ListItem, Template, TemplateItem, ListTags, SharedList
from todo.forms import NewUserForm
from django.contrib.messages.storage.fallback import FallbackStorage
from django.contrib.auth.models import AnonymousUser
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.messages import get_messages

import json


class TestViews(TestCase):
    def setUp(self):
        # Every test needs access to the client and request factory.
        self.client = Client()
        self.factory = RequestFactory()
        self.user = User.objects.create_user(
            username='jacob', email='jacob@…', password='top_secret')
        self.anonymous_user = AnonymousUser()
        # Config setup
        config["darkMode"] = False
        config["primary_color"] = '#0fa662'
        config["hover_color"] = "#0b8f54"

    def testLogin(self):
        request = self.factory.get('/login/')
        request.user = self.user
        post = request.POST.copy()  # to make it mutable
        post['todo'] = 1
        print(request)
        request.POST = post
        response = login_request(request)
        self.assertEqual(response.status_code, 200)

    def testLogin_with_invalid_credentials(self):
        response = self.client.post(reverse('todo:login'), {
            'username': 'wronguser',
            'password': 'wrongpassword'
        })

        # Check that the response is rendered to the correct template
        self.assertTemplateUsed(response, 'todo/login.html')

        # # Check that the form contains errors
        form = response.context['login_form']
        self.assertIsInstance(form, AuthenticationForm)

        # Check that the error message is set
        messages_list = list(response.wsgi_request._messages)
        self.assertEqual(len(messages_list), 1)
        self.assertEqual(str(messages_list[0]), "Invalid username or password.")
        
        # Ensure the user is not logged in
        self.assertFalse(response.wsgi_request.user.is_authenticated)

    def testLogin_with_invalid_form(self):
        response = self.client.post(reverse('todo:login'), {
            'username': '',  # Invalid: empty username
            'password': ''   # Invalid: empty password
        })

        # Check that the response is rendered to the correct template
        self.assertTemplateUsed(response, 'todo/login.html')

        # Check that the form is instantiated correctly
        form = response.context['login_form']
        self.assertIsInstance(form, AuthenticationForm)

        # Check that the form contains errors
        self.assertFalse(form.is_valid())  # The form should have errors

        # Ensure error messages are displayed
        messages_list = list(get_messages(response.wsgi_request))
        self.assertGreater(len(messages_list), 0)  # Ensure there is at least one message
        self.assertIn("Invalid", str(messages_list[0]))  # Check for required field error

        # Ensure the user is not logged in
        self.assertFalse(response.wsgi_request.user.is_authenticated)

        # Test specific form errors (if you want to check individual fields)
        self.assertIn('username', str(messages_list[0]))  # Ensure 'username' field has errors
        self.assertIn('password', str(messages_list[0]))  # Ensure 'password' field has errors

    def testSavingTodoList(self):
        response = self.client.get(reverse('todo:createNewTodoList'))
        self.assertEqual(response.status_code, 302)
        # print(response)

    def test_delete_todo_list(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )
        ListItem.objects.create(
            item_name="test item",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        response = delete_todo(request)
        self.assertEqual(response.status_code, 302)

    def test_delete_todo_list_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        response = delete_todo(request)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))

    def test_getListTagsByUserid(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        ListTags.objects.create(
            user_id_id=self.user.id,
            tag_name='test',
            created_on=timezone.now()
        )
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        request.method = "POST"
        response = getListTagsByUserid(request)
        print('response:')
        print(response)
        self.assertIsNotNone(response)

    def test_getListTagsByUserid_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        request.method = "POST"
        response = getListTagsByUserid(request)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))
    
    def test_index(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        response = index(request)
        self.assertEqual(response.status_code, 200)
    
    def test_index_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        response = index(request)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))

    def test_template_from_todo_redirect(self):
        client = self.client
        response = client.get(reverse('todo:template_from_todo'))
        self.assertEquals(response.status_code, 302)

    def test_template_from_todo_function(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id,
        )
        item = ListItem.objects.create(
            item_name="test item",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=True,
        )
        post = request.POST.copy()  # to make it mutable
        post['todo'] = 1
        request.POST = post
        response = template_from_todo(request)
        self.assertEqual(response.status_code, 302)
    
    def test_template_from_todo_function_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        post = request.POST.copy()  # to make it mutable
        post['todo'] = 1
        request.POST = post
        response = template_from_todo(request)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))

    def test_template_display(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        new_template = Template.objects.create(
            title_text="test template",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id
        )
        template_item = TemplateItem.objects.create(
            item_text="test item",
            created_on=timezone.now(),
            template=new_template,
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now()
        )
        post = request.POST.copy()  # to make it mutable
        post['todo'] = 1
        request.POST = post
        response = template(request, 1)
        self.assertEqual(response.status_code, 200)
    
    def test_template_display_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        post = request.POST.copy()  # to make it mutable
        post['todo'] = 1
        request.POST = post
        response = template(request, 1)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))
        
    def test_removeListItem(self):
        request = self.factory.get('/todo/')
        request.user = self.user

        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )

        ListItem.objects.create(
            item_name="test item",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )

        post = request.POST.copy()
        # post['list_item_id'] = 1
        request.method = "POST"
        request._body = json.dumps({"list_item_id": 1}).encode('utf-8')
        response = removeListItem(request)
        print(response)
        self.assertIsNotNone(response)

    def test_NewUserForm(self):
        form_data = {'email': '123@123.com', 'username': '123',
                     'password1': 'K!35EGL&g7#U', 'password2': 'K!35EGL&g7#U'}
        form = NewUserForm(form_data)
        self.assertTrue(form.is_valid())

    def test_addNewListItem(self):

        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )

        params = {
            'list_id': todo.id,
            'list_item_name': "random",
            "create_on": 1670292391,
            "due_date": "2023-01-01",
            "tag_color": "#f9f9f9",
            "item_text": "",
            "is_done": False
        }

        request = self.factory.post(f'/todo/', data=params,
                                    content_type="application/json")
        request.user = self.user
        # request.method = "POST"
        print(type(params))
        # param = json.dumps(param,cls=DateTimeEncoder)
        # request._body = json.dumps(params, separators=(',', ':')).encode('utf-8')
        temp = addNewListItem(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_updateListItem(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        todo = List.objects.create(
            title_text="test list 2",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id,
        )
        item = ListItem.objects.create(
            item_name="test item 2",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )
        post = request.POST.copy()
        post['todo'] = 1
        post['note'] = 'test note'
        request.POST = post
        request.method = "POST"
        response = updateListItem(request, item.id)
        self.assertEqual(response.status_code, 302)

    def test_createNewTodoList(self):
        test_data = {'list_name': 'test',
                     'create_on': 1670292391,
                     'list_tag': 'test_tag',
                     'shared_user': None,
                     'create_new_tag': True}
        request = self.factory.post(f'/todo/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        temp = createNewTodoList(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_getListItemByName(self):
        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )
        ListItem.objects.create(
            item_name="test item",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )
        test_data = {'list_id': '1',
                     'list_item_name': "test item"
                     }
        request = self.factory.post(f'/todo/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        response = getListItemByName(request)
        self.assertEqual(response.status_code, 200)

    def test_getListItemById(self):
        todo = List.objects.create(
            title_text="test list 3",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )
        item = ListItem.objects.create(
            item_name="test item 3",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )
        test_data = {'list_id': str(todo.id),
                     'list_item_name': 'test item 3',
                     'list_item_id': str(item.id)
                     }
        request = self.factory.post(f'/todo/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        temp = getListItemById(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_markListItem(self):
        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )

        listItem = ListItem.objects.create(
            item_name="test item",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )

        params = {
            'list_id': todo.id,
            'list_item_name': listItem.item_name,
            "create_on": 1670292391,
            "due_date": "2023-01-01",
            "finish_on": 1670292392,
            "is_done": True,
            "list_item_id": listItem.id,
        }

        request = self.factory.post(f'/todo/', data=params,
                                    content_type="application/json")
        request.user = self.user
        temp = markListItem(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_createNewTodoList2(self):
        test_data = {'list_name': 'test',
                     'create_on': 1670292391,
                     'list_tag': 'test_tag',
                     'shared_user': 'someone',
                     'create_new_tag': True}
        request = self.factory.post(f'/todo/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        temp = createNewTodoList(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_createNewTodoList3(self):
        sharedUser = User.objects.create_user(
            username='share', email='share@…', password='top_secret')
        sharedList = SharedList.objects.create(
            user=sharedUser,
            shared_list_id=""
        )

        test_data = {'list_name': 'test',
                     'create_on': 1670292391,
                     'list_tag': 'test_tag',
                     'shared_user': 'share',
                     'create_new_tag': True}
        request = self.factory.post(f'/todo/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        temp = createNewTodoList(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_todo_from_template(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        new_template = Template.objects.create(
            title_text="test template",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id
        )
        template_item = TemplateItem.objects.create(
            item_text="test item",
            created_on=timezone.now(),
            template=new_template,
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now()
        )

        post = request.POST.copy()
        post['todo'] = 1
        post['template'] = new_template.id
        request.POST = post
        request.method = "POST"
        response = todo_from_template(request)
        self.assertEqual(response.status_code, 302)

    def test_login_request(self):
        test_data = {'username': 'jacob',
                     'password': 'top_secret'}
        request = self.factory.post(f'/login/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        setattr(request, 'session', 'session')
        setattr(request, '_messages', FallbackStorage(request))
        response = login_request(request)
        self.assertEqual(response.status_code, 200)

    def test_delete_template(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        new_template = Template.objects.create(
            title_text="test template",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id
        )
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        request.method = "POST"
        response = delete_template(request, new_template.id)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, '/templates')

    def test_delete_template_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        new_template = Template.objects.create(
            title_text="test template",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id
        )
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        request.method = "POST"
        response = delete_template(request, new_template.id)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, '/login')

    def test_delete_template_undefined(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        request.method = "POST"
        response = delete_template(request, 9999)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, '/login')

    def test_delete_template_undefined_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        request.method = "POST"
        response = delete_template(request, 9999)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, '/templates')
  
    def test_initial_config_state(self):
        # Initial config state check
        self.assertFalse(config["darkMode"])
        self.assertEqual(config["primary_color"], '#0fa662')
        self.assertEqual(config["hover_color"], '#0b8f54')

    def test_config_change_index(self): 
        # Call config_hook and check if it toggles to dark mode on index page
        request = self.factory.get('/todo/')
        request.user = self.user
        request.method = "POST"
        response = config_hook(request, 'index')
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:index'))
        self.assertTrue(config["darkMode"])
        self.assertEqual(config["primary_color"], '#000000')
        self.assertEqual(config["hover_color"], '#cccccc')

        # Call config_hook again and check if it toggles back to light mode
        response = config_hook(request, 'index')
        
        # Check config changes for dark mode disabled
        self.assertFalse(config["darkMode"])
        self.assertEqual(config["primary_color"], '#0fa662')
        self.assertEqual(config["hover_color"], '#0b8f54')

        # Verify redirect URL again
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:index'))

    def test_config_change_login(self): 
        # Call config_hook and check if it toggles to dark mode on login page
        request = self.factory.get('/todo/')
        request.user = self.user
        request.method = "POST"
        response = config_hook(request, 'login')
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))
        self.assertTrue(config["darkMode"])
        self.assertEqual(config["primary_color"], '#000000')
        self.assertEqual(config["hover_color"], '#cccccc')

        # Call config_hook again and check if it toggles back to light mode
        response = config_hook(request, 'login')
        
        # Check config changes for dark mode disabled
        self.assertFalse(config["darkMode"])
        self.assertEqual(config["primary_color"], '#0fa662')
        self.assertEqual(config["hover_color"], '#0b8f54')

        # Verify redirect URL again
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))

    def test_config_change_template(self): 
        # Call config_hook and check if it toggles to dark mode on template page
        request = self.factory.get('/todo/')
        request.user = self.user
        request.method = "POST"
        response = config_hook(request, 'template')
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:template'))
        self.assertTrue(config["darkMode"])
        self.assertEqual(config["primary_color"], '#000000')
        self.assertEqual(config["hover_color"], '#cccccc')

        # Call config_hook again and check if it toggles back to light mode
        response = config_hook(request, 'template')
        
        # Check config changes for dark mode disabled
        self.assertFalse(config["darkMode"])
        self.assertEqual(config["primary_color"], '#0fa662')
        self.assertEqual(config["hover_color"], '#0b8f54')

        # Verify redirect URL again
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:template'))

Classes

class TestViews (methodName='runTest')

Similar to TransactionTestCase, but use transaction.atomic() to achieve test isolation.

In most situations, TestCase should be preferred to TransactionTestCase as it allows faster execution. However, there are some situations where using TransactionTestCase might be necessary (e.g. testing some transactional behavior).

On database backends with no transaction support, TestCase behaves as TransactionTestCase.

Create an instance of the class that will use the named test method when executed. Raises a ValueError if the instance does not have a method with the specified name.

Expand source code
class TestViews(TestCase):
    def setUp(self):
        # Every test needs access to the client and request factory.
        self.client = Client()
        self.factory = RequestFactory()
        self.user = User.objects.create_user(
            username='jacob', email='jacob@…', password='top_secret')
        self.anonymous_user = AnonymousUser()
        # Config setup
        config["darkMode"] = False
        config["primary_color"] = '#0fa662'
        config["hover_color"] = "#0b8f54"

    def testLogin(self):
        request = self.factory.get('/login/')
        request.user = self.user
        post = request.POST.copy()  # to make it mutable
        post['todo'] = 1
        print(request)
        request.POST = post
        response = login_request(request)
        self.assertEqual(response.status_code, 200)

    def testLogin_with_invalid_credentials(self):
        response = self.client.post(reverse('todo:login'), {
            'username': 'wronguser',
            'password': 'wrongpassword'
        })

        # Check that the response is rendered to the correct template
        self.assertTemplateUsed(response, 'todo/login.html')

        # # Check that the form contains errors
        form = response.context['login_form']
        self.assertIsInstance(form, AuthenticationForm)

        # Check that the error message is set
        messages_list = list(response.wsgi_request._messages)
        self.assertEqual(len(messages_list), 1)
        self.assertEqual(str(messages_list[0]), "Invalid username or password.")
        
        # Ensure the user is not logged in
        self.assertFalse(response.wsgi_request.user.is_authenticated)

    def testLogin_with_invalid_form(self):
        response = self.client.post(reverse('todo:login'), {
            'username': '',  # Invalid: empty username
            'password': ''   # Invalid: empty password
        })

        # Check that the response is rendered to the correct template
        self.assertTemplateUsed(response, 'todo/login.html')

        # Check that the form is instantiated correctly
        form = response.context['login_form']
        self.assertIsInstance(form, AuthenticationForm)

        # Check that the form contains errors
        self.assertFalse(form.is_valid())  # The form should have errors

        # Ensure error messages are displayed
        messages_list = list(get_messages(response.wsgi_request))
        self.assertGreater(len(messages_list), 0)  # Ensure there is at least one message
        self.assertIn("Invalid", str(messages_list[0]))  # Check for required field error

        # Ensure the user is not logged in
        self.assertFalse(response.wsgi_request.user.is_authenticated)

        # Test specific form errors (if you want to check individual fields)
        self.assertIn('username', str(messages_list[0]))  # Ensure 'username' field has errors
        self.assertIn('password', str(messages_list[0]))  # Ensure 'password' field has errors

    def testSavingTodoList(self):
        response = self.client.get(reverse('todo:createNewTodoList'))
        self.assertEqual(response.status_code, 302)
        # print(response)

    def test_delete_todo_list(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )
        ListItem.objects.create(
            item_name="test item",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        response = delete_todo(request)
        self.assertEqual(response.status_code, 302)

    def test_delete_todo_list_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        response = delete_todo(request)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))

    def test_getListTagsByUserid(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        ListTags.objects.create(
            user_id_id=self.user.id,
            tag_name='test',
            created_on=timezone.now()
        )
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        request.method = "POST"
        response = getListTagsByUserid(request)
        print('response:')
        print(response)
        self.assertIsNotNone(response)

    def test_getListTagsByUserid_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        request.method = "POST"
        response = getListTagsByUserid(request)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))
    
    def test_index(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        response = index(request)
        self.assertEqual(response.status_code, 200)
    
    def test_index_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        response = index(request)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))

    def test_template_from_todo_redirect(self):
        client = self.client
        response = client.get(reverse('todo:template_from_todo'))
        self.assertEquals(response.status_code, 302)

    def test_template_from_todo_function(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id,
        )
        item = ListItem.objects.create(
            item_name="test item",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=True,
        )
        post = request.POST.copy()  # to make it mutable
        post['todo'] = 1
        request.POST = post
        response = template_from_todo(request)
        self.assertEqual(response.status_code, 302)
    
    def test_template_from_todo_function_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        post = request.POST.copy()  # to make it mutable
        post['todo'] = 1
        request.POST = post
        response = template_from_todo(request)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))

    def test_template_display(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        new_template = Template.objects.create(
            title_text="test template",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id
        )
        template_item = TemplateItem.objects.create(
            item_text="test item",
            created_on=timezone.now(),
            template=new_template,
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now()
        )
        post = request.POST.copy()  # to make it mutable
        post['todo'] = 1
        request.POST = post
        response = template(request, 1)
        self.assertEqual(response.status_code, 200)
    
    def test_template_display_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        post = request.POST.copy()  # to make it mutable
        post['todo'] = 1
        request.POST = post
        response = template(request, 1)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))
        
    def test_removeListItem(self):
        request = self.factory.get('/todo/')
        request.user = self.user

        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )

        ListItem.objects.create(
            item_name="test item",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )

        post = request.POST.copy()
        # post['list_item_id'] = 1
        request.method = "POST"
        request._body = json.dumps({"list_item_id": 1}).encode('utf-8')
        response = removeListItem(request)
        print(response)
        self.assertIsNotNone(response)

    def test_NewUserForm(self):
        form_data = {'email': '123@123.com', 'username': '123',
                     'password1': 'K!35EGL&g7#U', 'password2': 'K!35EGL&g7#U'}
        form = NewUserForm(form_data)
        self.assertTrue(form.is_valid())

    def test_addNewListItem(self):

        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )

        params = {
            'list_id': todo.id,
            'list_item_name': "random",
            "create_on": 1670292391,
            "due_date": "2023-01-01",
            "tag_color": "#f9f9f9",
            "item_text": "",
            "is_done": False
        }

        request = self.factory.post(f'/todo/', data=params,
                                    content_type="application/json")
        request.user = self.user
        # request.method = "POST"
        print(type(params))
        # param = json.dumps(param,cls=DateTimeEncoder)
        # request._body = json.dumps(params, separators=(',', ':')).encode('utf-8')
        temp = addNewListItem(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_updateListItem(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        todo = List.objects.create(
            title_text="test list 2",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id,
        )
        item = ListItem.objects.create(
            item_name="test item 2",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )
        post = request.POST.copy()
        post['todo'] = 1
        post['note'] = 'test note'
        request.POST = post
        request.method = "POST"
        response = updateListItem(request, item.id)
        self.assertEqual(response.status_code, 302)

    def test_createNewTodoList(self):
        test_data = {'list_name': 'test',
                     'create_on': 1670292391,
                     'list_tag': 'test_tag',
                     'shared_user': None,
                     'create_new_tag': True}
        request = self.factory.post(f'/todo/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        temp = createNewTodoList(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_getListItemByName(self):
        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )
        ListItem.objects.create(
            item_name="test item",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )
        test_data = {'list_id': '1',
                     'list_item_name': "test item"
                     }
        request = self.factory.post(f'/todo/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        response = getListItemByName(request)
        self.assertEqual(response.status_code, 200)

    def test_getListItemById(self):
        todo = List.objects.create(
            title_text="test list 3",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )
        item = ListItem.objects.create(
            item_name="test item 3",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )
        test_data = {'list_id': str(todo.id),
                     'list_item_name': 'test item 3',
                     'list_item_id': str(item.id)
                     }
        request = self.factory.post(f'/todo/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        temp = getListItemById(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_markListItem(self):
        todo = List.objects.create(
            title_text="test list",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=self.user.id,
        )

        listItem = ListItem.objects.create(
            item_name="test item",
            item_text="This is a test item on a test list",
            created_on=timezone.now(),
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now(),
            list=todo,
            is_done=False,
        )

        params = {
            'list_id': todo.id,
            'list_item_name': listItem.item_name,
            "create_on": 1670292391,
            "due_date": "2023-01-01",
            "finish_on": 1670292392,
            "is_done": True,
            "list_item_id": listItem.id,
        }

        request = self.factory.post(f'/todo/', data=params,
                                    content_type="application/json")
        request.user = self.user
        temp = markListItem(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_createNewTodoList2(self):
        test_data = {'list_name': 'test',
                     'create_on': 1670292391,
                     'list_tag': 'test_tag',
                     'shared_user': 'someone',
                     'create_new_tag': True}
        request = self.factory.post(f'/todo/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        temp = createNewTodoList(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_createNewTodoList3(self):
        sharedUser = User.objects.create_user(
            username='share', email='share@…', password='top_secret')
        sharedList = SharedList.objects.create(
            user=sharedUser,
            shared_list_id=""
        )

        test_data = {'list_name': 'test',
                     'create_on': 1670292391,
                     'list_tag': 'test_tag',
                     'shared_user': 'share',
                     'create_new_tag': True}
        request = self.factory.post(f'/todo/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        temp = createNewTodoList(request)
        response = index(request)
        self.assertEqual(response.status_code, 200)

    def test_todo_from_template(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        new_template = Template.objects.create(
            title_text="test template",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id
        )
        template_item = TemplateItem.objects.create(
            item_text="test item",
            created_on=timezone.now(),
            template=new_template,
            finished_on=timezone.now(),
            tag_color="#f9f9f9",
            due_date=timezone.now()
        )

        post = request.POST.copy()
        post['todo'] = 1
        post['template'] = new_template.id
        request.POST = post
        request.method = "POST"
        response = todo_from_template(request)
        self.assertEqual(response.status_code, 302)

    def test_login_request(self):
        test_data = {'username': 'jacob',
                     'password': 'top_secret'}
        request = self.factory.post(f'/login/', data=test_data,
                                    content_type="application/json")
        request.user = self.user
        setattr(request, 'session', 'session')
        setattr(request, '_messages', FallbackStorage(request))
        response = login_request(request)
        self.assertEqual(response.status_code, 200)

    def test_delete_template(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        new_template = Template.objects.create(
            title_text="test template",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id
        )
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        request.method = "POST"
        response = delete_template(request, new_template.id)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, '/templates')

    def test_delete_template_not_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        new_template = Template.objects.create(
            title_text="test template",
            created_on=timezone.now(),
            updated_on=timezone.now(),
            user_id_id=request.user.id
        )
        post = request.POST.copy()
        post['todo'] = 1
        request.POST = post
        request.method = "POST"
        response = delete_template(request, new_template.id)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, '/login')

    def test_delete_template_undefined(self):
        request = self.factory.get('/todo/')
        request.user = self.anonymous_user
        request.method = "POST"
        response = delete_template(request, 9999)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, '/login')

    def test_delete_template_undefined_logged_in(self):
        request = self.factory.get('/todo/')
        request.user = self.user
        request.method = "POST"
        response = delete_template(request, 9999)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, '/templates')
  
    def test_initial_config_state(self):
        # Initial config state check
        self.assertFalse(config["darkMode"])
        self.assertEqual(config["primary_color"], '#0fa662')
        self.assertEqual(config["hover_color"], '#0b8f54')

    def test_config_change_index(self): 
        # Call config_hook and check if it toggles to dark mode on index page
        request = self.factory.get('/todo/')
        request.user = self.user
        request.method = "POST"
        response = config_hook(request, 'index')
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:index'))
        self.assertTrue(config["darkMode"])
        self.assertEqual(config["primary_color"], '#000000')
        self.assertEqual(config["hover_color"], '#cccccc')

        # Call config_hook again and check if it toggles back to light mode
        response = config_hook(request, 'index')
        
        # Check config changes for dark mode disabled
        self.assertFalse(config["darkMode"])
        self.assertEqual(config["primary_color"], '#0fa662')
        self.assertEqual(config["hover_color"], '#0b8f54')

        # Verify redirect URL again
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:index'))

    def test_config_change_login(self): 
        # Call config_hook and check if it toggles to dark mode on login page
        request = self.factory.get('/todo/')
        request.user = self.user
        request.method = "POST"
        response = config_hook(request, 'login')
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))
        self.assertTrue(config["darkMode"])
        self.assertEqual(config["primary_color"], '#000000')
        self.assertEqual(config["hover_color"], '#cccccc')

        # Call config_hook again and check if it toggles back to light mode
        response = config_hook(request, 'login')
        
        # Check config changes for dark mode disabled
        self.assertFalse(config["darkMode"])
        self.assertEqual(config["primary_color"], '#0fa662')
        self.assertEqual(config["hover_color"], '#0b8f54')

        # Verify redirect URL again
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:login'))

    def test_config_change_template(self): 
        # Call config_hook and check if it toggles to dark mode on template page
        request = self.factory.get('/todo/')
        request.user = self.user
        request.method = "POST"
        response = config_hook(request, 'template')
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:template'))
        self.assertTrue(config["darkMode"])
        self.assertEqual(config["primary_color"], '#000000')
        self.assertEqual(config["hover_color"], '#cccccc')

        # Call config_hook again and check if it toggles back to light mode
        response = config_hook(request, 'template')
        
        # Check config changes for dark mode disabled
        self.assertFalse(config["darkMode"])
        self.assertEqual(config["primary_color"], '#0fa662')
        self.assertEqual(config["hover_color"], '#0b8f54')

        # Verify redirect URL again
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse('todo:template'))

Ancestors

  • django.test.testcases.TestCase
  • django.test.testcases.TransactionTestCase
  • django.test.testcases.SimpleTestCase
  • unittest.case.TestCase

Methods

def setUp(self)

Hook method for setting up the test fixture before exercising it.

Expand source code
def setUp(self):
    # Every test needs access to the client and request factory.
    self.client = Client()
    self.factory = RequestFactory()
    self.user = User.objects.create_user(
        username='jacob', email='jacob@…', password='top_secret')
    self.anonymous_user = AnonymousUser()
    # Config setup
    config["darkMode"] = False
    config["primary_color"] = '#0fa662'
    config["hover_color"] = "#0b8f54"
def testLogin(self)
Expand source code
def testLogin(self):
    request = self.factory.get('/login/')
    request.user = self.user
    post = request.POST.copy()  # to make it mutable
    post['todo'] = 1
    print(request)
    request.POST = post
    response = login_request(request)
    self.assertEqual(response.status_code, 200)
def testLogin_with_invalid_credentials(self)
Expand source code
def testLogin_with_invalid_credentials(self):
    response = self.client.post(reverse('todo:login'), {
        'username': 'wronguser',
        'password': 'wrongpassword'
    })

    # Check that the response is rendered to the correct template
    self.assertTemplateUsed(response, 'todo/login.html')

    # # Check that the form contains errors
    form = response.context['login_form']
    self.assertIsInstance(form, AuthenticationForm)

    # Check that the error message is set
    messages_list = list(response.wsgi_request._messages)
    self.assertEqual(len(messages_list), 1)
    self.assertEqual(str(messages_list[0]), "Invalid username or password.")
    
    # Ensure the user is not logged in
    self.assertFalse(response.wsgi_request.user.is_authenticated)
def testLogin_with_invalid_form(self)
Expand source code
def testLogin_with_invalid_form(self):
    response = self.client.post(reverse('todo:login'), {
        'username': '',  # Invalid: empty username
        'password': ''   # Invalid: empty password
    })

    # Check that the response is rendered to the correct template
    self.assertTemplateUsed(response, 'todo/login.html')

    # Check that the form is instantiated correctly
    form = response.context['login_form']
    self.assertIsInstance(form, AuthenticationForm)

    # Check that the form contains errors
    self.assertFalse(form.is_valid())  # The form should have errors

    # Ensure error messages are displayed
    messages_list = list(get_messages(response.wsgi_request))
    self.assertGreater(len(messages_list), 0)  # Ensure there is at least one message
    self.assertIn("Invalid", str(messages_list[0]))  # Check for required field error

    # Ensure the user is not logged in
    self.assertFalse(response.wsgi_request.user.is_authenticated)

    # Test specific form errors (if you want to check individual fields)
    self.assertIn('username', str(messages_list[0]))  # Ensure 'username' field has errors
    self.assertIn('password', str(messages_list[0]))  # Ensure 'password' field has errors
def testSavingTodoList(self)
Expand source code
def testSavingTodoList(self):
    response = self.client.get(reverse('todo:createNewTodoList'))
    self.assertEqual(response.status_code, 302)
    # print(response)
def test_NewUserForm(self)
Expand source code
def test_NewUserForm(self):
    form_data = {'email': '123@123.com', 'username': '123',
                 'password1': 'K!35EGL&g7#U', 'password2': 'K!35EGL&g7#U'}
    form = NewUserForm(form_data)
    self.assertTrue(form.is_valid())
def test_addNewListItem(self)
Expand source code
def test_addNewListItem(self):

    todo = List.objects.create(
        title_text="test list",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=self.user.id,
    )

    params = {
        'list_id': todo.id,
        'list_item_name': "random",
        "create_on": 1670292391,
        "due_date": "2023-01-01",
        "tag_color": "#f9f9f9",
        "item_text": "",
        "is_done": False
    }

    request = self.factory.post(f'/todo/', data=params,
                                content_type="application/json")
    request.user = self.user
    # request.method = "POST"
    print(type(params))
    # param = json.dumps(param,cls=DateTimeEncoder)
    # request._body = json.dumps(params, separators=(',', ':')).encode('utf-8')
    temp = addNewListItem(request)
    response = index(request)
    self.assertEqual(response.status_code, 200)
def test_config_change_index(self)
Expand source code
def test_config_change_index(self): 
    # Call config_hook and check if it toggles to dark mode on index page
    request = self.factory.get('/todo/')
    request.user = self.user
    request.method = "POST"
    response = config_hook(request, 'index')
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:index'))
    self.assertTrue(config["darkMode"])
    self.assertEqual(config["primary_color"], '#000000')
    self.assertEqual(config["hover_color"], '#cccccc')

    # Call config_hook again and check if it toggles back to light mode
    response = config_hook(request, 'index')
    
    # Check config changes for dark mode disabled
    self.assertFalse(config["darkMode"])
    self.assertEqual(config["primary_color"], '#0fa662')
    self.assertEqual(config["hover_color"], '#0b8f54')

    # Verify redirect URL again
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:index'))
def test_config_change_login(self)
Expand source code
def test_config_change_login(self): 
    # Call config_hook and check if it toggles to dark mode on login page
    request = self.factory.get('/todo/')
    request.user = self.user
    request.method = "POST"
    response = config_hook(request, 'login')
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:login'))
    self.assertTrue(config["darkMode"])
    self.assertEqual(config["primary_color"], '#000000')
    self.assertEqual(config["hover_color"], '#cccccc')

    # Call config_hook again and check if it toggles back to light mode
    response = config_hook(request, 'login')
    
    # Check config changes for dark mode disabled
    self.assertFalse(config["darkMode"])
    self.assertEqual(config["primary_color"], '#0fa662')
    self.assertEqual(config["hover_color"], '#0b8f54')

    # Verify redirect URL again
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:login'))
def test_config_change_template(self)
Expand source code
def test_config_change_template(self): 
    # Call config_hook and check if it toggles to dark mode on template page
    request = self.factory.get('/todo/')
    request.user = self.user
    request.method = "POST"
    response = config_hook(request, 'template')
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:template'))
    self.assertTrue(config["darkMode"])
    self.assertEqual(config["primary_color"], '#000000')
    self.assertEqual(config["hover_color"], '#cccccc')

    # Call config_hook again and check if it toggles back to light mode
    response = config_hook(request, 'template')
    
    # Check config changes for dark mode disabled
    self.assertFalse(config["darkMode"])
    self.assertEqual(config["primary_color"], '#0fa662')
    self.assertEqual(config["hover_color"], '#0b8f54')

    # Verify redirect URL again
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:template'))
def test_createNewTodoList(self)
Expand source code
def test_createNewTodoList(self):
    test_data = {'list_name': 'test',
                 'create_on': 1670292391,
                 'list_tag': 'test_tag',
                 'shared_user': None,
                 'create_new_tag': True}
    request = self.factory.post(f'/todo/', data=test_data,
                                content_type="application/json")
    request.user = self.user
    temp = createNewTodoList(request)
    response = index(request)
    self.assertEqual(response.status_code, 200)
def test_createNewTodoList2(self)
Expand source code
def test_createNewTodoList2(self):
    test_data = {'list_name': 'test',
                 'create_on': 1670292391,
                 'list_tag': 'test_tag',
                 'shared_user': 'someone',
                 'create_new_tag': True}
    request = self.factory.post(f'/todo/', data=test_data,
                                content_type="application/json")
    request.user = self.user
    temp = createNewTodoList(request)
    response = index(request)
    self.assertEqual(response.status_code, 200)
def test_createNewTodoList3(self)
Expand source code
def test_createNewTodoList3(self):
    sharedUser = User.objects.create_user(
        username='share', email='share@…', password='top_secret')
    sharedList = SharedList.objects.create(
        user=sharedUser,
        shared_list_id=""
    )

    test_data = {'list_name': 'test',
                 'create_on': 1670292391,
                 'list_tag': 'test_tag',
                 'shared_user': 'share',
                 'create_new_tag': True}
    request = self.factory.post(f'/todo/', data=test_data,
                                content_type="application/json")
    request.user = self.user
    temp = createNewTodoList(request)
    response = index(request)
    self.assertEqual(response.status_code, 200)
def test_delete_template(self)
Expand source code
def test_delete_template(self):
    request = self.factory.get('/todo/')
    request.user = self.user
    new_template = Template.objects.create(
        title_text="test template",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=request.user.id
    )
    post = request.POST.copy()
    post['todo'] = 1
    request.POST = post
    request.method = "POST"
    response = delete_template(request, new_template.id)
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, '/templates')
def test_delete_template_not_logged_in(self)
Expand source code
def test_delete_template_not_logged_in(self):
    request = self.factory.get('/todo/')
    request.user = self.anonymous_user
    new_template = Template.objects.create(
        title_text="test template",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=request.user.id
    )
    post = request.POST.copy()
    post['todo'] = 1
    request.POST = post
    request.method = "POST"
    response = delete_template(request, new_template.id)
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, '/login')
def test_delete_template_undefined(self)
Expand source code
def test_delete_template_undefined(self):
    request = self.factory.get('/todo/')
    request.user = self.anonymous_user
    request.method = "POST"
    response = delete_template(request, 9999)
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, '/login')
def test_delete_template_undefined_logged_in(self)
Expand source code
def test_delete_template_undefined_logged_in(self):
    request = self.factory.get('/todo/')
    request.user = self.user
    request.method = "POST"
    response = delete_template(request, 9999)
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, '/templates')
def test_delete_todo_list(self)
Expand source code
def test_delete_todo_list(self):
    request = self.factory.get('/todo/')
    request.user = self.user
    todo = List.objects.create(
        title_text="test list",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=self.user.id,
    )
    ListItem.objects.create(
        item_name="test item",
        item_text="This is a test item on a test list",
        created_on=timezone.now(),
        finished_on=timezone.now(),
        tag_color="#f9f9f9",
        due_date=timezone.now(),
        list=todo,
        is_done=False,
    )
    post = request.POST.copy()
    post['todo'] = 1
    request.POST = post
    response = delete_todo(request)
    self.assertEqual(response.status_code, 302)
def test_delete_todo_list_not_logged_in(self)
Expand source code
def test_delete_todo_list_not_logged_in(self):
    request = self.factory.get('/todo/')
    request.user = self.anonymous_user
    post = request.POST.copy()
    post['todo'] = 1
    request.POST = post
    response = delete_todo(request)
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:login'))
def test_getListItemById(self)
Expand source code
def test_getListItemById(self):
    todo = List.objects.create(
        title_text="test list 3",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=self.user.id,
    )
    item = ListItem.objects.create(
        item_name="test item 3",
        item_text="This is a test item on a test list",
        created_on=timezone.now(),
        finished_on=timezone.now(),
        tag_color="#f9f9f9",
        due_date=timezone.now(),
        list=todo,
        is_done=False,
    )
    test_data = {'list_id': str(todo.id),
                 'list_item_name': 'test item 3',
                 'list_item_id': str(item.id)
                 }
    request = self.factory.post(f'/todo/', data=test_data,
                                content_type="application/json")
    request.user = self.user
    temp = getListItemById(request)
    response = index(request)
    self.assertEqual(response.status_code, 200)
def test_getListItemByName(self)
Expand source code
def test_getListItemByName(self):
    todo = List.objects.create(
        title_text="test list",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=self.user.id,
    )
    ListItem.objects.create(
        item_name="test item",
        item_text="This is a test item on a test list",
        created_on=timezone.now(),
        finished_on=timezone.now(),
        tag_color="#f9f9f9",
        due_date=timezone.now(),
        list=todo,
        is_done=False,
    )
    test_data = {'list_id': '1',
                 'list_item_name': "test item"
                 }
    request = self.factory.post(f'/todo/', data=test_data,
                                content_type="application/json")
    request.user = self.user
    response = getListItemByName(request)
    self.assertEqual(response.status_code, 200)
def test_getListTagsByUserid(self)
Expand source code
def test_getListTagsByUserid(self):
    request = self.factory.get('/todo/')
    request.user = self.user
    ListTags.objects.create(
        user_id_id=self.user.id,
        tag_name='test',
        created_on=timezone.now()
    )
    post = request.POST.copy()
    post['todo'] = 1
    request.POST = post
    request.method = "POST"
    response = getListTagsByUserid(request)
    print('response:')
    print(response)
    self.assertIsNotNone(response)
def test_getListTagsByUserid_not_logged_in(self)
Expand source code
def test_getListTagsByUserid_not_logged_in(self):
    request = self.factory.get('/todo/')
    request.user = self.anonymous_user
    post = request.POST.copy()
    post['todo'] = 1
    request.POST = post
    request.method = "POST"
    response = getListTagsByUserid(request)
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:login'))
def test_index(self)
Expand source code
def test_index(self):
    request = self.factory.get('/todo/')
    request.user = self.user
    response = index(request)
    self.assertEqual(response.status_code, 200)
def test_index_not_logged_in(self)
Expand source code
def test_index_not_logged_in(self):
    request = self.factory.get('/todo/')
    request.user = self.anonymous_user
    response = index(request)
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:login'))
def test_initial_config_state(self)
Expand source code
def test_initial_config_state(self):
    # Initial config state check
    self.assertFalse(config["darkMode"])
    self.assertEqual(config["primary_color"], '#0fa662')
    self.assertEqual(config["hover_color"], '#0b8f54')
def test_login_request(self)
Expand source code
def test_login_request(self):
    test_data = {'username': 'jacob',
                 'password': 'top_secret'}
    request = self.factory.post(f'/login/', data=test_data,
                                content_type="application/json")
    request.user = self.user
    setattr(request, 'session', 'session')
    setattr(request, '_messages', FallbackStorage(request))
    response = login_request(request)
    self.assertEqual(response.status_code, 200)
def test_markListItem(self)
Expand source code
def test_markListItem(self):
    todo = List.objects.create(
        title_text="test list",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=self.user.id,
    )

    listItem = ListItem.objects.create(
        item_name="test item",
        item_text="This is a test item on a test list",
        created_on=timezone.now(),
        finished_on=timezone.now(),
        tag_color="#f9f9f9",
        due_date=timezone.now(),
        list=todo,
        is_done=False,
    )

    params = {
        'list_id': todo.id,
        'list_item_name': listItem.item_name,
        "create_on": 1670292391,
        "due_date": "2023-01-01",
        "finish_on": 1670292392,
        "is_done": True,
        "list_item_id": listItem.id,
    }

    request = self.factory.post(f'/todo/', data=params,
                                content_type="application/json")
    request.user = self.user
    temp = markListItem(request)
    response = index(request)
    self.assertEqual(response.status_code, 200)
def test_removeListItem(self)
Expand source code
def test_removeListItem(self):
    request = self.factory.get('/todo/')
    request.user = self.user

    todo = List.objects.create(
        title_text="test list",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=self.user.id,
    )

    ListItem.objects.create(
        item_name="test item",
        item_text="This is a test item on a test list",
        created_on=timezone.now(),
        finished_on=timezone.now(),
        tag_color="#f9f9f9",
        due_date=timezone.now(),
        list=todo,
        is_done=False,
    )

    post = request.POST.copy()
    # post['list_item_id'] = 1
    request.method = "POST"
    request._body = json.dumps({"list_item_id": 1}).encode('utf-8')
    response = removeListItem(request)
    print(response)
    self.assertIsNotNone(response)
def test_template_display(self)
Expand source code
def test_template_display(self):
    request = self.factory.get('/todo/')
    request.user = self.user
    new_template = Template.objects.create(
        title_text="test template",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=request.user.id
    )
    template_item = TemplateItem.objects.create(
        item_text="test item",
        created_on=timezone.now(),
        template=new_template,
        finished_on=timezone.now(),
        tag_color="#f9f9f9",
        due_date=timezone.now()
    )
    post = request.POST.copy()  # to make it mutable
    post['todo'] = 1
    request.POST = post
    response = template(request, 1)
    self.assertEqual(response.status_code, 200)
def test_template_display_not_logged_in(self)
Expand source code
def test_template_display_not_logged_in(self):
    request = self.factory.get('/todo/')
    request.user = self.anonymous_user
    post = request.POST.copy()  # to make it mutable
    post['todo'] = 1
    request.POST = post
    response = template(request, 1)
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:login'))
def test_template_from_todo_function(self)
Expand source code
def test_template_from_todo_function(self):
    request = self.factory.get('/todo/')
    request.user = self.user
    todo = List.objects.create(
        title_text="test list",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=request.user.id,
    )
    item = ListItem.objects.create(
        item_name="test item",
        item_text="This is a test item on a test list",
        created_on=timezone.now(),
        finished_on=timezone.now(),
        tag_color="#f9f9f9",
        due_date=timezone.now(),
        list=todo,
        is_done=True,
    )
    post = request.POST.copy()  # to make it mutable
    post['todo'] = 1
    request.POST = post
    response = template_from_todo(request)
    self.assertEqual(response.status_code, 302)
def test_template_from_todo_function_not_logged_in(self)
Expand source code
def test_template_from_todo_function_not_logged_in(self):
    request = self.factory.get('/todo/')
    request.user = self.anonymous_user
    post = request.POST.copy()  # to make it mutable
    post['todo'] = 1
    request.POST = post
    response = template_from_todo(request)
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, reverse('todo:login'))
def test_template_from_todo_redirect(self)
Expand source code
def test_template_from_todo_redirect(self):
    client = self.client
    response = client.get(reverse('todo:template_from_todo'))
    self.assertEquals(response.status_code, 302)
def test_todo_from_template(self)
Expand source code
def test_todo_from_template(self):
    request = self.factory.get('/todo/')
    request.user = self.user
    new_template = Template.objects.create(
        title_text="test template",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=request.user.id
    )
    template_item = TemplateItem.objects.create(
        item_text="test item",
        created_on=timezone.now(),
        template=new_template,
        finished_on=timezone.now(),
        tag_color="#f9f9f9",
        due_date=timezone.now()
    )

    post = request.POST.copy()
    post['todo'] = 1
    post['template'] = new_template.id
    request.POST = post
    request.method = "POST"
    response = todo_from_template(request)
    self.assertEqual(response.status_code, 302)
def test_updateListItem(self)
Expand source code
def test_updateListItem(self):
    request = self.factory.get('/todo/')
    request.user = self.user
    todo = List.objects.create(
        title_text="test list 2",
        created_on=timezone.now(),
        updated_on=timezone.now(),
        user_id_id=request.user.id,
    )
    item = ListItem.objects.create(
        item_name="test item 2",
        item_text="This is a test item on a test list",
        created_on=timezone.now(),
        finished_on=timezone.now(),
        tag_color="#f9f9f9",
        due_date=timezone.now(),
        list=todo,
        is_done=False,
    )
    post = request.POST.copy()
    post['todo'] = 1
    post['note'] = 'test note'
    request.POST = post
    request.method = "POST"
    response = updateListItem(request, item.id)
    self.assertEqual(response.status_code, 302)