treat edge case of calling it in subdirectory

This commit is contained in:
Simon Knott 2024-07-17 16:04:12 +02:00
parent 0f38048ef2
commit 359edf9c0f
No known key found for this signature in database
GPG key ID: 8CEDC00028084AEC
2 changed files with 27 additions and 2 deletions

View file

@ -87,7 +87,7 @@ export async function detectChangedFiles(baseCommit: string): Promise<string[]>
return childProcess.execSync(
`git ${command}`,
{ encoding: 'utf-8', stdio: 'pipe' }
).split('\n').filter(Boolean).map(file => path.resolve(file));
).split('\n').filter(Boolean);
} catch (_error) {
const error = _error as childProcess.SpawnSyncReturns<string>;
throw new Error([
@ -107,8 +107,9 @@ export async function detectChangedFiles(baseCommit: string): Promise<string[]>
const untrackedFiles = gitFileList(`ls-files --others --exclude-standard`);
const trackedFilesWithChanges = gitFileList(`diff ${baseCommit} --name-only`);
const [gitRoot] = gitFileList('rev-parse --show-toplevel');
const filesWithChanges = [...untrackedFiles, ...trackedFilesWithChanges];
const filesWithChanges = [...untrackedFiles, ...trackedFilesWithChanges].map(file => path.join(gitRoot, file));
return [
...filesWithChanges,
...affectedTestFiles(filesWithChanges),

View file

@ -240,3 +240,27 @@ test('should suppport component tests', async ({ runInlineTest, setupRepository,
expect(result2.output).toContain('button2.test.tsx');
expect(result2.output).not.toContain('button.test.tsx');
});
test('should work the same if being called in subdirectory', async ({ runInlineTest, setupRepository, writeFiles }) => {
const git = await setupRepository();
await writeFiles({
'tests/c.spec.ts': `
import { test, expect } from '@playwright/test';
test('fails', () => { expect(1).toBe(2); });
`
});
git('add .');
git('commit -a -m "add test"');
const result = await runInlineTest({
'tests/c.spec.ts': `
import { test, expect } from '@playwright/test';
test('fails', () => { expect(1).toBe(3); });
`
}, { 'only-changed': true }, {}, { cwd: 'tests' });
expect(result.exitCode).toBe(1);
expect(result.failed).toBe(1);
expect(result.output).toContain('c.spec.ts');
});