fix(hurtig tilføjelse): fire ting, der blev læst forkert eller tabt i stilhed
Fundet under arbejdet med genopbygnings-prompten, hvor den rigtige parser blev kørt over en tabel af sætninger. - "at" før et 12-timers klokkeslæt blev stående i titlen: "file the VAT return tomorrow at 10am" blev opgaven "file the VAT return at". Markøren (at, kl, klokken) hører nu med til tiden, også foran "7:30 pm". - "køb 1/2 liter fløde" fik forfaldsdato 1. februar. En d/m efterfulgt af en mængdeenhed (liter, dl, kg, stk, tsk, kop, del, …) er en mængde. Uden enhed er det stadig en dato — "3/4" alene, "møde 3/4 med Anders" og også "3/4 kage", fordi intet i "kage" skiller tredje april fra tre fjerdedele, og en dato, der stille forsvinder, er værre end en, man selv sletter. - Et "#navn" eller "/navn", der ikke fandtes, blev klippet ud af titlen, og opgaven landede et andet sted uden et ord. Serveren har længe sendt unknown_project og unknown_section; fladen siger dem nu i en besked, også når en underopgave beholder sin opgaves projekt. - Titlen i opgaveruden blev læst om, men gentagelsen blev læst under `parsed.recurrence`, et felt der ikke findes, så "hver mandag" forsvandt. Den læser nu `recurrence_rule` og tager også klokkeslæt, projekt og alarm med, og siger gentagelsen på læserens sprog i stedet for et fast "gentagelse". Alarmen lægges før rettelsen, så den skrevne ikke stables oven på standardalarmen. Prøver: to nye Go-prøver i quickadd og to e2e-prøver. Fem plantede fejl, hver fanget af sin egen prøve. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ec5cf8f9f9
commit
ed30eb4c36
@@ -6089,3 +6089,74 @@ test('knappen findes ikke i urd-ansigtet', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await expect(page.getByRole('button', { name: 'Tal en opgave ind' })).toBeVisible();
|
||||
});
|
||||
|
||||
/** Calls the API as the signed-in page does, and returns the parsed body. */
|
||||
async function apiCall(page, method, path, body) {
|
||||
return page.evaluate(
|
||||
async ({ method, path, body }) => {
|
||||
const init = { method, credentials: 'include', headers: { 'Sec-Fetch-Site': 'same-origin' } };
|
||||
if (body !== undefined) {
|
||||
init.headers['Content-Type'] = 'application/json';
|
||||
init.body = JSON.stringify(body);
|
||||
}
|
||||
const r = await fetch('/api/v1' + path, init);
|
||||
return r.status === 204 ? null : r.json();
|
||||
},
|
||||
{ method, path, body }
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Et "#navn", der ikke findes, er klippet ud af titlen af parseren og lagt et
|
||||
* andet sted af serveren. Uden en besked forsvandt ordet bare.
|
||||
*/
|
||||
test('et ukendt projekt i hurtig tilføjelse bliver sagt højt', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
const name = `Findesikke${Date.now()}`;
|
||||
const box = page.getByLabel('Ny opgave');
|
||||
await box.fill(`køb mælk i dag #${name}`);
|
||||
await box.press('Enter');
|
||||
|
||||
await expect(page.locator('.toast').filter({ hasText: name })).toContainText(
|
||||
'Der er intet projekt'
|
||||
);
|
||||
await expect(page.locator('.toast').filter({ hasText: name })).toContainText('Indbakke');
|
||||
});
|
||||
|
||||
/**
|
||||
* At skrive i en opgaves titel læses som hurtig tilføjelse læser: dato,
|
||||
* klokkeslæt, gentagelse, projekt og alarm. Gentagelsen blev engang læst under
|
||||
* et felt, der ikke findes, og forsvandt.
|
||||
*/
|
||||
test('en titel, der rettes i opgaveruden, tager gentagelse, tid, projekt og alarm med', async ({
|
||||
page
|
||||
}) => {
|
||||
await page.goto('/');
|
||||
const project = await apiCall(page, 'POST', '/projects', { name: `Titelprojekt ${Date.now()}` });
|
||||
const task = await apiCall(page, 'POST', '/tasks', { content: 'omskriv titel' });
|
||||
|
||||
await page.goto('/opgave/' + task.id);
|
||||
const drawer = page.getByRole('complementary', { name: 'Opgave' });
|
||||
const title = drawer.getByLabel('Opgavens tekst');
|
||||
await expect(title).toHaveValue('omskriv titel');
|
||||
|
||||
const saved = opgaveGemt(page);
|
||||
await title.fill(`omskriv titel hver mandag kl 9 #"${project.name}" mind mig en time før`);
|
||||
await title.press('Enter');
|
||||
await saved;
|
||||
|
||||
await expect(title).toHaveValue('omskriv titel');
|
||||
await expect(page.locator('.toast').filter({ hasText: 'Læst som' })).toBeVisible();
|
||||
|
||||
// Målt på serveren, ikke på skærmen: det er dér, det skal stå.
|
||||
await expect
|
||||
.poll(async () => (await apiCall(page, 'GET', '/tasks/' + task.id)).recurrence_rule)
|
||||
.toBe('FREQ=WEEKLY;BYDAY=MO');
|
||||
const after = await apiCall(page, 'GET', '/tasks/' + task.id);
|
||||
expect(after.content).toBe('omskriv titel');
|
||||
expect(after.project_id).toBe(project.id);
|
||||
expect(new Date(after.due_datetime).getHours()).toBe(9);
|
||||
expect(new Date(after.due_datetime).getDay()).toBe(1);
|
||||
const { reminders } = await apiCall(page, 'GET', `/tasks/${task.id}/reminders`);
|
||||
expect(reminders.map((r) => r.offset_min)).toEqual([-60]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user