57 lines
2.6 KiB
Python
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])
|