mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-11-14 02:29:33 +01:00
fix(links): preserve missing-path and labelled-wrap behaviour
This commit is contained in:
1 parent
168c15ae08
commit
3847e377d8
6 files changed
+59
-24
No files matched your search
@@ -343,24 +343,54 @@ describe('terminal link provider', () => {
|
||||
expect(app.openLogViewerWindow).toHaveBeenCalledWith('/mnt/data/KoboeReader.conf', 's1');
|
||||
});
|
||||
|
||||
it.each([400, 403, 404, 500, 503])(
|
||||
'does not open an unregistered spaced alternative after HTTP %s',
|
||||
async (status) => {
|
||||
const { app, links } = linksOn(['Saved (/mnt/data/Kobo', ' eReader.conf).'], 1, 120);
|
||||
app._registerExternalPreview
|
||||
.mockResolvedValueOnce({ status: 404, error: 'File not found' })
|
||||
.mockResolvedValueOnce({ status, error: 'Alternative unavailable' });
|
||||
it('uses the original opener when both hard-wrap filenames are missing', async () => {
|
||||
for (const row of [1, 2]) {
|
||||
const { app, links } = linksOn(['Saved (/mnt/data/Kobo', ' eReader.conf).'], row, 120);
|
||||
app._registerExternalPreview.mockResolvedValue({ status: 404, error: 'Attachment file not found' });
|
||||
await links[0].activate({}, links[0].text);
|
||||
expect(app._registerExternalPreview.mock.calls).toEqual([
|
||||
['/mnt/data/KoboeReader.conf', 's1'],
|
||||
['/mnt/data/Kobo eReader.conf', 's1'],
|
||||
]);
|
||||
expect(app.openFilePreview).not.toHaveBeenCalled();
|
||||
expect(app.openLogViewerWindow).not.toHaveBeenCalled();
|
||||
expect(app.showToast).toHaveBeenCalledWith('Alternative unavailable', 'error');
|
||||
expect(app.openLogViewerWindow).toHaveBeenCalledWith('/mnt/data/KoboeReader.conf', 's1');
|
||||
expect(app.showToast).not.toHaveBeenCalled();
|
||||
}
|
||||
});
|
||||
|
||||
it.each(['Path: ', '- ', '- Path: ', ' Path: '])(
|
||||
'resolves the filename without its parenthesised prefix %j',
|
||||
async (prefix) => {
|
||||
for (const row of [1, 2]) {
|
||||
const { app, links } = linksOn([`Saved the notes (${prefix}/home/me/proj/out/My`, ' Notes.md).'], row, 120);
|
||||
app._registerExternalPreview
|
||||
.mockResolvedValueOnce({ status: 404, error: 'Attachment file not found' })
|
||||
.mockResolvedValueOnce({ attachmentId: 'att-spaced' });
|
||||
expect(links.map((link) => link.text)).toEqual(['/home/me/proj/out/MyNotes.md']);
|
||||
await links[0].activate({}, links[0].text);
|
||||
expect(app._registerExternalPreview.mock.calls).toEqual([
|
||||
['/home/me/proj/out/MyNotes.md', 's1'],
|
||||
['/home/me/proj/out/My Notes.md', 's1'],
|
||||
]);
|
||||
expect(app.openFilePreview).toHaveBeenCalledWith('/home/me/proj/out/My Notes.md', 's1');
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
it.each([400, 403, 500, 503])('does not open an unregistered spaced alternative after HTTP %s', async (status) => {
|
||||
const { app, links } = linksOn(['Saved (/mnt/data/Kobo', ' eReader.conf).'], 1, 120);
|
||||
app._registerExternalPreview
|
||||
.mockResolvedValueOnce({ status: 404, error: 'File not found' })
|
||||
.mockResolvedValueOnce({ status, error: 'Alternative unavailable' });
|
||||
await links[0].activate({}, links[0].text);
|
||||
expect(app._registerExternalPreview.mock.calls).toEqual([
|
||||
['/mnt/data/KoboeReader.conf', 's1'],
|
||||
['/mnt/data/Kobo eReader.conf', 's1'],
|
||||
]);
|
||||
expect(app.openFilePreview).not.toHaveBeenCalled();
|
||||
expect(app.openLogViewerWindow).not.toHaveBeenCalled();
|
||||
expect(app.showToast).toHaveBeenCalledWith('Alternative unavailable', 'error');
|
||||
});
|
||||
|
||||
it('keeps the session selected at click time while a path lookup is pending', async () => {
|
||||
const { app, links } = linksOn(['Saved (/mnt/data/Kobo', ' eReader.conf).'], 1, 120);
|
||||
const pending = links[0].activate({}, links[0].text);
|
||||
|
||||
@@ -17,18 +17,20 @@ describe('wrapped configuration file links (Chromium)', () => {
|
||||
});
|
||||
|
||||
it.each([
|
||||
{ wrap: 'soft', originalExists: false, extension: 'conf', registrationStatus: 200 },
|
||||
{ wrap: 'hard', originalExists: false, extension: 'conf', registrationStatus: 200 },
|
||||
{ wrap: 'hard', originalExists: true, extension: 'conf', registrationStatus: 200 },
|
||||
{ wrap: 'hard', originalExists: true, extension: 'svg', registrationStatus: 400 },
|
||||
{ wrap: 'hard', originalExists: true, extension: 'markdown', registrationStatus: 400 },
|
||||
{ wrap: 'hard', originalExists: false, extension: 'svg', registrationStatus: 400 },
|
||||
{ wrap: 'soft', originalExists: false, extension: 'conf', registrationStatus: 200, prefix: '' },
|
||||
{ wrap: 'hard', originalExists: false, extension: 'conf', registrationStatus: 200, prefix: '' },
|
||||
{ wrap: 'hard', originalExists: true, extension: 'conf', registrationStatus: 200, prefix: '' },
|
||||
{ wrap: 'hard', originalExists: true, extension: 'svg', registrationStatus: 400, prefix: '' },
|
||||
{ wrap: 'hard', originalExists: true, extension: 'markdown', registrationStatus: 400, prefix: '' },
|
||||
{ wrap: 'hard', originalExists: false, extension: 'svg', registrationStatus: 400, prefix: '' },
|
||||
{ wrap: 'hard', originalExists: false, extension: 'conf', registrationStatus: 404, prefix: '' },
|
||||
{ wrap: 'hard', originalExists: false, extension: 'markdown', registrationStatus: 200, prefix: 'Path: ' },
|
||||
])(
|
||||
'handles .$extension links on both rows: $wrap, original exists: $originalExists',
|
||||
async ({ wrap, originalExists, extension, registrationStatus }) => {
|
||||
'handles .$extension links on both rows: $wrap, original exists: $originalExists, prefix: $prefix',
|
||||
async ({ wrap, originalExists, extension, registrationStatus, prefix }) => {
|
||||
const path = basePath.replace('.conf', `.${extension}`);
|
||||
const original = path.replace('Kobo eReader', 'KoboeReader');
|
||||
const expected = wrap === 'hard' && originalExists ? original : path;
|
||||
const expected = wrap === 'hard' && (originalExists || registrationStatus === 404) ? original : path;
|
||||
const lookupFails = registrationStatus === 400 && !originalExists;
|
||||
const lookups: string[] = [];
|
||||
const page = await browser.newPage({ viewport: { width: 1920, height: 600 } });
|
||||
@@ -61,10 +63,10 @@ describe('wrapped configuration file links (Chromium)', () => {
|
||||
await page.addScriptTag({ content: readFileSync(resolve(publicDir, file), 'utf8') });
|
||||
}
|
||||
await page.evaluate(
|
||||
async ({ path, wrap, workingDir }) => {
|
||||
async ({ path, wrap, workingDir, prefix }) => {
|
||||
const w = window as any;
|
||||
const boundary = path.lastIndexOf(' ');
|
||||
const first = `Found it: prepared a corrected configuration (${path.slice(0, boundary)}`;
|
||||
const first = `Found it: prepared a corrected configuration (${prefix}${path.slice(0, boundary)}`;
|
||||
const terminal = new w.Terminal({ cols: first.length + (wrap === 'soft' ? 1 : 20), rows: 6 });
|
||||
terminal.open(document.getElementById('terminal'));
|
||||
w.opened = [];
|
||||
@@ -82,7 +84,7 @@ describe('wrapped configuration file links (Chromium)', () => {
|
||||
await new Promise<void>((done) => terminal.write(text, done));
|
||||
await new Promise<void>((done) => requestAnimationFrame(() => requestAnimationFrame(() => done())));
|
||||
},
|
||||
{ path, wrap, workingDir: registrationStatus === 400 ? '/mnt/user/Scratch/Kobo' : '/workspace' }
|
||||
{ path, wrap, workingDir: registrationStatus === 400 ? '/mnt/user/Scratch/Kobo' : '/workspace', prefix }
|
||||
);
|
||||
|
||||
expect(lookups).toEqual([]);
|
||||
|
||||
Reference in new issue
Block a user