bun run format

This commit is contained in:
cameronapak
2025-07-22 08:58:30 -05:00
parent 9e316a92f6
commit 7b86611f35
5 changed files with 139 additions and 136 deletions

View File

@@ -1,11 +1,11 @@
import { describe, it, expect, beforeEach } from 'vitest'; import { describe, it, expect, beforeEach } from "vitest";
import { AppReduced, type AppType } from 'ui/client/utils/AppReduced'; import { AppReduced, type AppType } from "ui/client/utils/AppReduced";
import type { BkndAdminOptions } from 'ui/client/BkndProvider'; import type { BkndAdminOptions } from "ui/client/BkndProvider";
// Import the normalizeAdminPath function for testing // Import the normalizeAdminPath function for testing
// Note: This assumes the function is exported or we need to test it indirectly through public methods // Note: This assumes the function is exported or we need to test it indirectly through public methods
describe('AppReduced', () => { describe("AppReduced", () => {
let mockAppJson: AppType; let mockAppJson: AppType;
let appReduced: AppReduced; let appReduced: AppReduced;
@@ -13,161 +13,161 @@ describe('AppReduced', () => {
mockAppJson = { mockAppJson = {
data: { data: {
entities: {}, entities: {},
relations: {} relations: {},
}, },
flows: { flows: {
flows: {} flows: {},
}, },
auth: {} auth: {},
} as AppType; } as AppType;
}); });
describe('getSettingsPath', () => { describe("getSettingsPath", () => {
it('should return settings path with admin_basepath', () => { it("should return settings path with admin_basepath", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '/admin', admin_basepath: "/admin",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getSettingsPath(); const result = appReduced.getSettingsPath();
expect(result).toBe('~/admin/settings'); expect(result).toBe("~/admin/settings");
}); });
it('should return settings path with empty admin_basepath', () => { it("should return settings path with empty admin_basepath", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '', admin_basepath: "",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getSettingsPath(); const result = appReduced.getSettingsPath();
expect(result).toBe('~/settings'); expect(result).toBe("~/settings");
}); });
it('should append additional path segments', () => { it("should append additional path segments", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '/admin', admin_basepath: "/admin",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getSettingsPath(['user', 'profile']); const result = appReduced.getSettingsPath(["user", "profile"]);
expect(result).toBe('~/admin/settings/user/profile'); expect(result).toBe("~/admin/settings/user/profile");
}); });
it('should normalize multiple slashes', () => { it("should normalize multiple slashes", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '//admin//', admin_basepath: "//admin//",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getSettingsPath(['//user//']); const result = appReduced.getSettingsPath(["//user//"]);
expect(result).toBe('~/admin/settings/user'); expect(result).toBe("~/admin/settings/user");
}); });
it('should handle admin_basepath without leading slash', () => { it("should handle admin_basepath without leading slash", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: 'admin', admin_basepath: "admin",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getSettingsPath(); const result = appReduced.getSettingsPath();
expect(result).toBe('~/admin/settings'); expect(result).toBe("~/admin/settings");
}); });
}); });
describe('getAbsolutePath', () => { describe("getAbsolutePath", () => {
it('should return absolute path with admin_basepath', () => { it("should return absolute path with admin_basepath", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '/admin', admin_basepath: "/admin",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getAbsolutePath('dashboard'); const result = appReduced.getAbsolutePath("dashboard");
expect(result).toBe('~/admin/dashboard'); expect(result).toBe("~/admin/dashboard");
}); });
it('should return base path when no path provided', () => { it("should return base path when no path provided", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '/admin', admin_basepath: "/admin",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getAbsolutePath(); const result = appReduced.getAbsolutePath();
expect(result).toBe('~/admin'); expect(result).toBe("~/admin");
}); });
it('should normalize paths correctly', () => { it("should normalize paths correctly", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '//admin//', admin_basepath: "//admin//",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getAbsolutePath('//dashboard//'); const result = appReduced.getAbsolutePath("//dashboard//");
expect(result).toBe('~/admin/dashboard'); expect(result).toBe("~/admin/dashboard");
}); });
}); });
describe('options getter', () => { describe("options getter", () => {
it('should return merged options with defaults', () => { it("should return merged options with defaults", () => {
const customOptions: BkndAdminOptions = { const customOptions: BkndAdminOptions = {
admin_basepath: '/custom-admin', admin_basepath: "/custom-admin",
logo_return_path: '/custom-home' logo_return_path: "/custom-home",
}; };
appReduced = new AppReduced(mockAppJson, customOptions); appReduced = new AppReduced(mockAppJson, customOptions);
const options = appReduced.options; const options = appReduced.options;
expect(options).toEqual({ expect(options).toEqual({
logo_return_path: '/custom-home', logo_return_path: "/custom-home",
admin_basepath: '/custom-admin' admin_basepath: "/custom-admin",
}); });
}); });
it('should use default logo_return_path when not provided', () => { it("should use default logo_return_path when not provided", () => {
const customOptions: BkndAdminOptions = { const customOptions: BkndAdminOptions = {
admin_basepath: '/admin' admin_basepath: "/admin",
}; };
appReduced = new AppReduced(mockAppJson, customOptions); appReduced = new AppReduced(mockAppJson, customOptions);
const options = appReduced.options; const options = appReduced.options;
expect(options.logo_return_path).toBe('/'); expect(options.logo_return_path).toBe("/");
expect(options.admin_basepath).toBe('/admin'); expect(options.admin_basepath).toBe("/admin");
}); });
}); });
describe('path normalization behavior', () => { describe("path normalization behavior", () => {
it('should normalize duplicate slashes in settings path', () => { it("should normalize duplicate slashes in settings path", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '/admin', admin_basepath: "/admin",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getSettingsPath(['//nested//path//']); const result = appReduced.getSettingsPath(["//nested//path//"]);
expect(result).toBe('~/admin/settings/nested/path'); expect(result).toBe("~/admin/settings/nested/path");
}); });
it('should handle root path normalization', () => { it("should handle root path normalization", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '/', admin_basepath: "/",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
@@ -175,57 +175,57 @@ describe('AppReduced', () => {
// The normalizeAdminPath function removes trailing slashes except for root "/" // The normalizeAdminPath function removes trailing slashes except for root "/"
// When admin_basepath is "/", the result is "~/" which becomes "~" after normalization // When admin_basepath is "/", the result is "~/" which becomes "~" after normalization
expect(result).toBe('~'); expect(result).toBe("~");
}); });
it('should preserve entity paths ending with slash', () => { it("should preserve entity paths ending with slash", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '/admin', admin_basepath: "/admin",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getAbsolutePath('entity/'); const result = appReduced.getAbsolutePath("entity/");
expect(result).toBe('~/admin/entity/'); expect(result).toBe("~/admin/entity/");
}); });
it('should remove trailing slashes from non-entity paths', () => { it("should remove trailing slashes from non-entity paths", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '/admin', admin_basepath: "/admin",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getAbsolutePath('dashboard/'); const result = appReduced.getAbsolutePath("dashboard/");
expect(result).toBe('~/admin/dashboard'); expect(result).toBe("~/admin/dashboard");
}); });
}); });
describe('edge cases', () => { describe("edge cases", () => {
it('should handle undefined admin_basepath', () => { it("should handle undefined admin_basepath", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getSettingsPath(); const result = appReduced.getSettingsPath();
// When admin_basepath is undefined, it defaults to empty string // When admin_basepath is undefined, it defaults to empty string
expect(result).toBe('~/settings'); expect(result).toBe("~/settings");
}); });
it('should handle null path segments', () => { it("should handle null path segments", () => {
const options: BkndAdminOptions = { const options: BkndAdminOptions = {
admin_basepath: '/admin', admin_basepath: "/admin",
logo_return_path: '/' logo_return_path: "/",
}; };
appReduced = new AppReduced(mockAppJson, options); appReduced = new AppReduced(mockAppJson, options);
const result = appReduced.getSettingsPath(['', 'valid', '']); const result = appReduced.getSettingsPath(["", "valid", ""]);
expect(result).toBe('~/admin/settings/valid'); expect(result).toBe("~/admin/settings/valid");
}); });
}); });
}); });

View File

@@ -8,9 +8,12 @@ import { Message } from "ui/components/display/Message";
import { useNavigate } from "ui/lib/routes"; import { useNavigate } from "ui/lib/routes";
import type { AdminBkndWindowContext } from "modules/server/AdminController"; import type { AdminBkndWindowContext } from "modules/server/AdminController";
export type BkndAdminOptions = Omit<AdminBkndWindowContext, "user" | "logout_route" | "admin_basepath"> & { export type BkndAdminOptions = Omit<
AdminBkndWindowContext,
"user" | "logout_route" | "admin_basepath"
> & {
admin_basepath?: string; admin_basepath?: string;
} };
type BkndContext = { type BkndContext = {
version: number; version: number;
schema: ModuleSchemas; schema: ModuleSchemas;

View File

@@ -36,8 +36,8 @@ export class AppReduced {
constructor( constructor(
protected appJson: AppType, protected appJson: AppType,
protected _options: BkndAdminOptions = { protected _options: BkndAdminOptions = {
admin_basepath: '', admin_basepath: "",
logo_return_path: '/' logo_return_path: "/",
}, },
) { ) {
//console.log("received appjson", appJson); //console.log("received appjson", appJson);
@@ -88,20 +88,20 @@ export class AppReduced {
get options() { get options() {
return { return {
admin_basepath: '', admin_basepath: "",
logo_return_path: '/', logo_return_path: "/",
...this._options, ...this._options,
}; };
} }
getSettingsPath(path: string[] = []): string { getSettingsPath(path: string[] = []): string {
const basePath = this.options.admin_basepath ? `~/${this.options.admin_basepath}` : '~'; const basePath = this.options.admin_basepath ? `~/${this.options.admin_basepath}` : "~";
const base = `${basePath}/settings` const base = `${basePath}/settings`;
return normalizeAdminPath([base, ...path].join("/")); return normalizeAdminPath([base, ...path].join("/"));
} }
getAbsolutePath(path?: string): string { getAbsolutePath(path?: string): string {
const basePath = this.options.admin_basepath ? `~/${this.options.admin_basepath}` : '~'; const basePath = this.options.admin_basepath ? `~/${this.options.admin_basepath}` : "~";
return normalizeAdminPath(path ? `${basePath}/${path}` : basePath); return normalizeAdminPath(path ? `${basePath}/${path}` : basePath);
} }