Files
Assistant/tests/topology_equivalence/focus_test.go
2026-08-16 15:22:49 +03:00

37 lines
1.5 KiB
Go

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)
}
}