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 }