forked from Ruderverein-Donau-Linz/rowt
		
	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) {
 | 
			
		||||
		only_steering.removeAttribute('disabled');
 | 
			
		||||
		only_steering.removeAttribute('readonly');
 | 
			
		||||
	}else {
 | 
			
		||||
		only_steering.setAttribute('disabled', 'disabled');
 | 
			
		||||
		only_steering.setAttribute('readonly', 'readonly');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
        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('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 ('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, 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 ('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');
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@
 | 
			
		||||
        <div class="col-span-4 md:col-span-1">
 | 
			
		||||
            <div class="text-sm text-gray-600 dark:text-gray-100">Bootssteuerung</div>
 | 
			
		||||
            <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>
 | 
			
		||||
        {{ log::rower_select(id="newrower", selected=[], class="col-span-4", init=true) }}
 | 
			
		||||
 
 | 
			
		||||
@@ -137,14 +137,15 @@
 | 
			
		||||
               {% if readonly %}readonly{% endif %}>
 | 
			
		||||
    </div>
 | 
			
		||||
{% 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 }}"
 | 
			
		||||
           class="flex items-center cursor-pointer text-black dark:text-white hover:text-gray-900 dark:hover:text-gray-100 {{ class }}">
 | 
			
		||||
        <input type="checkbox"
 | 
			
		||||
               id="{{ name }}{{ id }}"
 | 
			
		||||
               name="{{ name }}"
 | 
			
		||||
               {% if checked %}checked{% endif %}
 | 
			
		||||
               {% if disabled %}disabled{% endif %}
 | 
			
		||||
               {% if checked %} checked{% endif %}
 | 
			
		||||
               {% if disabled %} disabled{% endif %}
 | 
			
		||||
               {% if readonly %} readonly="readonly"{% endif %}
 | 
			
		||||
               class="h-4 w-4 accent-primary-600 dark:accent-primary-200 mr-2" />
 | 
			
		||||
        {{ label }}
 | 
			
		||||
    </label>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user