fleet/frontend/interfaces/software.tests.ts

281 lines
7.9 KiB
TypeScript
Raw Normal View History

import { formatSoftwareType, SoftwareExtensionFor } from "./software";
describe("formatSoftwareType", () => {
describe("basic source type conversion", () => {
const testCases = [
{
source: "apps" as const,
expected: "Application (macOS)",
description: "macOS applications",
},
{
source: "ios_apps" as const,
expected: "Application (iOS)",
description: "iOS applications",
},
{
source: "ipados_apps" as const,
expected: "Application (iPadOS)",
description: "iPadOS applications",
},
{
source: "programs" as const,
expected: "Program (Windows)",
description: "Windows programs",
},
{
source: "deb_packages" as const,
expected: "Package (deb)",
description: "Debian packages",
},
{
source: "rpm_packages" as const,
expected: "Package (RPM)",
description: "RPM packages",
},
{
source: "npm_packages" as const,
2025-10-24 18:54:57 +00:00
expected: "Package (npm)",
description: "NPM packages",
},
{
source: "python_packages" as const,
expected: "Package (Python)",
description: "Python packages",
},
{
source: "homebrew_packages" as const,
expected: "Package (Homebrew)",
description: "Homebrew packages",
},
{
source: "chocolatey_packages" as const,
expected: "Package (Chocolatey)",
description: "Chocolatey packages",
},
{
source: "pkg_packages" as const,
expected: "Package (pkg)",
description: "macOS pkg packages",
},
Add go_binaries table (#39877) **Related issue:** Resolves #40138 # Checklist for submitter - [x] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files) for more information. - [x] Input data is properly validated, `SELECT *` is avoided, SQL injection is prevented (using placeholders for values in statements) ## Testing - [x] Added/updated automated tests - [x] QA'd all new/changed functionality manually Installed: ``` go install golang.org/x/tools/cmd/goimports@latest go install golang.org/x/tools/gopls@latest go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest ``` Validated: ``` osquery> SELECT * FROM go_packages; +---------------+---------+-----------------------------------+-----------------------------------------------------+------------+----------------------------------+ | name | version | module_path | import_path | go_version | installed_path | +---------------+---------+-----------------------------------+-----------------------------------------------------+------------+----------------------------------+ | goimports | v0.42.0 | golang.org/x/tools | golang.org/x/tools/cmd/goimports | go1.25.5 | /Users/josh/go/bin/goimports | | golangci-lint | v1.64.8 | github.com/golangci/golangci-lint | github.com/golangci/golangci-lint/cmd/golangci-lint | go1.25.5 | /Users/josh/go/bin/golangci-lint | | gopls | v0.21.1 | golang.org/x/tools/gopls | golang.org/x/tools/gopls | go1.25.5 | /Users/josh/go/bin/gopls | +---------------+---------+-----------------------------------+-----------------------------------------------------+------------+----------------------------------+ ``` ## fleetd/orbit/Fleet Desktop - [x] Verified compatibility with the latest released version of Fleet (see [Must rule](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/workflows/fleetd-development-and-release-strategy.md)) - [x] If the change applies to only one platform, confirmed that `runtime.GOOS` is used as needed to isolate changes - [x] Verified that fleetd runs on macOS, Linux and Windows --------- Co-authored-by: Lucas Manuel Rodriguez <lucas@fleetdm.com>
2026-03-16 18:27:00 +00:00
{
source: "go_binaries" as const,
expected: "Binary (Go)",
description: "Go binaries",
},
];
testCases.forEach(({ source, expected, description }) => {
it(`should format ${description} correctly`, () => {
expect(formatSoftwareType({ source })).toBe(expected);
});
});
});
describe("browser extensions with extension_for", () => {
const testCases = [
{
source: "chrome_extensions" as const,
extension_for: "chrome" as const,
expected: "Browser plugin (Chrome)",
description: "Chrome extensions",
},
{
source: "chrome_extensions" as const,
extension_for: "edge" as const,
expected: "Browser plugin (Edge)",
description: "Edge extensions",
},
{
source: "chrome_extensions" as const,
extension_for: "brave" as const,
expected: "Browser plugin (Brave)",
description: "Brave extensions",
},
{
source: "chrome_extensions" as const,
extension_for: "opera" as const,
expected: "Browser plugin (Opera)",
description: "Opera extensions",
},
{
source: "chrome_extensions" as const,
extension_for: "chromium" as const,
expected: "Browser plugin (Chromium)",
description: "Chromium extensions",
},
{
source: "firefox_addons" as const,
extension_for: "firefox" as const,
expected: "Browser plugin (Firefox)",
description: "Firefox add-ons",
},
{
source: "safari_extensions" as const,
extension_for: undefined,
expected: "Browser plugin (Safari)",
description: "Safari extensions without extension_for",
},
{
source: "ie_extensions" as const,
extension_for: undefined,
expected: "Browser plugin (IE)",
description: "IE extensions without extension_for",
},
];
testCases.forEach(({ source, extension_for, expected, description }) => {
it(`should format ${description} correctly`, () => {
expect(formatSoftwareType({ source, extension_for })).toBe(expected);
});
});
});
describe("IDE extensions with extension_for", () => {
const testCases = [
{
source: "vscode_extensions" as const,
extension_for: "vscode" as const,
expected: "IDE extension (VSCode)",
description: "VSCode extensions",
},
{
source: "vscode_extensions" as const,
extension_for: "vscode_insiders" as const,
expected: "IDE extension (VSCode Insiders)",
description: "VSCode Insiders extensions",
},
{
source: "vscode_extensions" as const,
extension_for: "vscodium" as const,
expected: "IDE extension (VSCodium)",
description: "VSCodium extensions",
},
{
source: "vscode_extensions" as const,
extension_for: "cursor" as const,
expected: "IDE extension (Cursor)",
description: "Cursor extensions",
},
{
source: "vscode_extensions" as const,
extension_for: "trae" as const,
expected: "IDE extension (Trae)",
description: "Trae extensions",
},
{
source: "vscode_extensions" as const,
extension_for: "windsurf" as const,
expected: "IDE extension (Windsurf)",
description: "Windsurf extensions",
},
2025-10-14 15:01:45 +00:00
{
source: "jetbrains_plugins" as const,
extension_for: "intellij_idea" as const,
expected: "IDE extension (IntelliJ IDEA)",
description: "IntelliJ IDEA plugins",
},
];
testCases.forEach(({ source, extension_for, expected, description }) => {
it(`should format ${description} correctly`, () => {
expect(formatSoftwareType({ source, extension_for })).toBe(expected);
});
});
});
describe("unknown extension_for values", () => {
it("should use startCase for unknown extension_for values", () => {
expect(
formatSoftwareType({
source: "chrome_extensions",
extension_for: "unknown_browser" as SoftwareExtensionFor,
})
).toBe("Browser plugin (Unknown Browser)");
});
it("should use startCase for unknown vscode extension_for values", () => {
expect(
formatSoftwareType({
source: "vscode_extensions",
extension_for: "unknown_editor" as SoftwareExtensionFor,
})
).toBe("IDE extension (Unknown Editor)");
});
});
describe("edge cases", () => {
it("should handle unknown source types", () => {
expect(
formatSoftwareType({
source: "unknown_source" as any,
})
).toBe("Unknown");
});
it("should handle empty extension_for", () => {
expect(
formatSoftwareType({
source: "chrome_extensions",
extension_for: "",
})
).toBe("Browser plugin");
});
it("should handle undefined extension_for", () => {
expect(
formatSoftwareType({
source: "chrome_extensions",
extension_for: undefined,
})
).toBe("Browser plugin");
});
it("should handle null extension_for", () => {
expect(
formatSoftwareType({
source: "chrome_extensions",
extension_for: null as any,
})
).toBe("Browser plugin");
});
});
describe("all source types without extension_for", () => {
const allSourceTypes = [
"apt_sources",
"deb_packages",
"portage_packages",
"rpm_packages",
"yum_sources",
"pacman_packages",
"npm_packages",
"atom_packages",
"python_packages",
"tgz_packages",
"apps",
"ios_apps",
"ipados_apps",
"chrome_extensions",
"firefox_addons",
"safari_extensions",
"homebrew_packages",
"programs",
"ie_extensions",
"chocolatey_packages",
"pkg_packages",
"vscode_extensions",
Add go_binaries table (#39877) **Related issue:** Resolves #40138 # Checklist for submitter - [x] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files) for more information. - [x] Input data is properly validated, `SELECT *` is avoided, SQL injection is prevented (using placeholders for values in statements) ## Testing - [x] Added/updated automated tests - [x] QA'd all new/changed functionality manually Installed: ``` go install golang.org/x/tools/cmd/goimports@latest go install golang.org/x/tools/gopls@latest go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest ``` Validated: ``` osquery> SELECT * FROM go_packages; +---------------+---------+-----------------------------------+-----------------------------------------------------+------------+----------------------------------+ | name | version | module_path | import_path | go_version | installed_path | +---------------+---------+-----------------------------------+-----------------------------------------------------+------------+----------------------------------+ | goimports | v0.42.0 | golang.org/x/tools | golang.org/x/tools/cmd/goimports | go1.25.5 | /Users/josh/go/bin/goimports | | golangci-lint | v1.64.8 | github.com/golangci/golangci-lint | github.com/golangci/golangci-lint/cmd/golangci-lint | go1.25.5 | /Users/josh/go/bin/golangci-lint | | gopls | v0.21.1 | golang.org/x/tools/gopls | golang.org/x/tools/gopls | go1.25.5 | /Users/josh/go/bin/gopls | +---------------+---------+-----------------------------------+-----------------------------------------------------+------------+----------------------------------+ ``` ## fleetd/orbit/Fleet Desktop - [x] Verified compatibility with the latest released version of Fleet (see [Must rule](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/workflows/fleetd-development-and-release-strategy.md)) - [x] If the change applies to only one platform, confirmed that `runtime.GOOS` is used as needed to isolate changes - [x] Verified that fleetd runs on macOS, Linux and Windows --------- Co-authored-by: Lucas Manuel Rodriguez <lucas@fleetdm.com>
2026-03-16 18:27:00 +00:00
"go_binaries",
] as const;
allSourceTypes.forEach((source) => {
it(`should format ${source} without extension_for`, () => {
const result = formatSoftwareType({ source });
expect(result).toBeDefined();
expect(typeof result).toBe("string");
expect(result.length).toBeGreaterThan(0);
});
});
});
});