diff --git a/transport/http_test.go b/transport/http_test.go index 9359de2..0d753dc 100644 --- a/transport/http_test.go +++ b/transport/http_test.go @@ -45,7 +45,9 @@ func TestInvites(t *testing.T) { } server := store.Server{ - Id: "1", + Id: "1", + Address: "foo", + Owner: user, Rcon: store.Rcon{ Address: "foo", Password: "bar", @@ -156,7 +158,7 @@ func TestInvites(t *testing.T) { st.EXPECT().GetInvite(inv.Token).Return(inv, nil) handler := transport.New(st, im, mc) - req, err := http.NewRequest("GET", "/api/v1/invite/foo", nil) + req, err := http.NewRequest("GET", "/api/v1/invite/"+inv.Token, nil) if err != nil { t.Fatal(err) } @@ -189,7 +191,7 @@ func TestInvites(t *testing.T) { st.EXPECT().GetInvite(inv.Token).Return(inv, nil) handler := transport.New(st, im, mc) - req, err := http.NewRequest("GET", "/api/v1/invite/foo", nil) + req, err := http.NewRequest("GET", "/api/v1/invite/"+inv.Token, nil) if err != nil { t.Fatal(err) } @@ -222,7 +224,7 @@ func TestInvites(t *testing.T) { st.EXPECT().GetInvite(inv.Token).Return(store.Invite{}, sql.ErrNoRows) handler := transport.New(st, im, mc) - req, err := http.NewRequest("GET", "/api/v1/invite/foo", nil) + req, err := http.NewRequest("GET", "/api/v1/invite/"+inv.Token, nil) if err != nil { t.Fatal(err) } @@ -245,7 +247,7 @@ func TestInvites(t *testing.T) { st.EXPECT().GetInvite(inv.Token).Return(inv, nil) handler := transport.New(st, im, mc) - req, err := http.NewRequest("GET", "/api/v1/invite/foo", nil) + req, err := http.NewRequest("GET", "/api/v1/invite/"+inv.Token, nil) if err != nil { t.Fatal(err) } @@ -277,7 +279,7 @@ func TestInvites(t *testing.T) { mc.EXPECT().Whitelist(user.DisplayName, server).Return("success", nil) handler := transport.New(st, im, mc) - req, err := http.NewRequest("POST", "/api/v1/invite/foo/accept", nil) + req, err := http.NewRequest("POST", "/api/v1/invite/"+inv.Token+"/accept", nil) if err != nil { t.Fatal(err) } @@ -306,7 +308,7 @@ func TestInvites(t *testing.T) { st.EXPECT().GetInvite(inv.Token).Return(store.Invite{}, sql.ErrNoRows) handler := transport.New(st, im, mc) - req, err := http.NewRequest("POST", "/api/v1/invite/foo/accept", nil) + req, err := http.NewRequest("POST", "/api/v1/invite/"+inv.Token+"/accept", nil) if err != nil { t.Fatal(err) } @@ -330,7 +332,7 @@ func TestInvites(t *testing.T) { im.EXPECT().RemainingUses(inv).Return(0, nil) handler := transport.New(st, im, mc) - req, err := http.NewRequest("POST", "/api/v1/invite/foo/accept", nil) + req, err := http.NewRequest("POST", "/api/v1/invite/"+inv.Token+"/accept", nil) if err != nil { t.Fatal(err) } @@ -354,7 +356,7 @@ func TestInvites(t *testing.T) { st.EXPECT().InviteLog(inv).Return([]store.InviteLog{invLog}, nil) handler := transport.New(st, im, mc) - req, err := http.NewRequest("GET", "/api/v1/invite/foo/log", nil) + req, err := http.NewRequest("GET", "/api/v1/invite/"+inv.Token+"/log", nil) if err != nil { t.Fatal(err) } @@ -389,7 +391,7 @@ func TestInvites(t *testing.T) { st.EXPECT().InviteLog(inv).Return([]store.InviteLog{}, nil) handler := transport.New(st, im, mc) - req, err := http.NewRequest("GET", "/api/v1/invite/foo/log", nil) + req, err := http.NewRequest("GET", "/api/v1/invite/"+inv.Token+"/log", nil) if err != nil { t.Fatal(err) } @@ -414,6 +416,40 @@ func TestInvites(t *testing.T) { } }) + t.Run("delete an invite", func(t *testing.T) { + st.EXPECT().GetInvite(inv.Token).Return(inv, nil) + st.EXPECT().DeleteInvite(inv).Return(nil) + + jsonData, err := json.Marshal(server) + if err != nil { + log.Fatal(err) + } + + m := flow.New() + handler := transport.New(st, im, mc) + + req, err := http.NewRequest("DELETE", "/api/v1/invite/"+inv.Token, bytes.NewBuffer(jsonData)) + if err != nil { + t.Fatal(err) + } + + ctx := req.Context() + ctx = context.WithValue(ctx, "user", user) + req = req.WithContext(ctx) + rr := httptest.NewRecorder() + m.HandleFunc("/api/v1/invite/:id", handler.DeleteInvite) + m.ServeHTTP(rr, req) + + if status := rr.Code; status != http.StatusOK { + t.Errorf("handler returned wrong status code: got %v want %v", + status, http.StatusNotFound) + } + expected := "deleted" + if rr.Body.String() != expected { + t.Errorf("handler returned unexpected body: got %v want %v", + rr.Body.String(), expected) + } + }) } func TestUser(t *testing.T) { @@ -514,6 +550,44 @@ func TestServers(t *testing.T) { } }) + t.Run("fetch an inividual server", func(t *testing.T) { + st.EXPECT().GetServer(server.Id).Return(server, nil) + + m := flow.New() + handler := transport.New(st, im, mc) + + req, err := http.NewRequest("GET", "/api/v1/server/1", nil) + if err != nil { + t.Fatal(err) + } + + ctx := req.Context() + ctx = context.WithValue(ctx, "user", user) + req = req.WithContext(ctx) + rr := httptest.NewRecorder() + m.HandleFunc("/api/v1/server/:id", handler.Server) + m.ServeHTTP(rr, req) + + if status := rr.Code; status != http.StatusOK { + t.Errorf("handler returned wrong status code: got %v want %v", + status, http.StatusOK) + } + + var body store.Server + err = json.Unmarshal(rr.Body.Bytes(), &body) + if err != nil { + t.Fatal(err) + } + if body.Rcon.Password != "" { + t.Errorf("handler returned rcon password: got %v want %v", + body.Rcon.Password, "\"\"") + } + if body.Address != server.Address { + t.Errorf("handler returned wrong address: got %v want %v", + body.Address, server.Address) + } + }) + t.Run("create a server for a user", func(t *testing.T) { st.EXPECT().SaveServer(gomock.Any()).Return(nil) @@ -548,6 +622,41 @@ func TestServers(t *testing.T) { } }) + t.Run("delete a server for a user", func(t *testing.T) { + st.EXPECT().GetServer(server.Id).Return(server, nil) + st.EXPECT().DeleteServer(server, user).Return(nil) + + jsonData, err := json.Marshal(server) + if err != nil { + log.Fatal(err) + } + + m := flow.New() + handler := transport.New(st, im, mc) + + req, err := http.NewRequest("DELETE", "/api/v1/server/1", bytes.NewBuffer(jsonData)) + if err != nil { + t.Fatal(err) + } + + ctx := req.Context() + ctx = context.WithValue(ctx, "user", user) + req = req.WithContext(ctx) + rr := httptest.NewRecorder() + m.HandleFunc("/api/v1/server/:id", handler.Server, "DELETE") + m.ServeHTTP(rr, req) + + if status := rr.Code; status != http.StatusOK { + t.Errorf("handler returned wrong status code: got %v want %v", + status, http.StatusOK) + } + + if rr.Body.String() != "deleted" { + t.Errorf("handler returned unexpected body: got %v want %v", + rr.Body.String(), "created server") + } + }) + t.Run("get invite list for server", func(t *testing.T) { st.EXPECT().GetServer(server.Id).Return(server, nil) st.EXPECT().ServerInvites(server).Return([]store.Invite{inv}, nil)