@@ -66,6 +66,60 @@ func newStartedGameFlowWithItemStore(t *testing.T, store loginticket.Store, acco
6666 return flow
6767}
6868
69+ func TestBootstrapTopologyFromConfigDefaultsToWholeMapVisibility (t * testing.T ) {
70+ topology , err := bootstrapTopologyFromConfig (config.Service {})
71+ if err != nil {
72+ t .Fatalf ("unexpected topology error: %v" , err )
73+ }
74+ if _ , ok := topology .VisibilityPolicy ().(worldruntime.WholeMapVisibilityPolicy ); ! ok {
75+ t .Fatalf ("expected whole-map visibility policy by default, got %T" , topology .VisibilityPolicy ())
76+ }
77+ }
78+
79+ func TestBootstrapTopologyFromConfigNormalizesRadiusModeAndRejectsInvalidValues (t * testing.T ) {
80+ topology , err := bootstrapTopologyFromConfig (config.Service {VisibilityMode : " Radius " , VisibilityRadius : 400 , VisibilitySectorSize : 200 })
81+ if err != nil {
82+ t .Fatalf ("unexpected topology error: %v" , err )
83+ }
84+ policy , ok := topology .VisibilityPolicy ().(worldruntime.RadiusVisibilityPolicy )
85+ if ! ok {
86+ t .Fatalf ("expected radius visibility policy, got %T" , topology .VisibilityPolicy ())
87+ }
88+ if policy .Radius != 400 || policy .SectorSize != 200 {
89+ t .Fatalf ("unexpected radius policy: %+v" , policy )
90+ }
91+
92+ if _ , err := bootstrapTopologyFromConfig (config.Service {VisibilityMode : "radius" , VisibilityRadius : 0 , VisibilitySectorSize : 200 }); ! errors .Is (err , ErrInvalidVisibilityRadius ) {
93+ t .Fatalf ("expected ErrInvalidVisibilityRadius, got %v" , err )
94+ }
95+ if _ , err := bootstrapTopologyFromConfig (config.Service {VisibilityMode : "radius" , VisibilityRadius : 400 , VisibilitySectorSize : 0 }); ! errors .Is (err , ErrInvalidVisibilitySectorSize ) {
96+ t .Fatalf ("expected ErrInvalidVisibilitySectorSize, got %v" , err )
97+ }
98+ if _ , err := bootstrapTopologyFromConfig (config.Service {VisibilityMode : "sector" }); ! errors .Is (err , ErrInvalidVisibilityMode ) {
99+ t .Fatalf ("expected ErrInvalidVisibilityMode, got %v" , err )
100+ }
101+ }
102+
103+ func TestGameRuntimeConfigSnapshotReportsRadiusPolicy (t * testing.T ) {
104+ runtime , err := newGameRuntimeWithStoresAndTransferTriggersAndItemStore (
105+ config.Service {LegacyAddr : ":13000" , PublicAddr : "127.0.0.1" , VisibilityMode : "radius" , VisibilityRadius : 400 , VisibilitySectorSize : 200 },
106+ loginticket .NewFileStore (t .TempDir ()),
107+ nil ,
108+ nil ,
109+ nil ,
110+ staticItemTemplateStore {},
111+ nil ,
112+ )
113+ if err != nil {
114+ t .Fatalf ("unexpected game runtime error: %v" , err )
115+ }
116+
117+ snapshot := runtime .RuntimeConfigSnapshot ()
118+ if snapshot .LocalChannelID != 1 || snapshot .VisibilityMode != "radius" || snapshot .VisibilityRadius != 400 || snapshot .VisibilitySectorSize != 200 {
119+ t .Fatalf ("unexpected runtime config snapshot: %+v" , snapshot )
120+ }
121+ }
122+
69123func TestSlashGameCommandRejectsArgumentsForOwnedRestartAndLeaveCommands (t * testing.T ) {
70124 for _ , message := range []string {
71125 "/quit now" ,
0 commit comments