71 lines
2.3 KiB
Go
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)
|
|
}
|
|
}
|