102 lines
3.0 KiB
Go
102 lines
3.0 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"datarush/internal/user/middleware"
|
|
"datarush/internal/user/service/mocks"
|
|
pb "datarush/pkg/api/user"
|
|
|
|
"go.uber.org/mock/gomock"
|
|
"github.com/stretchr/testify/assert"
|
|
"google.golang.org/protobuf/types/known/emptypb"
|
|
)
|
|
|
|
func TestUserService(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
mockRepo := mocks.NewMockUserRepository(ctrl)
|
|
service := NewUserService(mockRepo)
|
|
|
|
ctx := context.Background()
|
|
userID := "test-user-id"
|
|
ctx = context.WithValue(ctx, middleware.UserIDKey{}, userID)
|
|
|
|
t.Run("GetProfile", func(t *testing.T) {
|
|
req := &pb.GetProfileRequest{UserId: userID}
|
|
expectedUser := &pb.User{
|
|
Id: userID,
|
|
Username: "testuser",
|
|
Email: "test@example.com",
|
|
}
|
|
|
|
mockRepo.EXPECT().GetProfile(ctx, userID).Return(expectedUser, nil)
|
|
|
|
user, err := service.GetProfile(ctx, req)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, expectedUser, user)
|
|
})
|
|
|
|
t.Run("RegisterForCompetition", func(t *testing.T) {
|
|
competitionID := "comp1"
|
|
req := &pb.RegisterForCompetitionRequest{CompetitionId: competitionID}
|
|
|
|
mockRepo.EXPECT().RegisterForCompetition(ctx, userID, competitionID).Return(nil)
|
|
|
|
_, err := service.RegisterForCompetition(ctx, req)
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("RegisterForCompetition - No UserID in context", func(t *testing.T) {
|
|
competitionID := "comp1"
|
|
req := &pb.RegisterForCompetitionRequest{CompetitionId: competitionID}
|
|
|
|
_, err := service.RegisterForCompetition(context.Background(), req)
|
|
assert.Error(t, err)
|
|
assert.Equal(t, "user ID not found in context", err.Error())
|
|
})
|
|
|
|
t.Run("UnregisterFromCompetition", func(t *testing.T) {
|
|
competitionID := "comp1"
|
|
req := &pb.UnregisterFromCompetitionRequest{CompetitionId: competitionID}
|
|
|
|
mockRepo.EXPECT().UnregisterFromCompetition(ctx, userID, competitionID).Return(nil)
|
|
|
|
_, err := service.UnregisterFromCompetition(ctx, req)
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("UnregisterFromCompetition - No UserID in context", func(t *testing.T) {
|
|
competitionID := "comp1"
|
|
req := &pb.UnregisterFromCompetitionRequest{CompetitionId: competitionID}
|
|
|
|
_, err := service.UnregisterFromCompetition(context.Background(), req)
|
|
assert.Error(t, err)
|
|
assert.Equal(t, "user ID not found in context", err.Error())
|
|
})
|
|
|
|
t.Run("ListUserCompetitions", func(t *testing.T) {
|
|
req := &pb.ListUserCompetitionsRequest{UserId: userID}
|
|
expectedCompetitionIDs := []string{"comp1", "comp2"}
|
|
|
|
mockRepo.EXPECT().ListUserCompetitions(ctx, userID).Return(expectedCompetitionIDs, nil)
|
|
|
|
resp, err := service.ListUserCompetitions(ctx, req)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, expectedCompetitionIDs, resp.CompetitionIds)
|
|
})
|
|
|
|
t.Run("ListUserCompetitions - Error", func(t *testing.T) {
|
|
req := &pb.ListUserCompetitionsRequest{UserId: userID}
|
|
expectedError := errors.New("repository error")
|
|
|
|
mockRepo.EXPECT().ListUserCompetitions(ctx, userID).Return(nil, expectedError)
|
|
|
|
_, err := service.ListUserCompetitions(ctx, req)
|
|
assert.Error(t, err)
|
|
assert.Equal(t, expectedError, err)
|
|
})
|
|
} |