Files
2026-09-23 17:42:55 +08:00

71 lines
2.3 KiB
Go

package live
import (
"context"
"testing"
)
func TestFormatViewerCount(t *testing.T) {
tests := map[int]string{0: "0", 999: "999", 1000: "1.0k", 5600: "5.6k", 10000: "1.0w", 12500: "1.2w"}
for input, want := range tests {
if got := formatViewerCount(input); got != want {
t.Fatalf("formatViewerCount(%d) = %q, want %q", input, got, want)
}
}
}
type testRepo struct {
streams map[string]*Stream
}
func (r *testRepo) Get(_ context.Context, id string) (*Stream, error) { return r.streams[id], nil }
func (r *testRepo) List(context.Context) ([]*Stream, error) {
result := make([]*Stream, 0, len(r.streams))
for _, item := range r.streams {
result = append(result, item)
}
return result, nil
}
func (r *testRepo) RegisterPublisher(_ context.Context, id string, user uint) (*Stream, error) {
item := r.streams[id]
if item == nil {
item = &Stream{StreamID: id}
r.streams[id] = item
}
if item.PublisherOnline {
return nil, ErrPublisherExists
}
item.PublisherOnline, item.PublisherID = true, user
return item, nil
}
func (r *testRepo) UnregisterPublisher(_ context.Context, id string, user uint) error {
item := r.streams[id]
if item == nil || !item.PublisherOnline || item.PublisherID != user {
return ErrPublisherNotFound
}
item.PublisherOnline, item.PublisherID = false, 0
return nil
}
func (r *testRepo) RegisterSubscriber(context.Context, string, uint) (*Stream, error) {
return nil, nil
}
func (r *testRepo) UnregisterSubscriber(context.Context, string, uint) error { return nil }
func (r *testRepo) Like(context.Context, string) (int, error) { return 0, nil }
func TestStreamUsecaseValidatesAndDelegates(t *testing.T) {
repo := &testRepo{streams: make(map[string]*Stream)}
uc := NewStreamUsecase(repo)
if _, err := uc.RegisterPublisher(context.Background(), " ", 1); err != ErrInvalidStreamID {
t.Fatalf("invalid stream error = %v", err)
}
if _, err := uc.RegisterPublisher(context.Background(), "room-1", 1); err != nil {
t.Fatalf("register publisher error = %v", err)
}
if _, err := uc.RegisterPublisher(context.Background(), "room-1", 2); err != ErrPublisherExists {
t.Fatalf("duplicate publisher error = %v", err)
}
if err := uc.UnregisterPublisher(context.Background(), "room-1", 1); err != nil {
t.Fatalf("unregister publisher error = %v", err)
}
}