144 lines
4.2 KiB
Go
144 lines
4.2 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"datarush/internal/task/service/mocks"
|
|
pb "datarush/pkg/api/task"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"go.uber.org/mock/gomock"
|
|
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
)
|
|
|
|
func TestTaskService(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
mockRepo := mocks.NewMockTaskRepository(ctrl)
|
|
service := NewTaskService(mockRepo)
|
|
|
|
ctx := context.Background()
|
|
|
|
t.Run("CreateTask", func(t *testing.T) {
|
|
task := &pb.Task{
|
|
CompetitionId: "comp1",
|
|
Title: "Test Task",
|
|
Description: "This is a test task",
|
|
InCompetitionPosition: 1,
|
|
MaxPoints: 100,
|
|
MaxAttempts: 10,
|
|
AnswerUrl: "https://example.com/answer",
|
|
Type: pb.TaskType_TASK_TYPE_INPUT,
|
|
}
|
|
|
|
mockRepo.EXPECT().CreateTask(ctx, task).Return(task, nil)
|
|
|
|
createdTask, err := service.CreateTask(ctx, task)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, task, createdTask)
|
|
})
|
|
|
|
t.Run("GetTask", func(t *testing.T) {
|
|
taskID := "task1"
|
|
req := &pb.GetTaskRequest{TaskId: taskID}
|
|
expectedTask := &pb.Task{
|
|
Id: taskID,
|
|
CompetitionId: "comp1",
|
|
Title: "Test Task",
|
|
Description: "This is a test task",
|
|
InCompetitionPosition: 1,
|
|
MaxPoints: 100,
|
|
MaxAttempts: 10,
|
|
AnswerUrl: "https://example.com/answer",
|
|
Type: pb.TaskType_TASK_TYPE_INPUT,
|
|
CreatedAt: timestamppb.Now(),
|
|
UpdatedAt: timestamppb.Now(),
|
|
}
|
|
|
|
mockRepo.EXPECT().GetTask(ctx, taskID).Return(expectedTask, nil)
|
|
|
|
task, err := service.GetTask(ctx, req)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, expectedTask, task)
|
|
})
|
|
|
|
t.Run("EditTask", func(t *testing.T) {
|
|
task := &pb.Task{
|
|
Id: "task1",
|
|
CompetitionId: "comp1",
|
|
Title: "Updated Test Task",
|
|
Description: "This is an updated test task",
|
|
InCompetitionPosition: 1,
|
|
MaxPoints: 150,
|
|
MaxAttempts: 5,
|
|
AnswerUrl: "https://example.com/answer-updated",
|
|
Type: pb.TaskType_TASK_TYPE_CHECKER,
|
|
}
|
|
|
|
mockRepo.EXPECT().EditTask(ctx, task).Return(task, nil)
|
|
|
|
updatedTask, err := service.EditTask(ctx, task)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, task, updatedTask)
|
|
})
|
|
|
|
t.Run("DeleteTask", func(t *testing.T) {
|
|
taskID := "task1"
|
|
req := &pb.DeleteTaskRequest{TaskId: taskID}
|
|
|
|
mockRepo.EXPECT().DeleteTask(ctx, taskID).Return(nil)
|
|
|
|
_, err := service.DeleteTask(ctx, req)
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("ListCompetitionTasks", func(t *testing.T) {
|
|
competitionID := "comp1"
|
|
req := &pb.ListCompetitionTasksRequest{CompetitionId: competitionID}
|
|
expectedTasks := []*pb.Task{
|
|
{Id: "task1", CompetitionId: competitionID, Title: "Task 1"},
|
|
{Id: "task2", CompetitionId: competitionID, Title: "Task 2"},
|
|
}
|
|
|
|
mockRepo.EXPECT().ListCompetitionTasks(ctx, competitionID).Return(expectedTasks, nil)
|
|
|
|
resp, err := service.ListCompetitionTasks(ctx, req)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, expectedTasks, resp.Tasks)
|
|
})
|
|
|
|
t.Run("GetTaskAttachments", func(t *testing.T) {
|
|
taskID := "task1"
|
|
showPrivate := true
|
|
req := &pb.GetTaskAttachmentsRequest{TaskId: taskID, ShowPrivate: &showPrivate}
|
|
expectedAttachments := []*pb.TaskAttachment{
|
|
{Id: "att1", FileUrl: "url1", Mountpoint: "mp1", IsPublic: true},
|
|
{Id: "att2", FileUrl: "url2", Mountpoint: "mp2", IsPublic: false},
|
|
}
|
|
|
|
mockRepo.EXPECT().GetTaskAttachments(ctx, taskID, showPrivate).Return(expectedAttachments, nil)
|
|
|
|
resp, err := service.GetTaskAttachments(ctx, req)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, expectedAttachments, resp.Attachments)
|
|
})
|
|
|
|
t.Run("GetTaskAttachments - show public only", func(t *testing.T) {
|
|
taskID := "task1"
|
|
showPrivate := false
|
|
req := &pb.GetTaskAttachmentsRequest{TaskId: taskID, ShowPrivate: &showPrivate}
|
|
expectedAttachments := []*pb.TaskAttachment{
|
|
{Id: "att1", FileUrl: "url1", Mountpoint: "mp1", IsPublic: true},
|
|
}
|
|
|
|
mockRepo.EXPECT().GetTaskAttachments(ctx, taskID, showPrivate).Return(expectedAttachments, nil)
|
|
|
|
resp, err := service.GetTaskAttachments(ctx, req)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, expectedAttachments, resp.Attachments)
|
|
})
|
|
}
|