feat: show call participants in room list (Discord-style)
Docker / Docker Buildx (push) Has been cancelled
Build Debian package / Build package (release) Has been cancelled
Build and Deploy / prepare (release) Has been cancelled
Deploy release / Deploy to Cloudflare Pages (release) Has been cancelled
Build and Deploy / Trigger Pro pipeline (release) Has been cancelled
Build and Deploy / Windows arm64 (release) Has been cancelled
Build and Deploy / Windows x64 (release) Has been cancelled
Build and Deploy / macOS (release) Has been cancelled
Build and Deploy / Linux amd64 (sqlcipher static) (release) Has been cancelled
Build and Deploy / Linux arm64 (sqlcipher static) (release) Has been cancelled
Build and Deploy / ${{ needs.prepare.outputs.deploy == 'true' && 'Deploy' || 'Deploy (dry-run)' }} (release) Has been cancelled
Build and Deploy / Deploy builds to ESS (release) Has been cancelled
Docker / Docker Buildx (push) Has been cancelled
Build Debian package / Build package (release) Has been cancelled
Build and Deploy / prepare (release) Has been cancelled
Deploy release / Deploy to Cloudflare Pages (release) Has been cancelled
Build and Deploy / Trigger Pro pipeline (release) Has been cancelled
Build and Deploy / Windows arm64 (release) Has been cancelled
Build and Deploy / Windows x64 (release) Has been cancelled
Build and Deploy / macOS (release) Has been cancelled
Build and Deploy / Linux amd64 (sqlcipher static) (release) Has been cancelled
Build and Deploy / Linux arm64 (sqlcipher static) (release) Has been cancelled
Build and Deploy / ${{ needs.prepare.outputs.deploy == 'true' && 'Deploy' || 'Deploy (dry-run)' }} (release) Has been cancelled
Build and Deploy / Deploy builds to ESS (release) Has been cancelled
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
Copyright 2025 New Vector Ltd.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||
|
||||
import CommandProvider from "../../../src/autocomplete/CommandProvider";
|
||||
import { stubClient } from "../../test-utils";
|
||||
import { Command } from "../../../src/slash-commands/command";
|
||||
import { CommandCategories } from "../../../src/slash-commands/interface";
|
||||
import { _td } from "../../../src/languageHandler";
|
||||
import * as SlashCommands from "../../../src/slash-commands/SlashCommands";
|
||||
|
||||
describe("CommandProvider", () => {
|
||||
let room: Room;
|
||||
|
||||
beforeEach(() => {
|
||||
stubClient();
|
||||
room = {
|
||||
roomId: "!room:server",
|
||||
} as Room;
|
||||
});
|
||||
|
||||
it("should filter out disabled commands when arguments are provided", async () => {
|
||||
// Create a disabled command
|
||||
const disabledCommand = new Command({
|
||||
command: "disabled",
|
||||
args: "<arg>",
|
||||
description: _td("slash_command|spoiler"),
|
||||
runFn: jest.fn(),
|
||||
category: CommandCategories.messages,
|
||||
isEnabled: () => false,
|
||||
});
|
||||
|
||||
// Create an enabled command
|
||||
const enabledCommand = new Command({
|
||||
command: "enabled",
|
||||
args: "<arg>",
|
||||
description: _td("slash_command|shrug"),
|
||||
runFn: jest.fn(),
|
||||
category: CommandCategories.messages,
|
||||
isEnabled: () => true,
|
||||
});
|
||||
|
||||
// Mock the Commands array and CommandMap
|
||||
Object.defineProperty(SlashCommands, "Commands", {
|
||||
value: [disabledCommand, enabledCommand],
|
||||
configurable: true,
|
||||
});
|
||||
|
||||
const mockCommandMap = new Map<string, Command>();
|
||||
mockCommandMap.set("disabled", disabledCommand);
|
||||
mockCommandMap.set("enabled", enabledCommand);
|
||||
|
||||
Object.defineProperty(SlashCommands, "CommandMap", {
|
||||
value: mockCommandMap,
|
||||
configurable: true,
|
||||
});
|
||||
|
||||
const provider = new CommandProvider(room);
|
||||
|
||||
// When we search for a disabled command with arguments
|
||||
const completions = await provider.getCompletions("/disabled test", {
|
||||
beginning: true,
|
||||
start: 0,
|
||||
end: 14,
|
||||
});
|
||||
|
||||
// Then we should get no completions because the command is disabled
|
||||
expect(completions).toEqual([]);
|
||||
|
||||
// When we search for an enabled command with arguments
|
||||
const enabledCompletions = await provider.getCompletions("/enabled test", {
|
||||
beginning: true,
|
||||
start: 0,
|
||||
end: 13,
|
||||
});
|
||||
|
||||
// Then we should get the completion because the command is enabled
|
||||
// The completion preserves the arguments when the command matches
|
||||
expect(enabledCompletions.length).toBe(1);
|
||||
expect(enabledCompletions[0].completion).toBe("/enabled test");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user