37 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|