47 lines
1.8 KiB
Go
47 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.cin.su/m/Assistant/contracts/continuity"
|
|
"git.cin.su/m/Assistant/contracts/identity"
|
|
)
|
|
|
|
func TestCreatorReminderEndpointBuildsOwnedProspectiveItem(t *testing.T) {
|
|
core := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path != "/v1/creator/sessions/current" || r.Header.Get("Authorization") != "Bearer ok" {
|
|
t.Fatal("unexpected identity validation")
|
|
}
|
|
_ = json.NewEncoder(w).Encode(identity.CreatorSession{ActorID: "actor-1", PrincipalID: "principal-1"})
|
|
}))
|
|
defer core.Close()
|
|
identityClient, err := newCreatorIdentityClient(core.URL, core.Client())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
repository := &fakeReminderRepository{}
|
|
mux := http.NewServeMux()
|
|
registerCreatorReminderRoute(mux, identityClient, repository)
|
|
request := httptest.NewRequest(http.MethodPost, "/v1/creator/reminders", strings.NewReader(`{"ScopeID":"scope-1","SourceIntentID":"intent-1","SourceUtteranceID":"utterance-1","Summary":"позвонить врачу","TriggerAtUnixMillis":2000,"RequestedAtUnixMillis":1000}`))
|
|
request.Header.Set("Authorization", "Bearer ok")
|
|
recorder := httptest.NewRecorder()
|
|
mux.ServeHTTP(recorder, request)
|
|
if recorder.Code != http.StatusCreated || repository.saved.OwnerPrincipalID != "principal-1" || repository.saved.Summary != "позвонить врачу" || repository.saved.State != continuity.ProspectiveArmed {
|
|
t.Fatalf("status=%d saved=%#v body=%s", recorder.Code, repository.saved, recorder.Body.String())
|
|
}
|
|
}
|
|
|
|
type fakeReminderRepository struct {
|
|
saved continuity.ProspectiveItem
|
|
}
|
|
|
|
func (f *fakeReminderRepository) Save(_ context.Context, item continuity.ProspectiveItem) error {
|
|
f.saved = item
|
|
return nil
|
|
}
|