diff --git a/e2e/driver.test.ts b/e2e/driver.test.ts index 480c3775..918c6cbe 100644 --- a/e2e/driver.test.ts +++ b/e2e/driver.test.ts @@ -2,18 +2,20 @@ import { test, expect } from '@playwright/test'; import { TAXI_OWNER, execSQL, login } from './utils'; import { sql } from 'kysely'; +const fromTime = new Date('2026-09-30T00:00:00.000Z').getTime(); +const toTime = new Date('2026-09-30T23:59:59.000Z').getTime(); + test('Get tours', async ({ page }) => { await login(page, TAXI_OWNER); const response = await page .context() - .request.get('/api/driver/tour?fromTime=1790726400000&toTime=1790812799000'); + .request.get(`/api/driver/tour?fromTime=${fromTime}&toTime=${toTime}`); expect(response.status()).toBe(200); const responseBody = await response.json(); expect(responseBody).toHaveLength(1); expect(responseBody[0]).toHaveProperty('tourId'); - expect(responseBody[0]).toHaveProperty('licensePlate', 'GR-TU-11'); expect(responseBody[0]).toHaveProperty('events'); const events = responseBody[0]['events']; @@ -31,8 +33,7 @@ test('Get vehicles', async ({ page }) => { expect(response.status()).toBe(200); const responseBody = await response.json(); - expect(responseBody).toHaveLength(1); - expect(responseBody[0]).toHaveProperty('licensePlate', 'GR-TU-11'); + expect(responseBody).not.toHaveLength(0); }); test('Set ticket checked', async ({ page }) => { @@ -40,7 +41,7 @@ test('Set ticket checked', async ({ page }) => { const toursResponse = await page .context() - .request.get('/api/driver/tour?fromTime=1790726400000&toTime=1790812799000'); + .request.get(`/api/driver/tour?fromTime=${fromTime}&toTime=${toTime}`); expect(toursResponse.status()).toBe(200); const tours = await toursResponse.json(); @@ -57,10 +58,20 @@ test('Set ticket checked', async ({ page }) => { const ticketCode = 'a7d421840cf89e052d7c1aa74caf66d8'; await execSQL(sql`UPDATE "request" SET ticket_code = ${ticketCode} WHERE id = ${requestId}`); - const response = await page + const response1 = await page .context() - .request.post(`/api/driver/ticket?requestId=${requestId}&ticketCode=${ticketCode}`); - expect(response.status()).toBe(200); + .request.put(`/api/driver/ticket?requestId=${requestId}&ticketCode=${ticketCode}`); + expect(response1.status()).toBe(204); + + const response2 = await page + .context() + .request.put(`/api/driver/ticket?requestId="NaN"&ticketCode=${ticketCode}`); + expect(response2.status()).toBe(400); + + const response3 = await page + .context() + .request.put(`/api/driver/ticket?requestId=${requestId}&ticketCode=invalidCode`); + expect(response3.status()).toBe(404); }); test('Set tour fare', async ({ page }) => { @@ -68,7 +79,7 @@ test('Set tour fare', async ({ page }) => { const toursResponse = await page .context() - .request.get('/api/driver/tour?fromTime=1790726400000&toTime=1790812799000'); + .request.get(`/api/driver/tour?fromTime=${fromTime}&toTime=${toTime}`); expect(toursResponse.status()).toBe(200); const tours = await toursResponse.json(); @@ -80,8 +91,14 @@ test('Set tour fare', async ({ page }) => { const fare = 1234; - const response = await page + const response1 = await page .context() - .request.post(`/api/driver/fare?tourId=${tourId}&fare=${fare}`); - expect(response.status()).toBe(200); + .request.put(`/api/driver/fare?tourId=${tourId}&fare=${fare}`); + expect(response1.status()).toBe(204); + + const response2 = await page.context().request.put(`/api/driver/fare?tourId=NaN&fare=${fare}`); + expect(response2.status()).toBe(400); + + const response3 = await page.context().request.put(`/api/driver/fare?tourId=${tourId}&fare=NaN`); + expect(response3.status()).toBe(400); }); diff --git a/src/routes/api/driver/fare/+server.ts b/src/routes/api/driver/fare/+server.ts index 0b36f104..dba44c16 100644 --- a/src/routes/api/driver/fare/+server.ts +++ b/src/routes/api/driver/fare/+server.ts @@ -1,16 +1,24 @@ import { db } from '$lib/server/db'; import { readInt } from '$lib/server/util/readForm.js'; -import { json } from '@sveltejs/kit'; +import { error } from '@sveltejs/kit'; -export const POST = async ({ url }) => { +export const PUT = async ({ url }) => { const tourId = readInt(url.searchParams.get('tourId')); const fare = readInt(url.searchParams.get('fare')); if (isNaN(fare) || isNaN(tourId)) { - throw 'bad params'; + error(400, { message: 'Invalid fare or tourId parameter' }); } - await db.updateTable('tour').set({ fare: fare }).where('id', '=', tourId).execute(); + const result = await db + .updateTable('tour') + .set({ fare: fare }) + .where('id', '=', tourId) + .executeTakeFirst(); - return json({ success: true }); + if (result.numUpdatedRows === BigInt(0)) { + error(404, { message: 'Tour not found' }); + } + + return new Response(null, { status: 204 }); }; diff --git a/src/routes/api/driver/ticket/+server.ts b/src/routes/api/driver/ticket/+server.ts index 728a6366..22c879c5 100644 --- a/src/routes/api/driver/ticket/+server.ts +++ b/src/routes/api/driver/ticket/+server.ts @@ -1,21 +1,25 @@ import { db } from '$lib/server/db'; import { readInt } from '$lib/server/util/readForm.js'; -import { json } from '@sveltejs/kit'; +import { error } from '@sveltejs/kit'; -export const POST = async ({ url }) => { +export const PUT = async ({ url }) => { const requestId = readInt(url.searchParams.get('requestId')); const ticketCode = url.searchParams.get('ticketCode'); if (typeof ticketCode !== 'string' || isNaN(requestId)) { - throw 'bad params'; + error(400, { message: 'Invalid ticketCode parameter' }); } - await db + const result = await db .updateTable('request') .set({ ticketChecked: true }) .where('id', '=', requestId) .where('ticketCode', '=', ticketCode) - .execute(); + .executeTakeFirst(); - return json({ success: true }); + if (result.numUpdatedRows === BigInt(0)) { + error(404, { message: 'Request not found or invalid ticket code' }); + } + + return new Response(null, { status: 204 }); }; diff --git a/src/routes/api/driver/tour/+server.ts b/src/routes/api/driver/tour/+server.ts index 2c1711d9..3af9be21 100644 --- a/src/routes/api/driver/tour/+server.ts +++ b/src/routes/api/driver/tour/+server.ts @@ -1,10 +1,15 @@ import { getTours } from '$lib/server/db/getTours'; import { readInt } from '$lib/server/util/readForm.js'; -import { json } from '@sveltejs/kit'; +import { error, json } from '@sveltejs/kit'; export const GET = async ({ locals, url }) => { const companyId = locals.session!.companyId!; const fromTime = readInt(url.searchParams.get('fromTime')); const toTime = readInt(url.searchParams.get('toTime')); + + if (isNaN(fromTime) || isNaN(toTime)) { + error(400, { message: 'Invalid time range' }); + } + return json(await getTours(false, companyId, [fromTime, toTime])); };