mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-04-27 07:48:01 -07:00
104 lines
No EOL
3.4 KiB
TypeScript
104 lines
No EOL
3.4 KiB
TypeScript
// Moderator command pipeline smoke tests — validates that sendModeratorCommand
|
|
// encodes, correlates, and persists correctly end-to-end. One test per
|
|
// distinct response pattern (simple vs. extension-payload).
|
|
|
|
import { create } from '@bufbuild/protobuf';
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
import { Data } from '@app/types';
|
|
import { store } from '@app/store';
|
|
import { ModeratorCommands } from '@app/websocket';
|
|
|
|
import { connectAndLogin } from '../helpers/setup';
|
|
import {
|
|
buildResponse,
|
|
buildResponseMessage,
|
|
deliverMessage,
|
|
} from '../helpers/protobuf-builders';
|
|
import { findLastModeratorCommand } from '../helpers/command-capture';
|
|
|
|
describe('moderator commands', () => {
|
|
it('getBanHistory populates server.banHistory on success', () => {
|
|
connectAndLogin();
|
|
|
|
ModeratorCommands.getBanHistory('baduser');
|
|
|
|
const { cmdId, value } = findLastModeratorCommand(Data.Command_GetBanHistory_ext);
|
|
expect(value.userName).toBe('baduser');
|
|
|
|
const banEntry = create(Data.ServerInfo_BanSchema, {
|
|
adminId: 'admin1',
|
|
adminName: 'Admin',
|
|
banTime: '2026-01-01',
|
|
banLength: '60',
|
|
visibleReason: 'spamming',
|
|
});
|
|
deliverMessage(buildResponseMessage(buildResponse({
|
|
cmdId,
|
|
responseCode: Data.Response_ResponseCode.RespOk,
|
|
ext: Data.Response_BanHistory_ext,
|
|
value: create(Data.Response_BanHistorySchema, { banList: [banEntry] }),
|
|
})));
|
|
|
|
const history = store.getState().server.banHistory.baduser;
|
|
expect(history).toHaveLength(1);
|
|
expect(history[0].visibleReason).toBe('spamming');
|
|
});
|
|
|
|
it('viewLogHistory populates server.logs on success', () => {
|
|
connectAndLogin();
|
|
|
|
ModeratorCommands.viewLogHistory({ dateRange: 30 });
|
|
|
|
const { cmdId } = findLastModeratorCommand(Data.Command_ViewLogHistory_ext);
|
|
|
|
const logMsg = create(Data.ServerInfo_ChatMessageSchema, {
|
|
senderName: 'alice',
|
|
message: 'test message',
|
|
});
|
|
deliverMessage(buildResponseMessage(buildResponse({
|
|
cmdId,
|
|
responseCode: Data.Response_ResponseCode.RespOk,
|
|
ext: Data.Response_ViewLogHistory_ext,
|
|
value: create(Data.Response_ViewLogHistorySchema, { logMessage: [logMsg] }),
|
|
})));
|
|
|
|
const logs = store.getState().server.logs;
|
|
expect(Object.keys(logs).length).toBeGreaterThan(0);
|
|
});
|
|
|
|
it('warnUser sends command and updates state on success', () => {
|
|
connectAndLogin();
|
|
|
|
ModeratorCommands.warnUser('troublemaker', 'spamming chat');
|
|
|
|
const { cmdId, value } = findLastModeratorCommand(Data.Command_WarnUser_ext);
|
|
expect(value.userName).toBe('troublemaker');
|
|
expect(value.reason).toBe('spamming chat');
|
|
|
|
deliverMessage(buildResponseMessage(buildResponse({
|
|
cmdId,
|
|
responseCode: Data.Response_ResponseCode.RespOk,
|
|
})));
|
|
|
|
expect(store.getState().server.warnUser).toBe('troublemaker');
|
|
});
|
|
|
|
it('banFromServer sends command and updates state on success', () => {
|
|
connectAndLogin();
|
|
|
|
ModeratorCommands.banFromServer(60, 'baduser', undefined, 'repeated offenses', 'rule violation');
|
|
|
|
const { cmdId, value } = findLastModeratorCommand(Data.Command_BanFromServer_ext);
|
|
expect(value.userName).toBe('baduser');
|
|
expect(value.minutes).toBe(60);
|
|
expect(value.visibleReason).toBe('rule violation');
|
|
|
|
deliverMessage(buildResponseMessage(buildResponse({
|
|
cmdId,
|
|
responseCode: Data.Response_ResponseCode.RespOk,
|
|
})));
|
|
|
|
expect(store.getState().server.banUser).toBe('baduser');
|
|
});
|
|
}); |