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>
This commit is contained in:
87
test/unit-tests/autocomplete/CommandProvider-test.ts
Normal file
87
test/unit-tests/autocomplete/CommandProvider-test.ts
Normal file
@@ -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/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