fix error, where log entries can't be added with boats with only steering
This commit is contained in:
		| @@ -158,9 +158,9 @@ function selectBoatChange() { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (event.detail.customProperties.convert_handoperated_possible) { | 	if (event.detail.customProperties.convert_handoperated_possible) { | ||||||
| 		only_steering.removeAttribute('disabled'); | 		only_steering.removeAttribute('readonly'); | ||||||
| 	}else { | 	}else { | ||||||
| 		only_steering.setAttribute('disabled', 'disabled'); | 		only_steering.setAttribute('readonly', 'readonly'); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|         const destination = <HTMLSelectElement>( |         const destination = <HTMLSelectElement>( | ||||||
|   | |||||||
| @@ -190,3 +190,57 @@ test("Kiosk can start and finish trip", async ({ page }, testInfo) => { | |||||||
|   await expect(page.locator('body')).toContainText('Ottensheim (25 km)'); |   await expect(page.locator('body')).toContainText('Ottensheim (25 km)'); | ||||||
|   await expect(page.locator('body')).toContainText('Ruderer: cox2, rower2'); |   await expect(page.locator('body')).toContainText('Ruderer: cox2, rower2'); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | test("Cox can start and finish trip with cox steering only", async ({ page }, testInfo) => { | ||||||
|  |   await page.goto("/auth"); | ||||||
|  |   await page.getByPlaceholder("Name").click(); | ||||||
|  |   await page.getByPlaceholder("Name").fill("cox2"); | ||||||
|  |   await page.getByPlaceholder("Name").press("Tab"); | ||||||
|  |   await page.getByPlaceholder("Passwort").fill("cox"); | ||||||
|  |   await page.getByPlaceholder("Passwort").press("Enter"); | ||||||
|  |  | ||||||
|  |   await page.goto("/"); | ||||||
|  |   await page.getByRole("link", { name: "Ausfahrt eintragen" }).click(); | ||||||
|  |   if (testInfo.project.name.includes("Mobile")) { | ||||||
|  |     // No left boat selector on mobile views | ||||||
|  |     await page.getByText('-- Wähle ein Boot aus ---').nth(1).click(); | ||||||
|  |     await page.getByRole("option", { name: "cox_only_steering_boat" }).click(); | ||||||
|  |   } else { | ||||||
|  |     await page.getByText('2+', { exact: true }).click(); | ||||||
|  |     await page.getByText("cox_only_steering_boat", { exact: true }).click(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   // Trip starts 2 hours ago | ||||||
|  |   const datetimeSelector = '#departure'; | ||||||
|  |   const currentValue = await page.$eval(datetimeSelector, el => el.value); | ||||||
|  |   const currentDate = new Date(currentValue); | ||||||
|  |   currentDate.setMinutes(currentDate.getMinutes()); | ||||||
|  |   currentDate.setHours(currentDate.getHours() - new Date().getTimezoneOffset()/60 - 2); | ||||||
|  |   const newDatetime = currentDate.toISOString().slice(0, 16); | ||||||
|  |   await page.$eval(datetimeSelector, (el, value) => el.value = value, newDatetime); | ||||||
|  |  | ||||||
|  |   await expect(page.locator("#shipmaster-newrowerjs")).toContainText("cox"); | ||||||
|  |   await expect(page.locator("#steering_person-newrowerjs")).toContainText( | ||||||
|  |     "rower2 cox", | ||||||
|  |   ); | ||||||
|  |   await page.getByRole("button", { name: "Ausfahrt eintragen" }).click(); | ||||||
|  |   await expect(page.locator("body")).toContainText( | ||||||
|  |     "Ausfahrt erfolgreich hinzugefügt", | ||||||
|  |   ); | ||||||
|  |   await expect(page.locator("body")).toContainText("cox_only_steering_boat"); | ||||||
|  |  | ||||||
|  |   await page.goto("/log"); | ||||||
|  |   await page.locator("div:nth-child(2) > .border-0").click(); | ||||||
|  |  | ||||||
|  |   await page.getByRole("combobox", { name: "Destination" }).click(); | ||||||
|  |   await page.getByRole("combobox", { name: "Destination" }).fill("Ottensheim"); | ||||||
|  |   await page.getByRole("button", { name: "Ausfahrt beenden" }).click(); | ||||||
|  |   await expect(page.locator("body")).toContainText( | ||||||
|  |     "Ausfahrt korrekt eingetragen", | ||||||
|  |   ); | ||||||
|  |  | ||||||
|  |   await page.goto('/log/show'); | ||||||
|  |   await expect(page.locator('body')).toContainText('cox_only_steering_boat'); | ||||||
|  |   await expect(page.locator('body')).toContainText('(cox2)'); | ||||||
|  |   await expect(page.locator('body')).toContainText('Ottensheim (25 km)'); | ||||||
|  | }); | ||||||
|   | |||||||
| @@ -55,6 +55,7 @@ INSERT INTO "boat" (name, amount_seats, location_id) VALUES ('Kaputtes Boot :-(' | |||||||
| INSERT INTO "boat" (name, amount_seats, location_id) VALUES ('Sehr kaputtes Boot :-((', 7, 1); | INSERT INTO "boat" (name, amount_seats, location_id) VALUES ('Sehr kaputtes Boot :-((', 7, 1); | ||||||
| INSERT INTO "boat" (name, amount_seats, location_id) VALUES ('Ottensheim Boot', 7, 2); | INSERT INTO "boat" (name, amount_seats, location_id) VALUES ('Ottensheim Boot', 7, 2); | ||||||
| INSERT INTO "boat" (name, amount_seats, location_id, owner) VALUES ('second_private_boat_from_rower', 1, 1, 2); | INSERT INTO "boat" (name, amount_seats, location_id, owner) VALUES ('second_private_boat_from_rower', 1, 1, 2); | ||||||
|  | INSERT INTO "boat" (name, amount_seats, location_id, default_shipmaster_only_steering) VALUES ('cox_only_steering_boat', 3, 1, true); | ||||||
| INSERT INTO "logbook_type" (name) VALUES ('Wanderfahrt'); | INSERT INTO "logbook_type" (name) VALUES ('Wanderfahrt'); | ||||||
| INSERT INTO "logbook_type" (name) VALUES ('Regatta'); | INSERT INTO "logbook_type" (name) VALUES ('Regatta'); | ||||||
| INSERT INTO "logbook" (boat_id, shipmaster,steering_person, shipmaster_only_steering, departure) VALUES (2, 2, 2, false, strftime('%Y', 'now') || '-12-24 10:00'); | INSERT INTO "logbook" (boat_id, shipmaster,steering_person, shipmaster_only_steering, departure) VALUES (2, 2, 2, false, strftime('%Y', 'now') || '-12-24 10:00'); | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ | |||||||
|         <div class="col-span-4 md:col-span-1"> |         <div class="col-span-4 md:col-span-1"> | ||||||
|             <div class="text-sm text-gray-600 dark:text-gray-100">Bootssteuerung</div> |             <div class="text-sm text-gray-600 dark:text-gray-100">Bootssteuerung</div> | ||||||
|             <div class="h-10 flex items-center"> |             <div class="h-10 flex items-center"> | ||||||
|                 {{ macros::checkbox(label='handgesteuert', name='shipmaster_only_steering', disabled=true) }} |                 {{ macros::checkbox(label='handgesteuert', name='shipmaster_only_steering', readonly=true) }} | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|         {{ log::rower_select(id="newrower", selected=[], class="col-span-4", init=true) }} |         {{ log::rower_select(id="newrower", selected=[], class="col-span-4", init=true) }} | ||||||
|   | |||||||
| @@ -137,7 +137,7 @@ | |||||||
|                {% if readonly %}readonly{% endif %}> |                {% if readonly %}readonly{% endif %}> | ||||||
|     </div> |     </div> | ||||||
| {% endmacro input %} | {% endmacro input %} | ||||||
| {% macro checkbox(label, name, id='', checked=false, class='', disabled=false) %} | {% macro checkbox(label, name, id='', checked=false, class='', disabled=false, readonly=false) %} | ||||||
|     <label for="{{ name }}{{ id }}" |     <label for="{{ name }}{{ id }}" | ||||||
|            class="flex items-center cursor-pointer text-black dark:text-white hover:text-gray-900 dark:hover:text-gray-100 {{ class }}"> |            class="flex items-center cursor-pointer text-black dark:text-white hover:text-gray-900 dark:hover:text-gray-100 {{ class }}"> | ||||||
|         <input type="checkbox" |         <input type="checkbox" | ||||||
| @@ -145,6 +145,7 @@ | |||||||
|                name="{{ name }}" |                name="{{ name }}" | ||||||
|                {% if checked %} checked{% endif %} |                {% if checked %} checked{% endif %} | ||||||
|                {% if disabled %} disabled{% endif %} |                {% if disabled %} disabled{% endif %} | ||||||
|  |                {% if readonly %} readonly="readonly"{% endif %} | ||||||
|                class="h-4 w-4 accent-primary-600 dark:accent-primary-200 mr-2" /> |                class="h-4 w-4 accent-primary-600 dark:accent-primary-200 mr-2" /> | ||||||
|         {{ label }} |         {{ label }} | ||||||
|     </label> |     </label> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user