Files
links/tests/test_pricemon.py
T
2026-06-23 16:25:59 +10:00

56 lines
2.0 KiB
Python

from unittest.mock import patch
import pytest
from django.urls import reverse
from pricemon.models import PriceWatcher
@pytest.fixture
def watcher():
with patch('pricemon.tasks.schedule_watcher'):
return PriceWatcher.objects.create(
name='Test product',
url='https://example.com/product',
css_selector='.price',
)
@pytest.mark.django_db
class TestPriceMonitorToggle:
def test_dashboard_shows_disable_action_for_enabled_watcher(self, client, watcher):
response = client.get(reverse('pricemon-dashboard'))
assert response.status_code == 200
assert reverse('pricemon-toggle-enabled', args=[watcher.pk]) in response.content.decode()
assert 'Disable monitoring' in response.content.decode()
assert response.context['enabled_watchers_count'] == 1
def test_toggle_disables_watcher_and_unschedules_job(self, client, watcher):
with patch('pricemon.tasks.unschedule_watcher') as unschedule_watcher:
response = client.post(reverse('pricemon-toggle-enabled', args=[watcher.pk]))
watcher.refresh_from_db()
assert response.status_code == 302
assert response.url == reverse('pricemon-dashboard')
assert watcher.enabled is False
unschedule_watcher.assert_called_once()
def test_toggle_enables_paused_watcher_and_schedules_job(self, client, watcher):
with patch('pricemon.tasks.unschedule_watcher'):
watcher.enabled = False
watcher.save(update_fields=['enabled'])
with patch('pricemon.tasks.schedule_watcher') as schedule_watcher:
response = client.post(reverse('pricemon-toggle-enabled', args=[watcher.pk]))
watcher.refresh_from_db()
assert response.status_code == 302
assert watcher.enabled is True
schedule_watcher.assert_called_once()
def test_toggle_rejects_get_requests(self, client, watcher):
response = client.get(reverse('pricemon-toggle-enabled', args=[watcher.pk]))
assert response.status_code == 405