P18-01-CODE: 原本関係モデル・旧値保全・Runtime保存と読取経路
This commit is contained in:
@@ -30,7 +30,50 @@ func _service() -> RelationshipService:
|
||||
)
|
||||
|
||||
|
||||
static func legacy_fixture() -> Dictionary:
|
||||
return {"version": 1, "relationships": [
|
||||
{"relationship_id": "aliases", "actor_a_id": "heroine_anri", "actor_b_id": "player",
|
||||
"metrics": {"affinity": 41, "obligation": 19, "extension": {"opaque": [3, "keep"]}},
|
||||
"extra": ["raw", 2.5]},
|
||||
{"relationship_id": "second", "actor_a_id": "departed", "actor_b_id": "player",
|
||||
"metrics": {"trust": 7}}],
|
||||
"threshold_candidates": [], "next_candidate_sequence": 1, "extension": ["ordered", 7]}
|
||||
|
||||
|
||||
func _alias_mutations() -> void:
|
||||
var service := _service()
|
||||
var legacy := legacy_fixture()
|
||||
var input := var_to_bytes(legacy)
|
||||
_expect(service.restore_snapshot(legacy), "int v1 aliases accepted")
|
||||
_expect(service.apply_value_change(&"aliases", &"affection", 2, 0).is_success(), "affection mutation through real service")
|
||||
_expect(service.apply_value_change(&"aliases", &"dependence", 3, 0).is_success(), "dependence mutation through real service")
|
||||
var saved := service.create_snapshot()
|
||||
var raw: Dictionary = saved[&"legacy"]["relationships"][0]
|
||||
_expect(raw["metrics"]["affection"] == 43 and raw["metrics"]["dependence"] == 22, "canonical changes merged")
|
||||
_expect(raw["metrics"]["affinity"] == 41 and raw["metrics"]["obligation"] == 19, "aliases remain old facts")
|
||||
_expect(raw["metrics"]["extension"] == legacy["relationships"][0]["metrics"]["extension"] and raw["extra"] == ["raw", 2.5], "unknown facts survive mutation")
|
||||
_expect(saved[&"legacy"]["relationships"][1] == legacy["relationships"][1], "record order preserved")
|
||||
var restored := _service()
|
||||
_expect(restored.restore_snapshot(saved), "mutated v2 restores")
|
||||
_expect(var_to_bytes(restored.create_snapshot()) == var_to_bytes(saved), "mutated v2 raw order and bytes preserved")
|
||||
_expect(restored.get_relationship(&"aliases").get_metric(&"affection") == 43 and restored.get_relationship(&"aliases").get_metric(&"dependence") == 22, "canonical values take precedence over raw aliases")
|
||||
for key: StringName in [&"affection", &"lust", &"netorare"]:
|
||||
_expect(restored.get_original_relationship(&"heroine_anri")[key] == null, "old axes never configure original " + String(key))
|
||||
_expect(var_to_bytes(legacy) == input, "mutation never changes input bytes")
|
||||
for value: Variant in ["50", null, true, 50.0, 1.5, INF, NAN]:
|
||||
var bad := legacy_fixture()
|
||||
bad["relationships"][0]["metrics"]["affinity"] = value
|
||||
_rejected(restored, bad)
|
||||
var bad := legacy_fixture()
|
||||
bad["relationships"][0]["metrics"] = []
|
||||
_rejected(restored, bad)
|
||||
bad = saved.duplicate(true)
|
||||
bad[&"relationships"] = []
|
||||
_rejected(restored, bad)
|
||||
|
||||
|
||||
func _run() -> void:
|
||||
_alias_mutations()
|
||||
var service := _service()
|
||||
var before := var_to_bytes(service.create_snapshot())
|
||||
var unset := service.get_original_relationship(&"heroine_anri")
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user