Files
encore-test/admin/admin_test.go
2026-10-06 09:55:38 +02:00

115 lines
3.9 KiB
Go

package admin
import (
"context"
"testing"
authsvc "encore.app/auth"
profilessvc "encore.app/profiles"
encoreauth "encore.dev/beta/auth"
"encore.dev/et"
"encore.dev/types/uuid"
)
func TestUpdateProfileMemberTypeBroadcasterLifecycle(t *testing.T) {
adminID, _ := uuid.NewV4()
et.OverrideAuthInfo(encoreauth.UID(adminID.String()), &authsvc.AuthData{Role: "admin"})
defer et.OverrideAuthInfo("", nil)
ctx := context.Background()
// 1. Create a test user profile (initially visitor)
testUserID, err := uuid.NewV4()
if err != nil {
t.Fatalf("failed to generate user id: %v", err)
}
_, err = profilesDB.Exec(ctx, `
INSERT INTO user_profiles (user_id, email, display_name, member_type)
VALUES ($1, $2, $3, 'visitor')
`, testUserID, "test-broadcaster-lifecycle@example.com", "Lifecycle Artist")
if err != nil {
t.Fatalf("failed to insert test profile: %v", err)
}
// 2. Change member_type to 'broadcaster' -> should create broadcaster with used=true, enabled=false
p, err := UpdateProfileMemberType(ctx, testUserID, &UpdateProfileMemberTypeParams{
MemberType: profilessvc.MemberTypeBroadcaster,
})
if err != nil {
t.Fatalf("UpdateProfileMemberType to broadcaster failed: %v", err)
}
if p.MemberType != profilessvc.MemberTypeBroadcaster {
t.Errorf("expected member_type 'broadcaster', got '%s'", p.MemberType)
}
if p.Broadcaster == nil {
t.Fatalf("expected profile.Broadcaster to be non-nil")
}
createdBroadcasterID := *p.Broadcaster
// Verify in broadcasters DB: used=true, enabled=false
var enabled, used bool
err = broadcastersDB.QueryRow(ctx, `SELECT enabled, used FROM broadcasters WHERE id = $1`, createdBroadcasterID).Scan(&enabled, &used)
if err != nil {
t.Fatalf("failed to query broadcaster: %v", err)
}
if !used {
t.Errorf("expected broadcaster.used to be true, got false")
}
if enabled {
t.Errorf("expected broadcaster.enabled to be false, got true")
}
// 3. Change member_type from 'broadcaster' to 'visitor' -> should disable broadcaster (enabled=false, used=false) and set profile.broadcaster = nil
p2, err := UpdateProfileMemberType(ctx, testUserID, &UpdateProfileMemberTypeParams{
MemberType: profilessvc.MemberTypeVisitor,
})
if err != nil {
t.Fatalf("UpdateProfileMemberType to visitor failed: %v", err)
}
if p2.MemberType != profilessvc.MemberTypeVisitor {
t.Errorf("expected member_type 'visitor', got '%s'", p2.MemberType)
}
if p2.Broadcaster != nil {
t.Errorf("expected profile.Broadcaster to be nil, got %v", p2.Broadcaster)
}
// Verify in broadcasters DB: used=false, enabled=false
err = broadcastersDB.QueryRow(ctx, `SELECT enabled, used FROM broadcasters WHERE id = $1`, createdBroadcasterID).Scan(&enabled, &used)
if err != nil {
t.Fatalf("failed to query broadcaster: %v", err)
}
if used {
t.Errorf("expected broadcaster.used to be false after type change, got true")
}
if enabled {
t.Errorf("expected broadcaster.enabled to be false after type change, got true")
}
// 4. Change back to 'broadcaster' -> should reuse existing broadcaster and set used=true, enabled=false
p3, err := UpdateProfileMemberType(ctx, testUserID, &UpdateProfileMemberTypeParams{
MemberType: profilessvc.MemberTypeBroadcaster,
})
if err != nil {
t.Fatalf("UpdateProfileMemberType back to broadcaster failed: %v", err)
}
if p3.MemberType != profilessvc.MemberTypeBroadcaster {
t.Errorf("expected member_type 'broadcaster', got '%s'", p3.MemberType)
}
if p3.Broadcaster == nil || *p3.Broadcaster != createdBroadcasterID {
t.Errorf("expected existing broadcaster ID %v, got %v", createdBroadcasterID, p3.Broadcaster)
}
err = broadcastersDB.QueryRow(ctx, `SELECT enabled, used FROM broadcasters WHERE id = $1`, createdBroadcasterID).Scan(&enabled, &used)
if err != nil {
t.Fatalf("failed to query broadcaster: %v", err)
}
if !used {
t.Errorf("expected broadcaster.used to be true on reactivation, got false")
}
if enabled {
t.Errorf("expected broadcaster.enabled to be false on reactivation, got true")
}
}