fix: deduplicate and focus code on projects

This commit is contained in:
2026-02-15 22:13:01 +01:00
parent 70fc714df5
commit 803a65999f
2 changed files with 71 additions and 38 deletions

View File

@@ -215,6 +215,15 @@ describe('ProjectEngine', () => {
);
});
it('should short-circuit before database access when deleting default project', async () => {
await expect(projectEngine.deleteProject('default')).rejects.toThrow(
'Cannot delete the default project'
);
expect(mockLocalDb.select).not.toHaveBeenCalled();
expect(mockLocalDb.delete).not.toHaveBeenCalled();
});
it('should return false for non-existent project', async () => {
const result = await projectEngine.deleteProject('non-existent-id');
expect(result).toBe(false);
@@ -260,6 +269,15 @@ describe('ProjectEngine', () => {
);
});
it('should short-circuit before database access when deleting default project', async () => {
await expect(projectEngine.deleteProjectWithData('default')).rejects.toThrow(
'Cannot delete the default project'
);
expect(mockLocalDb.select).not.toHaveBeenCalled();
expect(mockLocalDb.delete).not.toHaveBeenCalled();
});
it('should return false for non-existent project', async () => {
const result = await projectEngine.deleteProjectWithData('non-existent-id');
expect(result).toBe(false);
@@ -990,6 +1008,35 @@ describe('ProjectEngine', () => {
expect(result?.id).toBe('active-project');
expect(result?.isActive).toBe(true);
});
it('should normalize nullable fields in active project mapping', async () => {
const activeProject = {
id: 'active-nullable',
name: 'Active Nullable',
slug: 'active-nullable',
description: null,
dataPath: null,
createdAt: new Date(),
updatedAt: new Date(),
isActive: null,
};
vi.mocked(mockLocalDb.select).mockImplementation(() => {
const chain = createSelectChain();
chain.where = vi.fn().mockReturnValue({
...chain,
get: vi.fn().mockResolvedValue(activeProject),
});
return chain;
});
const result = await projectEngine.getActiveProject();
expect(result).not.toBeNull();
expect(result?.description).toBeUndefined();
expect(result?.dataPath).toBeUndefined();
expect(result?.isActive).toBe(false);
});
});
describe('setActiveProject', () => {