feat(cfold): canonicalize custom test layout
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
79
tests/mattermost-lts/custom/test_create_message.py
Normal file
79
tests/mattermost-lts/custom/test_create_message.py
Normal file
@ -0,0 +1,79 @@
|
||||
"""mattermost-lts — Q4.5 recipe-specific functional test (plan §4.3: "create the app's primary
|
||||
object — a message — and read it back").
|
||||
|
||||
Exercises mattermost's core function end-to-end against the live per-run deploy, via the REST API:
|
||||
1. Bootstrap the FIRST user (a fresh mattermost server lets the first user be created unauthenticated
|
||||
and makes them system admin).
|
||||
2. Log in → capture the session token from the `Token` response header.
|
||||
3. Create a team, then an open channel in it.
|
||||
4. POST a message (a unique marker) to the channel.
|
||||
5. GET the post back by id and assert the message text round-trips intact.
|
||||
|
||||
NOT health-only: a mattermost whose DB/API/posting path is broken fails here even though `/` and
|
||||
`/api/v4/system/ping` return 200. The marker is unique per run so a stale/echoed response can't pass.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import sys
|
||||
import uuid
|
||||
|
||||
sys.path.insert(0, os.path.dirname(__file__))
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "..", "runner"))
|
||||
import _mm # noqa: E402
|
||||
from harness import http as harness_http # noqa: E402
|
||||
|
||||
|
||||
def test_create_message_roundtrip(live_app):
|
||||
base = f"https://{live_app}/api/v4"
|
||||
uniq = uuid.uuid4().hex[:10]
|
||||
|
||||
# 1-2) Bootstrap the shared system admin (first user on a fresh server, else log in as it).
|
||||
# mattermost allows only ONE unauthenticated first-user creation, and several functional tests
|
||||
# share this deployment — so all bootstrap the same deterministic admin (see _mm.bootstrap_admin).
|
||||
auth = _mm.bearer(_mm.bootstrap_admin(base))
|
||||
|
||||
# 3) Create a team, then an open channel in it.
|
||||
status, team = harness_http.http_post(
|
||||
f"{base}/teams",
|
||||
data={"name": f"t{uniq}", "display_name": f"ccci {uniq}", "type": "O"},
|
||||
headers=auth,
|
||||
timeout=30,
|
||||
)
|
||||
assert (
|
||||
status in (200, 201) and isinstance(team, dict) and team.get("id")
|
||||
), f"team creation failed: HTTP {status}, body={team!r}"
|
||||
status, chan = harness_http.http_post(
|
||||
f"{base}/channels",
|
||||
data={
|
||||
"team_id": team["id"],
|
||||
"name": f"c{uniq}",
|
||||
"display_name": f"chan {uniq}",
|
||||
"type": "O",
|
||||
},
|
||||
headers=auth,
|
||||
timeout=30,
|
||||
)
|
||||
assert (
|
||||
status in (200, 201) and isinstance(chan, dict) and chan.get("id")
|
||||
), f"channel creation failed: HTTP {status}, body={chan!r}"
|
||||
|
||||
# 4) POST a unique marker message.
|
||||
marker = f"ccci-marker-{uniq}-roundtrip"
|
||||
status, post = harness_http.http_post(
|
||||
f"{base}/posts",
|
||||
data={"channel_id": chan["id"], "message": marker},
|
||||
headers=auth,
|
||||
timeout=30,
|
||||
)
|
||||
assert (
|
||||
status in (200, 201) and isinstance(post, dict) and post.get("id")
|
||||
), f"post creation failed: HTTP {status}, body={post!r}"
|
||||
|
||||
# 5) Read it back by id and assert the message survived the round-trip.
|
||||
status, got = harness_http.http_get(f"{base}/posts/{post['id']}", headers=auth, timeout=30)
|
||||
assert status == 200 and isinstance(got, dict), f"read-back failed: HTTP {status}, body={got!r}"
|
||||
assert (
|
||||
got.get("message") == marker
|
||||
), f"message did not round-trip: sent {marker!r}, got {got.get('message')!r}"
|
||||
Reference in New Issue
Block a user