diff options
Diffstat (limited to 'tests/playwright/test_journeys.py')
| -rw-r--r-- | tests/playwright/test_journeys.py | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/tests/playwright/test_journeys.py b/tests/playwright/test_journeys.py new file mode 100644 index 0000000..f3fa0d2 --- /dev/null +++ b/tests/playwright/test_journeys.py @@ -0,0 +1,145 @@ +from playwright.sync_api import Page, expect +from sqlalchemy import select + +from fietsboek import models + + +def add_journey(playwright_helper, dbaccess, title): + """Adds a journey for testing purposes. Returns the journey ID.""" + t_1 = playwright_helper.add_track(None, "Teasi_1.gpx.gz", "trayectoria uno") + t_2 = playwright_helper.add_track(None, "MyTourbook_1.gpx.gz", "trayectoria dos") + + with dbaccess: + journey = models.Journey( + owner=playwright_helper.john_doe(), + title=title, + description="You saw sirens?", + visibility=models.journey.Visibility.PUBLIC, + ) + + dbaccess.add(journey) + dbaccess.flush() + + journey.set_track_ids([t_1.id, t_2.id]) + dbaccess.commit() + dbaccess.refresh(journey, ["id"]) + dbaccess.expunge(journey) + + playwright_helper.data_manager.initialize_journey(journey.id) + + return journey.id + + +def test_journey_list(page: Page, playwright_helper, dbaccess): + playwright_helper.login() + + add_journey(playwright_helper, dbaccess, title="Our Journey") + + page.goto("/journey/") + expect(page.locator("h5", has_text="Our Journey")).to_be_visible() + expect(page.locator("li", has_text="trayectoria uno")).to_be_visible() + expect(page.locator("li", has_text="trayectoria dos")).to_be_visible() + + +def test_journey_new(page: Page, playwright_helper, dbaccess): + playwright_helper.login() + + playwright_helper.add_track(None, "Teasi_1.gpx.gz", "trayectoria uno") + playwright_helper.add_track(None, "MyTourbook_1.gpx.gz", "trayectoria dos") + playwright_helper.add_track(None, "MyTourbook_1.gpx.gz", "trayectoria tres") + + page.goto("/journey/") + page.get_by_text("New journey").click() + + page.get_by_label("Title").fill("My Odyssey") + page.get_by_label("Description").fill("I saw sirens!") + + page.locator("#trackSearch").fill("uno") + page.locator("#trackSearchButton").click() + page.locator(".track-query-response button").click() + + page.locator("#trackSearch").fill("dos") + page.locator("#trackSearchButton").click() + page.locator(".track-query-response button").click() + + page.locator("#trackSearch").fill("tres") + page.locator("#trackSearchButton").click() + page.locator(".track-query-response button").click() + page.locator(".journey-track", has_text="tres").locator(".btn").click() + + page.locator(".btn", has_text="Save").click() + + expect(page.locator("h1", has_text="My Odyssey")).to_be_visible() + + expect(page.locator("h5", has_text="trayectoria uno")).to_be_visible() + expect(page.locator("h5", has_text="trayectoria dos")).to_be_visible() + + journey = dbaccess.execute(select(models.Journey).filter_by(title="My Odyssey")).scalar_one() + + assert journey.title == "My Odyssey" + assert journey.description == "I saw sirens!" + assert len(journey.tracks) == 2 + assert journey.tracks[0].title == "trayectoria uno" + assert journey.tracks[1].title == "trayectoria dos" + + +def test_journey_new_empty_title(page: Page, playwright_helper): + playwright_helper.login() + + playwright_helper.add_track(None, "Teasi_1.gpx.gz", "trayectoria uno") + + page.goto("/journey/") + page.get_by_text("New journey").click() + + page.locator("#trackSearch").fill("uno") + page.locator("#trackSearchButton").click() + page.locator(".track-query-response button").click() + page.locator(".btn", has_text="Save").click() + + expect(page.locator(".invalid-feedback", has_text="A title is required")).to_be_visible() + + +def test_journey_new_no_tracks(page: Page, playwright_helper): + playwright_helper.login() + + page.goto("/journey/") + page.get_by_text("New journey").click() + + page.get_by_label("Title").fill("A title is there!") + + page.locator(".btn", has_text="Save").click() + + expect(page.locator(".invalid-feedback", has_text="A journey must have at least one track"))\ + .to_be_visible() + + +def test_journey_edit(page: Page, playwright_helper, dbaccess): + playwright_helper.login() + + journey_id = add_journey(playwright_helper, dbaccess, title="Your Odyssey") + + page.goto(f"/journey/{journey_id}/") + + expect(page.locator("h1", has_text="Your Odyssey")).to_be_visible() + + page.locator("a", has_text="Edit").click() + + page.get_by_label("Title").fill("Their Odyssey") + page.get_by_label("Description").fill("Where is Homer?") + + expect(page.locator(".track-title", has_text="trayectoria uno")).to_be_visible() + page.locator(".journey-track", has_text="uno").locator(".btn").click() + expect(page.locator(".track-title", has_text="trayectoria uno")).not_to_be_visible() + + page.locator(".btn", has_text="Save").click() + + expect(page.locator("h1", has_text="Their Odyssey")).to_be_visible() + expect(page.locator("h5", has_text="trayectoria uno")).not_to_be_visible() + expect(page.locator("h5", has_text="trayectoria dos")).to_be_visible() + + journey = dbaccess.execute(select(models.Journey).filter_by(title="Their Odyssey")).scalar_one() + + assert journey.title == "Their Odyssey" + assert journey.description == "Where is Homer?" + assert len(journey.tracks) == 1 + assert journey.tracks[0].title == "trayectoria dos" |
