sync: update from private repo (f6d625db)
CI / build-and-test (push) Has been cancelled

This commit is contained in:
oss-sync
2026-06-26 03:35:45 +00:00
parent 29ccaf1e92
commit b857c33ef6
371 changed files with 31312 additions and 8172 deletions
@@ -0,0 +1,64 @@
// @vitest-environment jsdom
/**
* Component tests for PathsStorageForm (settings → storage.*).
*
* Focus: text path passthrough (empty → undefined), numeric serialization
* with defaults (taskUploadMaxSizeMb default 50, trashRetentionDays default
* 30), and ENV-override gating that disables the worktree field.
*/
import '../../test/dom-setup';
import { beforeAll, describe, it, expect, vi } from 'vitest';
import { screen, fireEvent } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { renderWithProviders } from '../../test/render-helpers';
import i18n from '../../i18n';
import { PathsStorageForm } from './PathsStorageForm';
beforeAll(async () => {
await i18n.changeLanguage('en');
});
function render(config: any, overriddenByEnv: Record<string, boolean> = {}, onChange = vi.fn()) {
renderWithProviders(
<PathsStorageForm config={config} onChange={onChange} overriddenByEnv={overriddenByEnv} />,
);
return onChange;
}
describe('PathsStorageForm', () => {
it('renders existing storage values and numeric defaults', () => {
render({ storage: { worktreeDir: '/srv/worktrees' } });
expect(screen.getByDisplayValue('/srv/worktrees')).toBeInTheDocument();
// defaults appear when unset
expect(screen.getByDisplayValue('50')).toBeInTheDocument(); // taskUploadMaxSizeMb default
expect(screen.getByDisplayValue('30')).toBeInTheDocument(); // trashRetentionDays default
});
it('writes storage.customPiecesDir, undefined when cleared', async () => {
const user = userEvent.setup();
const onChange = render({ storage: { customPiecesDir: '/old' } });
const input = screen.getByDisplayValue('/old');
await user.clear(input);
expect(onChange).toHaveBeenLastCalledWith('storage.customPiecesDir', undefined);
});
it('serializes trashRetentionDays as a Number', () => {
const onChange = render({ storage: {} });
// default render shows 30
const input = screen.getByDisplayValue('30');
fireEvent.change(input, { target: { value: '7' } });
expect(onChange).toHaveBeenCalledWith('storage.trashRetentionDays', 7);
});
it('disables the worktree field when overridden by env', () => {
render({ storage: { worktreeDir: '/srv/worktrees' } }, { 'storage.worktreeDir': true });
const input = screen.getByDisplayValue('/srv/worktrees') as HTMLInputElement;
expect(input.disabled).toBe(true);
});
it('supports the legacy flat worktreeDir env override key', () => {
render({ storage: { worktreeDir: '/srv/worktrees' } }, { worktreeDir: true });
const input = screen.getByDisplayValue('/srv/worktrees') as HTMLInputElement;
expect(input.disabled).toBe(true);
});
});