Implement offline merge and review core
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
"""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.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)
|
||||
Reference in New Issue
Block a user