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) } }