UNPKG

passbolt-styleguide

Version:

Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.

336 lines (258 loc) 8.44 kB
/** * Passbolt ~ Open source password manager for teams * Copyright (c) Passbolt SA (https://www.passbolt.com) * * Licensed under GNU Affero General Public License version 3 of the or any later version. * For full copyright and license information, please see the LICENSE.txt * Redistributions of files must retain the above copyright notice. * * @copyright Copyright (c) Passbolt SA (https://www.passbolt.com) * @license https://opensource.org/licenses/AGPL-3.0 AGPL License * @link https://www.passbolt.com Passbolt(tm) * @since 5.8.0 */ import { mockUserFullProfile, mockUserFirstNameOnly, mockUserLastNameOnly, createMockUsers, } from "./DisplayDragUser.test.data"; import DisplayDragUserPage from "./DisplayDragUser.test.page"; beforeEach(() => { jest.clearAllMocks(); }); describe("DisplayDragUser", () => { describe("Single user selection", () => { it("renders with single user - full profile", () => { expect.assertions(3); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserFullProfile], }, }); expect(page.messageText).toContain("John Doe"); expect(page.hasCountBadge).toBe(false); expect(page.userAvatar).toBeTruthy(); }); it("displays full name with only first name", () => { expect.assertions(1); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserFirstNameOnly], }, }); expect(page.messageText).toContain("Alice"); }); it("displays full name with only last name", () => { expect.assertions(1); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserLastNameOnly], }, }); expect(page.messageText).toContain("Johnson"); }); it("applies item-1 class for single selection", () => { expect.assertions(2); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserFullProfile], }, }); expect(page.hasClass("item-1")).toBe(true); expect(page.hasClass("item-n")).toBe(false); }); }); describe("Multiple user selection", () => { it("renders with two users", () => { expect.assertions(2); const users = createMockUsers(2); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: users, }, }); expect(page.messageText).toContain("FirstName0 LastName0"); expect(page.countText).toBe("2"); }); it("renders with three users", () => { expect.assertions(2); const users = createMockUsers(3); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: users, }, }); expect(page.countText).toBe("3"); expect(page.hasClass("item-3")).toBe(true); }); it("applies item-n class for more than three users", () => { expect.assertions(3); const users = createMockUsers(5); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: users, }, }); expect(page.hasClass("item-n")).toBe(true); expect(page.hasClass("item-5")).toBe(false); expect(page.countText).toBe("5"); }); it("displays count badge for multiple users", () => { expect.assertions(2); const users = createMockUsers(2); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: users, }, }); expect(page.hasCountBadge).toBe(true); expect(page.countText).toBe("2"); }); }); describe("User count display", () => { it("displays exact count for less than 100 users", () => { expect.assertions(1); const users = createMockUsers(50); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: users, }, }); expect(page.countText).toBe("50"); }); it("displays 99+ for 100 users", () => { expect.assertions(1); const users = createMockUsers(100); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: users, }, }); expect(page.countText).toBe("99+"); }); it("displays 99+ for more than 100 users", () => { expect.assertions(1); const users = createMockUsers(250); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: users, }, }); expect(page.countText).toBe("99+"); }); }); describe("Avatar rendering", () => { it("always renders UserAvatar component", () => { expect.assertions(1); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserFullProfile], }, }); expect(page.userAvatar).toBeTruthy(); }); it("passes correct user to UserAvatar component", () => { expect.assertions(1); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserFullProfile], }, }); expect(page.avatarUsername).toBe("john.doe@passbolt.com"); }); it("passes correct baseUrl to UserAvatar component", () => { expect.assertions(1); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserFullProfile], }, }); expect(page.avatarBaseUrl).toBe("https://passbolt.test"); }); it("applies drag-image class to avatar", () => { expect.assertions(1); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserFullProfile], }, }); expect(page.avatarHasClass("drag-image")).toBe(true); }); it("passes first selected user to UserAvatar when multiple users selected", () => { expect.assertions(1); const users = createMockUsers(3); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: users, }, }); expect(page.avatarUsername).toBe("user0@passbolt.com"); }); }); describe("Component structure", () => { it("renders message span with user info", () => { expect.assertions(2); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserFullProfile], }, }); expect(page.messageElement).toBeTruthy(); expect(page.messageText).toContain("John Doe"); }); it("renders drag-and-drop container", () => { expect.assertions(1); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserFullProfile], }, }); expect(page.dragAndDropContainer).toBeTruthy(); }); it("renders count span only for multiple selections", () => { expect.assertions(2); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: [mockUserFullProfile], }, }); expect(page.hasCountBadge).toBe(false); page.rerender({ userWorkspaceContext: { selectedUsers: createMockUsers(2), }, }); expect(page.hasCountBadge).toBe(true); }); }); describe("Context integration", () => { it("uses AppContext for userSettings", () => { expect.assertions(2); const mockGetTrustedDomain = jest.fn(() => "https://custom.domain.test"); const testContext = { userSettings: { getTrustedDomain: mockGetTrustedDomain, }, }; const page = new DisplayDragUserPage({ context: testContext, userWorkspaceContext: { selectedUsers: [mockUserFullProfile], }, }); expect(mockGetTrustedDomain).toHaveBeenCalled(); expect(page.avatarBaseUrl).toBe("https://custom.domain.test"); }); it("uses UserWorkspaceContext for selected users", () => { expect.assertions(1); const users = createMockUsers(3); const page = new DisplayDragUserPage({ userWorkspaceContext: { selectedUsers: users, }, }); expect(page.countText).toBe("3"); }); }); });