mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 21:47:20 +00:00
234 lines
7.7 KiB
TypeScript
234 lines
7.7 KiB
TypeScript
import React from "react";
|
|
import userEvent from "@testing-library/user-event";
|
|
import { screen } from "@testing-library/react";
|
|
import { createCustomRenderer, createMockRouter } from "test/test-utils";
|
|
import SoftwareNameCell from "./SoftwareNameCell";
|
|
|
|
const mockRouter = createMockRouter();
|
|
const defaultProps = {
|
|
name: "Fleet Desktop",
|
|
source: "fleet",
|
|
router: mockRouter,
|
|
path: "/software/1",
|
|
};
|
|
|
|
describe("SoftwareNameCell icon rendering", () => {
|
|
// 2 "No installer" tests
|
|
it("does not show icon when no installer (Software Title page)", () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(<SoftwareNameCell {...defaultProps} />);
|
|
expect(screen.queryByTestId("install-icon")).toBeNull();
|
|
expect(screen.queryByTestId("user-icon")).toBeNull();
|
|
expect(screen.queryByTestId("refresh-icon")).toBeNull();
|
|
expect(screen.queryByTestId("automatic-self-service-icon")).toBeNull();
|
|
});
|
|
|
|
it("does not show icon when no installer (Host Inventory)", () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(<SoftwareNameCell {...defaultProps} pageContext="hostDetails" />);
|
|
expect(screen.queryByTestId("install-icon")).toBeNull();
|
|
expect(screen.queryByTestId("user-icon")).toBeNull();
|
|
expect(screen.queryByTestId("refresh-icon")).toBeNull();
|
|
expect(screen.queryByTestId("automatic-self-service-icon")).toBeNull();
|
|
});
|
|
|
|
// Skip testing no installer + hostDetailsLibrary pageContext because that can never happen
|
|
|
|
// 3 "has installer" tests
|
|
it("shows install icon for manual installer (Software Title page)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(<SoftwareNameCell {...defaultProps} hasInstaller />);
|
|
const icon = screen.getByTestId("install-icon");
|
|
await userEvent.hover(icon);
|
|
expect(
|
|
await screen.findByText(
|
|
/Software can be installed on the host details page/i
|
|
)
|
|
).toBeInTheDocument();
|
|
});
|
|
|
|
it("shows install icon for manual installer (Host Inventory)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(
|
|
<SoftwareNameCell
|
|
{...defaultProps}
|
|
hasInstaller
|
|
pageContext="hostDetails"
|
|
/>
|
|
);
|
|
const icon = screen.getByTestId("install-icon");
|
|
await userEvent.hover(icon);
|
|
expect(await screen.findByText(/on the Library tab/i)).toBeInTheDocument();
|
|
});
|
|
|
|
it("does not show install icon for manual installer (Host Library) as every software on that page will have an installer", () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(
|
|
<SoftwareNameCell
|
|
{...defaultProps}
|
|
hasInstaller
|
|
pageContext="hostDetailsLibrary"
|
|
/>
|
|
);
|
|
expect(screen.queryByTestId("install-icon")).toBeNull();
|
|
});
|
|
|
|
// 3 "self service installer" tests
|
|
it("shows user icon for self-service software (Software Title page)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(<SoftwareNameCell {...defaultProps} hasInstaller isSelfService />);
|
|
const icon = screen.getByTestId("user-icon");
|
|
await userEvent.hover(icon);
|
|
expect(
|
|
await screen.findByText(/End users can install from/i)
|
|
).toBeInTheDocument();
|
|
});
|
|
|
|
it("shows user icon for self-service software (Host Inventory)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(
|
|
<SoftwareNameCell
|
|
{...defaultProps}
|
|
hasInstaller
|
|
isSelfService
|
|
pageContext="hostDetails"
|
|
/>
|
|
);
|
|
const icon = screen.getByTestId("user-icon");
|
|
await userEvent.hover(icon);
|
|
expect(
|
|
await screen.findByText(/End users can install from/i)
|
|
).toBeInTheDocument();
|
|
});
|
|
|
|
it("shows user icon for self-service software (Host Library)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(
|
|
<SoftwareNameCell
|
|
{...defaultProps}
|
|
hasInstaller
|
|
isSelfService
|
|
pageContext="hostDetailsLibrary"
|
|
/>
|
|
);
|
|
const icon = screen.getByTestId("user-icon");
|
|
await userEvent.hover(icon);
|
|
expect(
|
|
await screen.findByText(/End users can install from/i)
|
|
).toBeInTheDocument();
|
|
});
|
|
|
|
// 3 "auto installer" tests
|
|
it("shows refresh icon for auto-install software (Software Title page)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(
|
|
<SoftwareNameCell
|
|
{...defaultProps}
|
|
hasInstaller
|
|
automaticInstallPoliciesCount={2}
|
|
/>
|
|
);
|
|
const icon = screen.getByTestId("refresh-icon");
|
|
await userEvent.hover(icon);
|
|
expect(
|
|
await screen.findByText(/2 policies trigger install./i)
|
|
).toBeInTheDocument();
|
|
});
|
|
|
|
it("shows refresh icon for auto-install software (Host Inventory)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(
|
|
<SoftwareNameCell
|
|
{...defaultProps}
|
|
hasInstaller
|
|
automaticInstallPoliciesCount={3}
|
|
pageContext="hostDetails"
|
|
/>
|
|
);
|
|
const icon = screen.getByTestId("refresh-icon");
|
|
await userEvent.hover(icon);
|
|
expect(
|
|
await screen.findByText(/3 policies trigger install./i)
|
|
).toBeInTheDocument();
|
|
});
|
|
|
|
it("shows refresh icon for auto-install software (Host Library)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(
|
|
<SoftwareNameCell
|
|
{...defaultProps}
|
|
hasInstaller
|
|
automaticInstallPoliciesCount={1}
|
|
pageContext="hostDetailsLibrary"
|
|
/>
|
|
);
|
|
const icon = screen.getByTestId("refresh-icon");
|
|
await userEvent.hover(icon);
|
|
expect(
|
|
await screen.findByText(/A policy triggers install./i)
|
|
).toBeInTheDocument();
|
|
});
|
|
|
|
// 3 "self service + auto installer" tests
|
|
it("shows automatic-self-service icon for self-service + auto-install (Software Title page)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(
|
|
<SoftwareNameCell
|
|
{...defaultProps}
|
|
hasInstaller
|
|
isSelfService
|
|
automaticInstallPoliciesCount={2}
|
|
/>
|
|
);
|
|
const icon = screen.getByTestId("automatic-self-service-icon");
|
|
await userEvent.hover(icon);
|
|
expect(
|
|
await screen.findByText(/2 policies trigger install./i)
|
|
).toBeInTheDocument();
|
|
expect(
|
|
await screen.findByText(/End users can install/i)
|
|
).toBeInTheDocument();
|
|
});
|
|
|
|
it("shows automatic-self-service icon for self-service + auto-install (Host Inventory)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(
|
|
<SoftwareNameCell
|
|
{...defaultProps}
|
|
hasInstaller
|
|
isSelfService
|
|
automaticInstallPoliciesCount={2}
|
|
pageContext="hostDetails"
|
|
/>
|
|
);
|
|
const icon = screen.getByTestId("automatic-self-service-icon");
|
|
await userEvent.hover(icon);
|
|
expect(
|
|
await screen.findByText(/2 policies trigger install./i)
|
|
).toBeInTheDocument();
|
|
expect(
|
|
await screen.findByText(/End users can install/i)
|
|
).toBeInTheDocument();
|
|
});
|
|
|
|
it("shows automatic-self-service icon for self-service + auto-install (Host Library)", async () => {
|
|
const render = createCustomRenderer({ withBackendMock: true });
|
|
render(
|
|
<SoftwareNameCell
|
|
{...defaultProps}
|
|
hasInstaller
|
|
isSelfService
|
|
automaticInstallPoliciesCount={2}
|
|
pageContext="hostDetailsLibrary"
|
|
/>
|
|
);
|
|
const icon = screen.getByTestId("automatic-self-service-icon");
|
|
await userEvent.hover(icon);
|
|
expect(
|
|
await screen.findByText(/2 policies trigger install./i)
|
|
).toBeInTheDocument();
|
|
expect(
|
|
await screen.findByText(/End users can install/i)
|
|
).toBeInTheDocument();
|
|
});
|
|
});
|