fix: apply Docker 24 network workaround and smoke tests to production deploy #64

Merged
jimmy merged 18 commits from dev into main 2026-05-17 23:34:02 +08:00
6 changed files with 210 additions and 1102 deletions
Showing only changes of commit d978842c37 - Show all commits
+188 -1098
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -13,11 +13,11 @@
"devDependencies": { "devDependencies": {
"@sveltejs/vite-plugin-svelte": "^6.2.0", "@sveltejs/vite-plugin-svelte": "^6.2.0",
"@testing-library/svelte": "^5.2.3", "@testing-library/svelte": "^5.2.3",
"@vitest/coverage-v8": "^2.1.8", "@vitest/coverage-v8": "^3.2.4",
"jsdom": "^25.0.1", "jsdom": "^25.0.1",
"svelte": "^5.0.0", "svelte": "^5.0.0",
"vite": "^6.3.0", "vite": "^6.3.0",
"vitest": "^2.1.8", "vitest": "^3.2.4",
"tailwindcss": "^4.0.0", "tailwindcss": "^4.0.0",
"@tailwindcss/vite": "^4.0.0" "@tailwindcss/vite": "^4.0.0"
}, },
@@ -28,8 +28,8 @@ describe('Login Component', () => {
it('should have login button', () => { it('should have login button', () => {
render(Login); render(Login);
const loginButton = screen.getByRole('button', { name: /login/i }) || const loginButton = screen.getByRole('button', { name: /sign in/i }) ||
screen.getByText(/login/i); screen.getByText(/sign in/i);
expect(loginButton).toBeTruthy(); expect(loginButton).toBeTruthy();
}); });
+15
View File
@@ -75,6 +75,21 @@ global.MutationObserver = vi.fn(() => ({
takeRecords: vi.fn(() => []) takeRecords: vi.fn(() => [])
})); }));
// Mock Element.animate (used by Svelte transitions, not implemented in jsdom)
Element.prototype.animate = vi.fn(() => ({
finished: Promise.resolve(),
cancel: vi.fn(),
pause: vi.fn(),
play: vi.fn(),
reverse: vi.fn(),
finish: vi.fn(),
commitStyles: vi.fn(),
persist: vi.fn(),
addEventListener: vi.fn(),
removeEventListener: vi.fn(),
dispatchEvent: vi.fn(),
}));
// Mock fetch // Mock fetch
global.fetch = vi.fn(); global.fetch = vi.fn();
@@ -373,6 +373,7 @@ describe('API Client - Error Handling', () => {
}); });
it('should handle network errors', async () => { it('should handle network errors', async () => {
global.fetch.mockReset();
global.fetch.mockRejectedValueOnce(new Error('Network error')); global.fetch.mockRejectedValueOnce(new Error('Network error'));
await expect(get('/test/endpoint')).rejects.toThrow('Network error'); await expect(get('/test/endpoint')).rejects.toThrow('Network error');
+2
View File
@@ -16,6 +16,7 @@ export default defineConfig({
globals: true, globals: true,
environment: 'jsdom', environment: 'jsdom',
setupFiles: ['./tests/setup.js'], setupFiles: ['./tests/setup.js'],
resetMocks: true,
coverage: { coverage: {
provider: 'v8', provider: 'v8',
reporter: ['text', 'html', 'lcov'], reporter: ['text', 'html', 'lcov'],
@@ -23,6 +24,7 @@ export default defineConfig({
} }
}, },
resolve: { resolve: {
conditions: ['browser'],
alias: { alias: {
'@': '/src' '@': '/src'
} }