You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
loop/habits_tracker/habits/tests.py

44 lines
2.0 KiB

from django.test import TestCase
from django.contrib.auth.models import User
from .models import Habit, Repetition
from django.urls import reverse
class HabitTestCase(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser', password='password')
self.client.login(username='testuser', password='password')
self.habit = Habit.objects.create(user=self.user, name='Test Habit')
self.repetition = Repetition.objects.create(habit=self.habit, date='2025-01-01')
def test_habit_list_view(self):
response = self.client.get(reverse('habits:habit_list'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'Test Habit')
def test_habit_detail_view(self):
response = self.client.get(reverse('habits:habit_detail', args=[self.habit.pk]))
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'Test Habit')
def test_habit_create_view(self):
response = self.client.post(reverse('habits:habit_create'), {'name': 'New Habit'})
self.assertEqual(response.status_code, 302)
self.assertTrue(Habit.objects.filter(name='New Habit').exists())
def test_habit_update_view(self):
response = self.client.post(reverse('habits:habit_update', args=[self.habit.pk]), {'name': 'Updated Habit'})
self.assertEqual(response.status_code, 302)
self.habit.refresh_from_db()
self.assertEqual(self.habit.name, 'Updated Habit')
def test_habit_delete_view(self):
response = self.client.post(reverse('habits:habit_delete', args=[self.habit.pk]))
self.assertEqual(response.status_code, 302)
self.assertFalse(Habit.objects.filter(pk=self.habit.pk).exists())
def test_export_csv_view(self):
response = self.client.get(reverse('habits:export_csv'))
self.assertEqual(response.status_code, 200)
self.assertEqual(response['Content-Type'], 'text/csv')
self.assertIn('Test Habit,2025-01-01,1', response.content.decode())