feat: context menu (#3180)

Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
This commit is contained in:
Nivedin
2023-08-02 20:52:16 +05:30
committed by GitHub
parent d1a564d5b8
commit 8970ff5c68
22 changed files with 1447 additions and 77 deletions

View File

@@ -0,0 +1,114 @@
import { describe, it, expect, vi } from "vitest"
import { ContextMenu, ContextMenuResult, ContextMenuService } from "../"
import { TestContainer } from "dioc/testing"
const contextMenuResult: ContextMenuResult[] = [
{
id: "result1",
text: { type: "text", text: "Sample Text" },
icon: {},
// eslint-disable-next-line @typescript-eslint/no-empty-function
action: () => {},
},
]
const testMenu: ContextMenu = {
menuID: "menu1",
getMenuFor: () => {
return {
results: contextMenuResult,
}
},
}
describe("ContextMenuService", () => {
describe("registerMenu", () => {
it("should register a menu", () => {
const container = new TestContainer()
const service = container.bind(ContextMenuService)
service.registerMenu(testMenu)
const result = service.getMenuFor("text")
expect(result).toContainEqual(expect.objectContaining({ id: "result1" }))
})
it("should not register a menu twice", () => {
const container = new TestContainer()
const service = container.bind(ContextMenuService)
service.registerMenu(testMenu)
service.registerMenu(testMenu)
const result = service.getMenuFor("text")
expect(result).toHaveLength(1)
})
it("should register multiple menus", () => {
const container = new TestContainer()
const service = container.bind(ContextMenuService)
const testMenu2: ContextMenu = {
menuID: "menu2",
getMenuFor: () => {
return {
results: contextMenuResult,
}
},
}
service.registerMenu(testMenu)
service.registerMenu(testMenu2)
const result = service.getMenuFor("text")
expect(result).toHaveLength(2)
})
})
describe("getMenuFor", () => {
it("should get the menu", () => {
const sampleMenus = {
results: contextMenuResult,
}
const container = new TestContainer()
const service = container.bind(ContextMenuService)
service.registerMenu(testMenu)
const results = service.getMenuFor("sometext")
expect(results).toEqual(sampleMenus.results)
})
it("calls registered menus with correct value", () => {
const container = new TestContainer()
const service = container.bind(ContextMenuService)
const testMenu2: ContextMenu = {
menuID: "some-id",
getMenuFor: vi.fn(() => ({
results: contextMenuResult,
})),
}
service.registerMenu(testMenu2)
service.getMenuFor("sometext")
expect(testMenu2.getMenuFor).toHaveBeenCalledWith("sometext")
})
it("should return empty array if no menus are registered", () => {
const container = new TestContainer()
const service = container.bind(ContextMenuService)
const results = service.getMenuFor("sometext")
expect(results).toEqual([])
})
})
})