87 lines
2.9 KiB
Go
87 lines
2.9 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"telesrv/internal/identity"
|
|
)
|
|
|
|
func TestServerIdentityAPIReportsOverridesAndDefaultsSeparately(t *testing.T) {
|
|
store := identity.NewStore(t.TempDir())
|
|
srv := &server{
|
|
cfg: uiConfig{
|
|
WelcomeMessagePhoneDefault: "env phone default",
|
|
WelcomeMessageEmailDefault: "env email default",
|
|
},
|
|
identity: store,
|
|
}
|
|
|
|
// Before any override: GET must report empty raw fields (so the UI can
|
|
// tell "unset" apart from "explicitly set to the same text as the
|
|
// default"), alongside the effective default text.
|
|
req := httptest.NewRequest(http.MethodGet, "/api/server/identity", nil)
|
|
rec := httptest.NewRecorder()
|
|
srv.handleServerIdentityAPI(rec, req)
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("GET status = %d, body = %s", rec.Code, rec.Body.String())
|
|
}
|
|
var resp serverIdentityAPIResponse
|
|
if err := json.Unmarshal(rec.Body.Bytes(), &resp); err != nil {
|
|
t.Fatalf("decode: %v", err)
|
|
}
|
|
if resp.WelcomeMessagePhoneTemplate != "" || resp.WelcomeMessageEmailTemplate != "" {
|
|
t.Fatalf("expected empty overrides before any Set, got %+v", resp)
|
|
}
|
|
if resp.DefaultWelcomeMessagePhoneTemplate != "env phone default" || resp.DefaultWelcomeMessageEmailTemplate != "env email default" {
|
|
t.Fatalf("expected effective defaults from cfg, got %+v", resp)
|
|
}
|
|
|
|
// Set an override for phone only.
|
|
setReq := httptest.NewRequest(http.MethodPost, "/api/actions/set-welcome-message-templates", strings.NewReader(`{
|
|
"reason": "test",
|
|
"confirm": true,
|
|
"phone_template": "custom phone template"
|
|
}`))
|
|
setRec := httptest.NewRecorder()
|
|
srv.handleSetWelcomeMessageTemplatesAPI(setRec, setReq)
|
|
if setRec.Code != http.StatusOK {
|
|
t.Fatalf("SET status = %d, body = %s", setRec.Code, setRec.Body.String())
|
|
}
|
|
|
|
req2 := httptest.NewRequest(http.MethodGet, "/api/server/identity", nil)
|
|
rec2 := httptest.NewRecorder()
|
|
srv.handleServerIdentityAPI(rec2, req2)
|
|
var resp2 serverIdentityAPIResponse
|
|
if err := json.Unmarshal(rec2.Body.Bytes(), &resp2); err != nil {
|
|
t.Fatalf("decode: %v", err)
|
|
}
|
|
if resp2.WelcomeMessagePhoneTemplate != "custom phone template" {
|
|
t.Fatalf("expected phone override to be set, got %+v", resp2)
|
|
}
|
|
if resp2.WelcomeMessageEmailTemplate != "" {
|
|
t.Fatalf("expected email override to stay unset, got %+v", resp2)
|
|
}
|
|
|
|
// Reset (empty string) clears the override back to "unset".
|
|
resetReq := httptest.NewRequest(http.MethodPost, "/api/actions/set-welcome-message-templates", strings.NewReader(`{
|
|
"reason": "test",
|
|
"confirm": true,
|
|
"phone_template": ""
|
|
}`))
|
|
resetRec := httptest.NewRecorder()
|
|
srv.handleSetWelcomeMessageTemplatesAPI(resetRec, resetReq)
|
|
if resetRec.Code != http.StatusOK {
|
|
t.Fatalf("reset status = %d, body = %s", resetRec.Code, resetRec.Body.String())
|
|
}
|
|
info, err := store.Get()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if info.WelcomeMessagePhoneTemplate != "" {
|
|
t.Fatalf("expected phone override cleared after reset, got %+v", info)
|
|
}
|
|
}
|