oficina / meet Public

Clone
git clone https://amadan.net/oficina/meet

Plain git — no account needed to clone.

Download

Download this file

1package callstest
2
3import (
4 "encoding/json"
5 "net/http"
6 "net/http/httptest"
7 "strings"
8 "testing"
9)
10
11func TestShareMeetingRequiresMemberAndKeepsInvitation(t *testing.T) {
12 x := newHarness(t, "paul@example.com", "bea@example.com")
13 creator := x.browser(t)
14 creator.signIn("paul@example.com")
15 sqid, token := createMeeting(t, creator, "Share this meeting", "")
16 member := x.browser(t)
17 member.signIn("bea@example.com")
18 route := "/m/" + sqid + "/share"
19 page := member.post(route, nil)
20 if page.Code != 200 || !strings.Contains(page.Body.String(), token) || page.Header().Get("Cache-Control") != "no-store" {
21 t.Fatalf("member share page: %d", page.Code)
22 }
23 req := httptest.NewRequest("POST", route, strings.NewReader(`{}`))
24 req.Header.Set("Origin", testOrigin)
25 req.Header.Set("Accept", "application/json")
26 response := member.do(req)
27 var result struct {
28 URL string `json:"url"`
29 }
30 if response.Code != 200 || json.Unmarshal(response.Body.Bytes(), &result) != nil || result.URL != testOrigin+"/j/"+token {
31 t.Fatal("native share did not return the current invitation")
32 }
33 if response.Header().Get("Cache-Control") != "no-store" {
34 t.Fatal("native share may be cached")
35 }
36 outsider := x.browser(t)
37 outsider.get("/j/" + token)
38 outsider.signIn("guest@example.com")
39 if rec := outsider.get("/m/" + sqid + "/join"); rec.Code != 200 {
40 t.Fatalf("guest fixture: %d", rec.Code)
41 }
42 if rec := outsider.post(route, nil); rec.Code != http.StatusNotFound {
43 t.Fatalf("guest share: %d", rec.Code)
44 }
45 req = httptest.NewRequest("POST", route, nil)
46 req.Header.Set("Origin", "https://elsewhere.example")
47 if rec := member.do(req); rec.Code != http.StatusForbidden {
48 t.Fatalf("cross-site share: %d", rec.Code)
49 }
50 if rec := member.post("/m/not-a-meeting/share", nil); rec.Code != 404 {
51 t.Fatalf("missing meeting: %d", rec.Code)
52 }
53 creator.post("/meetings/"+sqid+"/end", nil)
54 if rec := member.post(route, nil); rec.Code != 404 {
55 t.Fatalf("ended share: %d", rec.Code)
56 }
57}
58