87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
from io import StringIO
|
|
|
|
import pytest
|
|
from django.core.management import call_command
|
|
|
|
from apps.sources.models import Source
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_discover_sources_command_runs_for_all_modes_and_is_replayable():
|
|
out = StringIO()
|
|
call_command(
|
|
"discover_sources",
|
|
"html",
|
|
"--input",
|
|
"fixtures/discovery/html_candidate_discovery.html",
|
|
"--base-url",
|
|
"https://example.org/",
|
|
stdout=out,
|
|
)
|
|
call_command(
|
|
"discover_sources",
|
|
"sitemap",
|
|
"--input",
|
|
"fixtures/discovery/sitemap_index.xml",
|
|
"--base-url",
|
|
"https://jobs.example.org/",
|
|
stdout=out,
|
|
)
|
|
call_command(
|
|
"discover_sources",
|
|
"feed",
|
|
"--input",
|
|
"fixtures/discovery/feed_jobs.xml",
|
|
"--base-url",
|
|
"https://jobs.example.org/feed/jobs",
|
|
stdout=out,
|
|
)
|
|
call_command(
|
|
"discover_sources",
|
|
"email",
|
|
"--input",
|
|
"fixtures/emails/sample_alert.eml",
|
|
stdout=out,
|
|
)
|
|
|
|
source_types = {
|
|
(source.domain, source.source_type)
|
|
for source in Source.objects.filter(status=Source.Status.CANDIDATE)
|
|
}
|
|
assert ("example.org", Source.Type.EMPLOYER) in source_types
|
|
assert ("jobs.example.org", Source.Type.EMPLOYER) in source_types
|
|
assert ("example.org", Source.Type.RSS) in source_types
|
|
assert ("jobs.example.org", Source.Type.SITEMAP) in source_types
|
|
assert ("jobs.example.org", Source.Type.RSS) in source_types
|
|
assert "Persist result" in out.getvalue()
|
|
|
|
out.seek(0)
|
|
out.truncate(0)
|
|
call_command(
|
|
"discover_sources",
|
|
"html",
|
|
"--input",
|
|
"fixtures/discovery/html_candidate_discovery.html",
|
|
"--base-url",
|
|
"https://example.org/",
|
|
stdout=out,
|
|
)
|
|
assert Source.objects.filter(status=Source.Status.CANDIDATE).count() == 5
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_discover_sources_dry_run_keeps_db_empty():
|
|
out = StringIO()
|
|
call_command(
|
|
"discover_sources",
|
|
"feed",
|
|
"--input",
|
|
"fixtures/discovery/feed_jobs.xml",
|
|
"--base-url",
|
|
"https://jobs.example.org/feed/jobs",
|
|
"--dry-run",
|
|
stdout=out,
|
|
)
|
|
assert Source.objects.count() == 0
|
|
assert "Dry-run modus" in out.getvalue()
|