Files
tutti/services/tuttid/api/daemon_user_presence_test.go
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

57 lines
2.1 KiB
Go

package api
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"strings"
"testing"
tuttigenerated "github.com/tutti-os/tutti/services/tuttid/api/generated"
userpresenceservice "github.com/tutti-os/tutti/services/tuttid/service/userpresence"
)
type userPresenceServiceStub struct {
visited userpresenceservice.VisitRoomInput
}
func (stub *userPresenceServiceStub) VisitRoom(_ context.Context, input userpresenceservice.VisitRoomInput) (userpresenceservice.RoomPresenceSnapshot, error) {
stub.visited = input
return userpresenceservice.RoomPresenceSnapshot{RoomID: input.RoomID, Members: []userpresenceservice.PresenceView{{
UserID: "user-2", Status: userpresenceservice.StatusOnline,
Availability: userpresenceservice.AvailabilityReady, Authoritative: true,
AuthorityGeneration: "authority-1", PresenceRevision: "4",
}}}, nil
}
func (*userPresenceServiceStub) RoomSnapshot(roomID string) userpresenceservice.RoomPresenceSnapshot {
return userpresenceservice.RoomPresenceSnapshot{RoomID: roomID}
}
func (*userPresenceServiceStub) SetForeground(bool) {}
func TestAccountUserPresenceCurrentRoomRoute(t *testing.T) {
service := &userPresenceServiceStub{}
mux := http.NewServeMux()
RegisterRoutes(mux, NewRoutes(DaemonAPI{UserPresenceService: service}))
request := httptest.NewRequest(http.MethodPut, "/v1/account/user-presence/current-room", strings.NewReader(`{
"roomId":"room-1",
"members":[{"userId":"user-2","membershipActive":true,"accountPresenceCapable":true}]
}`))
request.Header.Set("Content-Type", "application/json")
response := httptest.NewRecorder()
mux.ServeHTTP(response, request)
if response.Code != http.StatusOK {
t.Fatalf("status = %d body=%s", response.Code, response.Body.String())
}
var body tuttigenerated.AccountUserPresenceRoomResponse
if err := json.Unmarshal(response.Body.Bytes(), &body); err != nil {
t.Fatal(err)
}
if service.visited.RoomID != "room-1" || len(service.visited.Members) != 1 || len(body.Members) != 1 ||
body.Members[0].Status != tuttigenerated.ONLINE || !body.Members[0].Authoritative {
t.Fatalf("visit=%#v response=%#v", service.visited, body)
}
}