element-web/test/unit-tests/autocomplete/CommandProvider-test.ts
David Langley ae2acdf311
Use context provided RoomViewStore within the RoomView component hierarchy (#31077)
* Update ContentMessages.ts

Update ContentMessages.ts

* update PlaybackQueue.ts

* Update SpaceHierarchy.tsx

* Update ThreadView.tsx

* Update RoomCallBanner.tsx

* Update useRoomCall.tsx

* Update DateSeparator.tsx

* Update TimelineCard.tsx

* Update UserInfoBasicOptions

* Update slask-commands/utils.ts

* lint

* Update PlaybackQueue, MVoiceMessageBody and UserInfoBasicOptionsView tests.

* Update RoomHeader-test.tsx

* lint

* Add ts docs

* Update utils-test.tsx

* Update message-test.ts

* coverage

* lint

* Improve naming

---------

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-29 09:40:21 +00:00

88 lines
2.9 KiB
TypeScript

/*
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/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");
});
});