fleet/frontend/utilities/file/fileUtils.tests.ts
Ian Littman 0d29f2bfc0
Add custom software icons (#32652)
For #29478, sans GitOps.

---------

Co-authored-by: RachelElysia <71795832+RachelElysia@users.noreply.github.com>
Co-authored-by: Konstantin Sykulev <konst@sykulev.com>
2025-09-05 17:31:03 -05:00

117 lines
4.2 KiB
TypeScript

import {
getExtensionFromFileName,
getFileDetails,
getPlatformDisplayName,
} from "./fileUtils";
describe("fileUtils", () => {
describe("fileUtils - getExtensionFromFileName", () => {
const testCases = [
// Simple extensions
{ fileName: "test.pkg", expectedExtension: "pkg" },
{ fileName: "test.json", expectedExtension: "json" },
{ fileName: "test.mobileconfig", expectedExtension: "mobileconfig" },
{ fileName: "test.exe", expectedExtension: "exe" },
{ fileName: "test.msi", expectedExtension: "msi" },
{ fileName: "test.xml", expectedExtension: "xml" },
{ fileName: "test.deb", expectedExtension: "deb" },
{ fileName: "test.rpm", expectedExtension: "rpm" },
{ fileName: "test.tar", expectedExtension: "tar" },
// Compound extensions
{ fileName: "test.tar.gz", expectedExtension: "tar.gz" },
{ fileName: "test.tar.xz", expectedExtension: "tar.xz" },
{ fileName: "test.tar.bz2", expectedExtension: "tar.bz2" },
{ fileName: "test.tar.zst", expectedExtension: "tar.zst" },
// Alias for compound extensions
{ fileName: "test.tgz", expectedExtension: "tar.gz" },
{ fileName: "test.tbz2", expectedExtension: "tar.bz2" },
{ fileName: "test.tzst", expectedExtension: "tar.zst" },
{ fileName: "test.txz", expectedExtension: "tar.xz" },
// No extension
{ fileName: "no_extension", expectedExtension: undefined },
];
testCases.forEach(({ fileName, expectedExtension }) => {
it(`should return "${expectedExtension}" for "${fileName}"`, () => {
expect(getExtensionFromFileName(fileName)).toEqual(expectedExtension);
});
});
});
describe("fileUtils - getFileDetails", () => {
const testCases = [
{
fileName: "test.pkg",
expectedDetails: { name: "test.pkg", description: "macOS" },
},
{
fileName: "test.exe",
expectedDetails: { name: "test.exe", description: "Windows" },
},
{
fileName: "test.tar.gz",
expectedDetails: { name: "test.tar.gz", description: "Linux" },
},
{
fileName: "unknown.file",
expectedDetails: { name: "unknown.file", description: undefined },
},
];
testCases.forEach(({ fileName, expectedDetails }) => {
it(`should return correct details for "${fileName}"`, () => {
const file = new File([""], fileName);
expect(getFileDetails(file)).toEqual(expectedDetails);
});
});
});
describe("fileUtils - getPlatformDisplayName", () => {
const testCases = [
{ extension: "pkg", platform: "macOS" },
{ extension: "json", platform: "macOS" },
{ extension: "mobileconfig", platform: "macOS" },
{ extension: "exe", platform: "Windows" },
{ extension: "msi", platform: "Windows" },
{ extension: "xml", platform: "Windows" },
{ extension: "deb", platform: "Linux" },
{ extension: "tar.gz", platform: "Linux" },
{ extension: undefined, platform: undefined }, // no extension
{ extension: "unknown_ext", platform: undefined }, // unmapped extension
];
testCases.forEach(({ extension, platform }) => {
it(`should return "${platform}" for ".${extension}" files`, () => {
const file = new File([""], `test.${extension}`);
expect(getPlatformDisplayName(file)).toEqual(platform);
});
});
});
it("should handle empty filenames gracefully", () => {
const file = new File([""], "");
expect(getPlatformDisplayName(file)).toBeUndefined();
expect(getFileDetails(file)).toEqual({ name: "", description: undefined });
});
it("should handle files with no extension gracefully", () => {
const file = new File([""], `no_extension`);
expect(getPlatformDisplayName(file)).toBeUndefined();
expect(getFileDetails(file)).toEqual({
name: "no_extension",
description: undefined,
});
});
it("should handle filenames with multiple dots correctly", () => {
const file = new File([""], `my.file.name.pkg`);
expect(getPlatformDisplayName(file)).toEqual("macOS");
expect(getFileDetails(file)).toEqual({
name: "my.file.name.pkg",
description: "macOS",
});
});
});