feat: wire lobby task and VIP prefab flows and sync UI assets
This commit is contained in:
@@ -310,6 +310,39 @@ function makeRuntime(config: RuntimeConfig = runtimeConfig(), entry = makeGameEn
|
||||
return { runtime, wire, scene, clock, factoryConfigs, config };
|
||||
}
|
||||
|
||||
test('VIP wire query response reaches canonical state and clears on login replacement',async()=>{
|
||||
const {runtime,wire}=makeRuntime();await runtime.start();
|
||||
wire.emit({type:'open',server:'ws://agent'});runtime.login(ACCOUNT);
|
||||
const login=()=>wire.emit({type:'message',message:{route:'agent',rpc:'player_login',data:fixture('player-login-success.json')}});
|
||||
login();runtime.getVipRooms(['123456']);
|
||||
wire.emit({type:'message',message:{route:'agent',rpc:'getInfoByShortCode',data:{roomInfo:[{shortCode:123456,owner:'房主',playerList:[]}]}}});
|
||||
assert.equal(runtime.state.vipRooms?.[0].shortCode,123456);
|
||||
wire.emit({type:'message',message:{route:'agent',rpc:'getInfoByShortCode',data:{roomInfo:[]}}});
|
||||
assert.deepEqual(runtime.state.vipRooms,[]);
|
||||
login();assert.equal(runtime.state.vipRooms,undefined);runtime.stop();
|
||||
});
|
||||
|
||||
test('task wire responses reach the store and claim does not invent reward balances',async()=>{
|
||||
const {runtime,wire}=makeRuntime();await runtime.start();
|
||||
wire.emit({type:'open',server:'ws://agent'});runtime.login(ACCOUNT);
|
||||
wire.emit({type:'message',message:{route:'agent',rpc:'player_login',data:fixture('player-login-success.json')}});
|
||||
runtime.getPlayerTasks();
|
||||
wire.emit({type:'message',message:{route:'agent',rpc:'get_player_task',data:{tasks:[{taskid:7,title:'任务',award:'3',finish:'1',total:'1',state:'1'}]}}});
|
||||
assert.equal(runtime.state.tasks?.[0].award,3);
|
||||
const balance=runtime.state.players.entities[430511].roomcard;
|
||||
runtime.claimTask(7);
|
||||
wire.emit({type:'message',message:{route:'agent',rpc:'get_task_award',data:{taskid:'7',taskstate:0}}});
|
||||
assert.equal(runtime.state.tasks?.[0].state,2);
|
||||
assert.equal(runtime.state.players.entities[430511].taskstate,0);
|
||||
assert.equal(runtime.state.players.entities[430511].roomcard,balance);
|
||||
wire.emit({type:'message',message:{route:'agent',rpc:'update_roomcard',data:{roomcard:25}}});
|
||||
assert.equal(runtime.state.players.entities[430511].roomcard,25);
|
||||
wire.emit({type:'message',message:{route:'agent',rpc:'player_finish_task',data:{state:1}}});
|
||||
assert.equal(runtime.state.players.entities[430511].taskstate,1);
|
||||
wire.emit({type:'slow'});assert.throws(()=>runtime.getPlayerTasks(),/logged-in/);
|
||||
runtime.stop();
|
||||
});
|
||||
|
||||
test('UI observes canonical commits and unsubscribe is idempotent', async () => {
|
||||
const { runtime, wire } = makeRuntime();
|
||||
const seen: unknown[] = [];
|
||||
|
||||
Reference in New Issue
Block a user