mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-08-03 21:12:24 +00:00
88 lines
2.8 KiB
TypeScript
88 lines
2.8 KiB
TypeScript
// Unit tests for null theme property protection
|
|
// These tests focus on the defensive programming fixes for GitHub issue #5021
|
|
|
|
describe('Null Theme Protection Tests', () => {
|
|
describe('Theme object spreading with null protection', () => {
|
|
it('should handle null theme object gracefully', () => {
|
|
// Test the pattern used in the fix: ...(activeContext.theme || {})
|
|
const activeContext = { theme: null };
|
|
|
|
// This should not throw an error
|
|
expect(() => {
|
|
const result = {
|
|
...(activeContext.theme || {}),
|
|
backgroundImageLight: 'test-url',
|
|
};
|
|
expect(result).toEqual({ backgroundImageLight: 'test-url' });
|
|
}).not.toThrow();
|
|
});
|
|
|
|
it('should handle undefined theme object gracefully', () => {
|
|
// Test the pattern used in the fix: ...(activeContext.theme || {})
|
|
const activeContext = { theme: undefined };
|
|
|
|
// This should not throw an error
|
|
expect(() => {
|
|
const result = {
|
|
...(activeContext.theme || {}),
|
|
backgroundImageDark: 'test-url',
|
|
};
|
|
expect(result).toEqual({ backgroundImageDark: 'test-url' });
|
|
}).not.toThrow();
|
|
});
|
|
|
|
it('should preserve existing theme properties when theme is defined', () => {
|
|
// Test that existing theme properties are preserved
|
|
const activeContext = {
|
|
theme: {
|
|
primary: '#000',
|
|
accent: '#fff',
|
|
},
|
|
};
|
|
|
|
const result = {
|
|
...(activeContext.theme || {}),
|
|
backgroundImageLight: 'test-url',
|
|
};
|
|
|
|
expect(result).toEqual({
|
|
primary: '#000',
|
|
accent: '#fff',
|
|
backgroundImageLight: 'test-url',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Optional chaining for theme.primary access', () => {
|
|
it('should handle null theme gracefully with optional chaining', () => {
|
|
const project: any = { theme: null };
|
|
|
|
// This should not throw an error and should return undefined
|
|
const result = project.theme?.primary;
|
|
expect(result).toBeUndefined();
|
|
});
|
|
|
|
it('should handle undefined theme gracefully with optional chaining', () => {
|
|
const project: any = { theme: undefined };
|
|
|
|
// This should not throw an error and should return undefined
|
|
const result = project.theme?.primary;
|
|
expect(result).toBeUndefined();
|
|
});
|
|
|
|
it('should return theme.primary when theme exists', () => {
|
|
const project = { theme: { primary: '#123456' } };
|
|
|
|
const result = project.theme?.primary;
|
|
expect(result).toBe('#123456');
|
|
});
|
|
|
|
it('should fallback to default color when theme.primary is null', () => {
|
|
const DEFAULT_COLOR = '#default';
|
|
const project: any = { theme: { primary: null } };
|
|
|
|
const result = project.theme?.primary || DEFAULT_COLOR;
|
|
expect(result).toBe(DEFAULT_COLOR);
|
|
});
|
|
});
|
|
});
|