aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/tests
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-hub/tests')
-rw-r--r--packages/meshbay-hub/tests/test_invite_links.py32
1 files changed, 31 insertions, 1 deletions
diff --git a/packages/meshbay-hub/tests/test_invite_links.py b/packages/meshbay-hub/tests/test_invite_links.py
index 1b60dc1..461cf8a 100644
--- a/packages/meshbay-hub/tests/test_invite_links.py
+++ b/packages/meshbay-hub/tests/test_invite_links.py
@@ -224,8 +224,38 @@ async def test_a_used_link_cannot_be_cancelled_here(client):
r = await client.delete(f"/v1/groups/{gid}/invite-links/{link['link_id']}",
headers=owner["h"])
assert r.status_code == 409
+
+
+@pytest.mark.asyncio
+async def test_a_used_link_leaves_the_owners_list(client, db_session):
+ """The invitee is a member now; the link saying so as well is clutter.
+
+ The row itself stays for `KEEP_REDEEMED`, which is what lets a reload of
+ the invitation page answer the account that used it instead of refusing.
+ """
+ owner = await _account(client, "gone_owner")
+ invitee = await _account(client, "gone_invitee", email="invitee@example.test")
+ gid = await _group(client, owner)
+ waiting = (await _link(client, owner, gid, email="other@example.test")).json()
+ link = (await _link(client, owner, gid)).json()
+
r = await client.get(f"/v1/groups/{gid}/invite-links", headers=owner["h"])
- assert r.json()["links"][0]["redeemed_by"] == "used_invitee"
+ assert {row["link_id"] for row in r.json()["links"]} == {waiting["link_id"],
+ link["link_id"]}
+
+ r = await client.post("/v1/invite-links/redeem", json={"ticket": link["ticket"]},
+ headers=invitee["h"])
+ assert r.status_code == 200, r.text
+
+ r = await client.get(f"/v1/groups/{gid}/invite-links", headers=owner["h"])
+ rows = r.json()["links"]
+ assert [row["link_id"] for row in rows] == [waiting["link_id"]]
+ assert "redeemed" not in r.text
+ # Still on the hub, so the invitee's second tab is answered, not refused.
+ assert (await db_session.get(GroupInviteLink, link["link_id"])) is not None
+ r = await client.post("/v1/invite-links/preview", json={"ticket": link["ticket"]},
+ headers=invitee["h"])
+ assert r.status_code == 200 and r.json()["already_member"] is True
# ── What the hub mails ───────────────────────────────────────────────────────