mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-12 04:53:44 +00:00
feat: expose documented control plane routes
This commit is contained in:
@@ -97,6 +97,70 @@ func TestAuthenticatedQueueAPIUsesServerCandidateAndRevisionedMutations(t *testi
|
||||
_ = response.Body.Close()
|
||||
}
|
||||
|
||||
func TestDocumentedContractRoutesAdaptToServiceAPI(t *testing.T) {
|
||||
now := time.Unix(1000, 0).UTC()
|
||||
backend := &queueBackendSpy{}
|
||||
service := &Service{
|
||||
SessionBackend: &sessionBackendSpy{},
|
||||
QueueBackend: backend,
|
||||
Now: func() time.Time { return now },
|
||||
}
|
||||
server := httptest.NewServer(service.Handler())
|
||||
defer server.Close()
|
||||
auth := "Bearer session-1:token-1"
|
||||
create, err := http.NewRequest(http.MethodPost, server.URL+"/api/v1/queue/tickets", strings.NewReader(`{"playlist":"casual","client_build":"build-1","protocol_version":1}`))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
create.Header.Set("Authorization", auth)
|
||||
create.Header.Set("Idempotency-Key", "contract-create-key-123456")
|
||||
response, err := http.DefaultClient.Do(create)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if response.StatusCode != http.StatusCreated || backend.createCalls != 1 {
|
||||
t.Fatalf("create status = %d, calls = %d", response.StatusCode, backend.createCalls)
|
||||
}
|
||||
var ticket queueResponse
|
||||
if err := json.NewDecoder(response.Body).Decode(&ticket); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_ = response.Body.Close()
|
||||
if ticket.TicketID == "" {
|
||||
t.Fatal("contract adapter did not assign a ticket id")
|
||||
}
|
||||
heartbeat, err := http.NewRequest(http.MethodPost, server.URL+"/api/v1/queue/tickets/"+ticket.TicketID+"/heartbeat", nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
heartbeat.Header.Set("Authorization", auth)
|
||||
heartbeat.Header.Set("Idempotency-Key", "contract-heartbeat-key-123")
|
||||
heartbeat.Header.Set("If-Match-Revision", "0")
|
||||
response, err = http.DefaultClient.Do(heartbeat)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_ = response.Body.Close()
|
||||
if response.StatusCode != http.StatusOK || backend.heartbeatCalls != 1 {
|
||||
t.Fatalf("heartbeat status = %d, calls = %d", response.StatusCode, backend.heartbeatCalls)
|
||||
}
|
||||
cancel, err := http.NewRequest(http.MethodDelete, server.URL+"/api/v1/queue/tickets/"+ticket.TicketID, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cancel.Header.Set("Authorization", auth)
|
||||
cancel.Header.Set("Idempotency-Key", "contract-cancel-key-123456")
|
||||
cancel.Header.Set("If-Match-Revision", "0")
|
||||
response, err = http.DefaultClient.Do(cancel)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_ = response.Body.Close()
|
||||
if response.StatusCode != http.StatusNoContent || backend.cancelCalls != 1 {
|
||||
t.Fatalf("cancel status = %d, calls = %d", response.StatusCode, backend.cancelCalls)
|
||||
}
|
||||
}
|
||||
|
||||
func TestQueueAPIRejectsUnauthenticatedUnknownAndOversizedInput(t *testing.T) {
|
||||
service := &Service{Sessions: domain.NewSessionStore(), Queue: domain.NewQueue(), Candidate: func(string, string) (domain.Candidate, error) { return domain.Candidate{}, nil }}
|
||||
server := httptest.NewServer(service.Handler())
|
||||
|
||||
Reference in New Issue
Block a user