Files
VacatureRadar/tests/integration/test_sources_manual_import.py
T
Jens a4eced8be5
deploy / deploy (push) Canceled after 0s
Fix release blockers and deployment build
2026-07-21 21:22:29 +02:00

111 lines
3.7 KiB
Python

from __future__ import annotations
import pytest
from django.core.cache import cache
from django.test import override_settings
from django.urls import reverse
from apps.sources.services.fetcher import FetchedDocument
from apps.sources.services.manual_import import ManualImportError
def test_manual_import_view_prefills_source_url(client, user):
client.force_login(user)
response = client.get(
reverse("sources:manual_import"), {"source_url": "https://jobs.example.org/vacature"}
)
assert response.status_code == 200
assert 'value="https://jobs.example.org/vacature"' in response.content.decode("utf-8")
@pytest.mark.django_db
def test_manual_import_view_posts_url_and_shows_result(client, user, monkeypatch):
def fake_fetch(*_args, **_kwargs):
return FetchedDocument(
requested_url="https://jobs.example.org/engineering",
final_url="https://jobs.example.org/engineering",
status_code=200,
headers={"content-type": "text/html; charset=utf-8"},
content=b"<html><body>vacature</body></html>",
)
def fake_process(_document):
return {
"extracted": 1,
"created": 1,
"updated": 0,
"duplicates": 0,
"parser": "manual-test",
"warnings": [],
}
monkeypatch.setattr("apps.sources.services.manual_import.fetch_url", fake_fetch)
monkeypatch.setattr("apps.sources.services.manual_import.process_raw_document", fake_process)
client.force_login(user)
response = client.post(
reverse("sources:manual_import"),
{"source_url": "https://jobs.example.org/engineering"},
)
html = response.content.decode("utf-8")
assert response.status_code == 200
assert "Importresultaat" in html
assert "Herkenbare items: 1" in html
@pytest.mark.django_db
def test_manual_import_view_paste_prefers_post_flow_and_does_not_fetch(client, user, monkeypatch):
def fail_fetch(*_args, **_kwargs):
raise AssertionError("Fetcher should not run for paste imports.")
def fake_process(_document):
return {
"extracted": 1,
"created": 0,
"updated": 0,
"duplicates": 1,
"parser": "manual-test",
"warnings": [],
}
monkeypatch.setattr("apps.sources.services.manual_import.fetch_url", fail_fetch)
monkeypatch.setattr("apps.sources.services.manual_import.process_raw_document", fake_process)
client.force_login(user)
response = client.post(
reverse("sources:manual_import"),
{"pasted_text": "Eerste regel\nTweede regel"},
)
html = response.content.decode("utf-8")
assert response.status_code == 200
assert "Importresultaat" in html
assert "Modus: paste" in html
@pytest.mark.django_db
@override_settings(
MANUAL_IMPORT_RATE_LIMIT_MAX_ATTEMPTS=1,
MANUAL_IMPORT_RATE_LIMIT_WINDOW_SECONDS=120,
MANUAL_IMPORT_RATE_LIMIT_BLOCK_SECONDS=60,
)
def test_manual_import_blocks_after_failed_attempts(client, user, monkeypatch):
cache.clear()
def fail_import(*_args, **_kwargs):
raise ManualImportError("Handmatige import faalde in test")
client.force_login(user)
monkeypatch.setattr("apps.sources.views.import_manual_source", fail_import)
response = client.post(
reverse("sources:manual_import"),
{"source_url": "https://jobs.example.org/engineering"},
)
assert "Handmatige import faalde in test" in response.content.decode("utf-8")
response = client.post(
reverse("sources:manual_import"),
{"source_url": "https://jobs.example.org/engineering"},
)
assert "Te veel handmatige importverzoeken" in response.content.decode("utf-8")