Files
DataLoom/tests/test_core.py
T

57 lines
2.6 KiB
Python

"""Core tests; run only in an approved disposable development environment."""
import json
from pathlib import Path
from dataloom.core.merge import merge_records
from dataloom.core.models import Record
from dataloom.core.normalize import normalize_url
from dataloom.core.exporters import csv_loss_warnings
from dataloom.core.parsers import load_file
FIXTURES = Path(__file__).parent / "fixtures"
def test_url_normalization_equates_www_and_trailing_slash():
assert normalize_url("https://example.com") == normalize_url("https://www.example.com/")
def test_fixture_import_and_exact_merge():
_, left = load_file(FIXTURES / "bitwarden-a.json")
_, right = load_file(FIXTURES / "bitwarden-b.json")
result = merge_records(left + right)
assert len(result.included) == 1
assert len(result.removed_exact) == 1
def test_exact_login_match_ignores_name_and_revision():
left = {"id": "a", "type": 1, "name": "Old name", "revisionDate": "2026-01-01T00:00:00Z",
"login": {"username": "U", "password": "P", "uris": [{"uri": "https://example.com"}]}}
right = {"id": "b", "type": 1, "name": "New name", "revisionDate": "2026-02-01T00:00:00Z",
"login": {"username": "u", "password": "P", "uris": [{"uri": "https://www.example.com/"}]}}
result = merge_records([Record(left, "a.json", 1), Record(right, "b.json", 1)])
assert len(result.included) == 1
assert len(result.removed_exact) == 1
def test_conflicting_passwords_are_retained_for_review():
base = {"type": 1, "name": "X", "login": {"username": "u", "password": "a", "uris": [{"uri": "https://x.test"}]}}
other = json.loads(json.dumps(base)); other["login"]["password"] = "b"
result = merge_records([Record(base, "a.json", 1), Record(other, "b.json", 1)])
assert len(result.included) == 2
assert any(group.classification == "likely" for group in result.review_groups)
def test_newest_revision_is_selected_without_timezone_error():
left = {"type": 1, "name": "X", "revisionDate": "2026-01-01T00:00:00Z", "login": {"username": "u", "password": "a", "uris": [{"uri": "https://x.test"}]}}
right = {"type": 1, "name": "X", "revisionDate": "2026-02-01T00:00:00Z", "login": {"username": "u", "password": "b", "uris": [{"uri": "https://x.test"}]}}
result = merge_records([Record(left, "a.json", 1), Record(right, "b.json", 1)])
assert result.review_groups[-1].selected is not None
assert result.review_groups[-1].selected.source_file == "b.json"
def test_csv_loss_warning_for_extra_uri():
record = Record({"type": 1, "name": "X", "login": {"uris": [{"uri": "https://a"}, {"uri": "https://b"}]}}, "a.json", 1)
assert csv_loss_warnings([record])