mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-04-27 07:48:01 -07:00
94 lines
No EOL
2.9 KiB
TypeScript
94 lines
No EOL
2.9 KiB
TypeScript
// Admin command pipeline smoke test — validates that sendAdminCommand
|
|
// encodes, correlates, and persists correctly end-to-end.
|
|
|
|
import { create } from '@bufbuild/protobuf';
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
import { Data } from '@app/types';
|
|
import { store } from '@app/store';
|
|
import { AdminCommands } from '@app/websocket';
|
|
|
|
import { connectAndLogin } from '../helpers/setup';
|
|
import {
|
|
buildResponse,
|
|
buildResponseMessage,
|
|
buildSessionEventMessage,
|
|
deliverMessage,
|
|
} from '../helpers/protobuf-builders';
|
|
import { findLastAdminCommand } from '../helpers/command-capture';
|
|
|
|
describe('admin commands', () => {
|
|
it('adjustMod modifies the user level bitflags on success', () => {
|
|
connectAndLogin();
|
|
|
|
// Add bob to the user list so the reducer has a target
|
|
deliverMessage(buildSessionEventMessage(
|
|
Data.Event_UserJoined_ext,
|
|
create(Data.Event_UserJoinedSchema, {
|
|
userInfo: create(Data.ServerInfo_UserSchema, {
|
|
name: 'bob',
|
|
userLevel: Data.ServerInfo_User_UserLevelFlag.IsRegistered,
|
|
}),
|
|
})
|
|
));
|
|
expect(store.getState().server.users.bob).toBeDefined();
|
|
|
|
AdminCommands.adjustMod('bob', true, false);
|
|
|
|
const { cmdId, value } = findLastAdminCommand(Data.Command_AdjustMod_ext);
|
|
expect(value.userName).toBe('bob');
|
|
expect(value.shouldBeMod).toBe(true);
|
|
expect(value.shouldBeJudge).toBe(false);
|
|
|
|
deliverMessage(buildResponseMessage(buildResponse({
|
|
cmdId,
|
|
responseCode: Data.Response_ResponseCode.RespOk,
|
|
})));
|
|
|
|
const bobLevel = store.getState().server.users.bob.userLevel;
|
|
expect(bobLevel & Data.ServerInfo_User_UserLevelFlag.IsModerator).toBeTruthy();
|
|
});
|
|
|
|
it('shutdownServer sends command and dispatches on success', () => {
|
|
connectAndLogin();
|
|
|
|
AdminCommands.shutdownServer('Scheduled maintenance', 10);
|
|
|
|
const { cmdId, value } = findLastAdminCommand(Data.Command_ShutdownServer_ext);
|
|
expect(value.reason).toBe('Scheduled maintenance');
|
|
expect(value.minutes).toBe(10);
|
|
|
|
deliverMessage(buildResponseMessage(buildResponse({
|
|
cmdId,
|
|
responseCode: Data.Response_ResponseCode.RespOk,
|
|
})));
|
|
});
|
|
|
|
it('reloadConfig sends command and resolves on RespOk', () => {
|
|
connectAndLogin();
|
|
|
|
AdminCommands.reloadConfig();
|
|
|
|
const { cmdId } = findLastAdminCommand(Data.Command_ReloadConfig_ext);
|
|
expect(cmdId).toBeGreaterThan(0);
|
|
|
|
deliverMessage(buildResponseMessage(buildResponse({
|
|
cmdId,
|
|
responseCode: Data.Response_ResponseCode.RespOk,
|
|
})));
|
|
});
|
|
|
|
it('updateServerMessage sends command and resolves on RespOk', () => {
|
|
connectAndLogin();
|
|
|
|
AdminCommands.updateServerMessage();
|
|
|
|
const { cmdId } = findLastAdminCommand(Data.Command_UpdateServerMessage_ext);
|
|
expect(cmdId).toBeGreaterThan(0);
|
|
|
|
deliverMessage(buildResponseMessage(buildResponse({
|
|
cmdId,
|
|
responseCode: Data.Response_ResponseCode.RespOk,
|
|
})));
|
|
});
|
|
}); |