aboutsummaryrefslogtreecommitdiff
path: root/tests/playwright/test_friends.py
blob: e19bdeaae342c88162e3575cf45d9f31322a3d16 (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
import datetime

from playwright.sync_api import Page, expect
from sqlalchemy import select

from fietsboek import models

from .conftest import Helper  # pylint: disable=relative-beyond-top-level


def test_friend_not_found(page: Page, playwright_helper: Helper):
    playwright_helper.login()

    page.goto("/me")

    page.get_by_label("Email of the friend").fill("does-not-exist@example.com")
    page.get_by_role("button", name="Send friend request").click()

    expect(page.locator(".alert")).to_have_text("The friend was not found")


def test_send_friend_request(page: Page, playwright_helper: Helper, dbaccess):
    with dbaccess:
        user = models.User(name="Volker", email="vol@ker.de", is_verified=True)
        user.set_password("raboof")
        dbaccess.add(user)
        dbaccess.flush()
        dbaccess.commit()

    playwright_helper.login()

    page.goto("/me")

    page.get_by_label("Email of the friend").fill("vol@ker.de")
    page.get_by_role("button", name="Send friend request").click()

    john = playwright_helper.john_doe()
    reqs = list(
        dbaccess.execute(select(models.FriendRequest).filter_by(sender_id=john.id)).scalars()
    )
    assert len(reqs) == 1
    assert reqs[0].recipient.name == "Volker"


def test_accept_friend_request(page: Page, playwright_helper: Helper, dbaccess):
    john = playwright_helper.john_doe()
    with dbaccess:
        volker = models.User(name="Volker", email="vol@ker.de", is_verified=True)
        volker.set_password("raboof")
        dbaccess.add(volker)
        dbaccess.add(
            models.FriendRequest(sender=john, recipient=volker, date=datetime.datetime.now())
        )
        dbaccess.commit()

    volker = dbaccess.merge(volker)
    john = dbaccess.merge(john)
    playwright_helper.login(volker)

    page.goto("/me")

    page.get_by_role("button", name="Accept").click()

    assert "John Doe" in page.content()

    friends = list(volker.get_friends())
    assert len(friends) == 1
    assert john.id in [friend.id for friend in friends]


def test_accept_by_sending(page: Page, playwright_helper: Helper, dbaccess):
    john = playwright_helper.john_doe()
    with dbaccess:
        volker = models.User(name="Volker", email="vol@ker.de", is_verified=True)
        volker.set_password("raboof")
        dbaccess.add(volker)
        dbaccess.add(
            models.FriendRequest(sender=john, recipient=volker, date=datetime.datetime.now())
        )
        dbaccess.commit()

    volker = dbaccess.merge(volker)
    john = dbaccess.merge(john)
    playwright_helper.login(volker)

    page.goto("/me")

    page.get_by_label("Email of the friend").fill("john@doe.com")
    page.get_by_role("button", name="Send friend request").click()

    assert "John Doe" in page.content()

    friends = list(volker.get_friends())
    assert len(friends) == 1
    assert john.id in [friend.id for friend in friends]


def test_unfriend(page: Page, playwright_helper: Helper, dbaccess):
    john = playwright_helper.john_doe()
    with dbaccess:
        john = dbaccess.merge(john)
        volker = models.User(name="Volker", email="vol@ker.de", is_verified=True)
        volker.set_password("raboof")
        dbaccess.add(volker)
        dbaccess.flush()
        volker.add_friend(john)
        dbaccess.commit()

    volker = dbaccess.merge(volker)
    john = dbaccess.merge(john)
    playwright_helper.login(volker)

    page.goto("/me")
    page.get_by_role("button", name="Unfriend").click()

    friends = list(volker.get_friends())
    assert not friends