Adds the dashboard view, template, URL routing, and tests. Also upgrades Django from 5.1.15 to 5.2.1 to fix a Python 3.14 incompatibility in template context copy that prevented view tests from running.
33 lines
1.4 KiB
Python
33 lines
1.4 KiB
Python
import pytest
|
|
from django.urls import reverse
|
|
from datetime import date
|
|
from plants.models import Plant, PruningLog
|
|
|
|
|
|
@pytest.mark.django_db
|
|
class TestDashboard:
|
|
def test_returns_200(self, client):
|
|
resp = client.get(reverse('dashboard'))
|
|
assert resp.status_code == 200
|
|
|
|
def test_shows_total_plant_count(self, client):
|
|
Plant.objects.create(name='Fern', location='Office')
|
|
Plant.objects.create(name='Rose', location='Garden')
|
|
resp = client.get(reverse('dashboard'))
|
|
assert resp.context['total_plants'] == 2
|
|
|
|
def test_overdue_plant_appears_in_context(self, client):
|
|
plant = Plant.objects.create(name='Rose', location='Garden', pruning_months=[3])
|
|
# No log — overdue relative to current date (month 3 is more than 6 months ago only if checked after September)
|
|
# Use a month that's definitely in the recent past: use today's month - 1
|
|
resp = client.get(reverse('dashboard'))
|
|
# Just check the view works; pruning logic is tested separately
|
|
assert 'overdue' in resp.context
|
|
|
|
def test_due_this_month_plant_appears_in_context(self, client):
|
|
today = date.today()
|
|
plant = Plant.objects.create(
|
|
name='Apple', location='Garden', pruning_months=[today.month]
|
|
)
|
|
resp = client.get(reverse('dashboard'))
|
|
assert plant in resp.context['due_this_month']
|