package topology_equivalence_test import ( "encoding/json" "git.cin.su/m/Assistant/contracts/authority" "git.cin.su/m/Assistant/contracts/identity" situationcontract "git.cin.su/m/Assistant/contracts/situation" "git.cin.su/m/Assistant/contracts/work" situation "git.cin.su/m/Assistant/modules/situation/domain" "git.cin.su/m/Assistant/platform/ids" "testing" ) func TestWS004FocusContractSurvivesSerialization(t *testing.T) { binding := situationcontract.FocusBinding{ID: situationcontract.FocusBindingID(ids.ID("focus")), ActorID: identity.ActorID(ids.ID("actor")), SessionID: situationcontract.SessionID(ids.ID("session")), Workspace: situationcontract.WorkspaceID(ids.ID("workspace")), ProjectID: situationcontract.ProjectID(ids.ID("project")), GoalID: work.GoalID(ids.ID("goal")), ScopeID: authority.ScopeID(ids.ID("scope")), Active: true} runtime := situationcontract.RuntimeBinding{SessionID: binding.SessionID, Workspace: binding.Workspace} direct, err := situation.NewResolver([]situationcontract.FocusBinding{binding}).Resolve(runtime) if err != nil { t.Fatal(err) } encoded, err := json.Marshal([]situationcontract.FocusBinding{binding}) if err != nil { t.Fatal(err) } var remote []situationcontract.FocusBinding if err := json.Unmarshal(encoded, &remote); err != nil { t.Fatal(err) } extracted, err := situation.NewResolver(remote).Resolve(runtime) if err != nil { t.Fatal(err) } if direct != extracted { t.Fatalf("topology changed focus: %#v != %#v", direct, extracted) } }