aboutsummaryrefslogtreecommitdiff
path: root/tests/playwright/test_journeys.py
blob: 2bfd271f76d39bd5ded8eeec9c2d5ee5be40d132 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
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"


def test_journey_reorder(page: Page, playwright_helper, dbaccess):
    playwright_helper.login()

    journey_id = add_journey(playwright_helper, dbaccess, title="Her Journey")

    page.goto(f"/journey/{journey_id}/edit")

    expect(page.locator("h1", has_text="Her Journey")).to_be_visible()

    page.locator(".track-title", has_text="trayectoria uno").drag_to(
        page.locator(".track-title", has_text="trayectoria dos"),
        target_position={"x": 10, "y": 20},
    )

    page.locator(".btn", has_text="Save").click()

    expect(page.locator("h1", has_text="Her Journey")).to_be_visible()

    journey = dbaccess.execute(select(models.Journey).filter_by(id=journey_id)).scalar_one()

    assert len(journey.tracks) == 2
    assert journey.tracks[0].title == "trayectoria dos"
    assert journey.tracks[1].title == "trayectoria uno"