add task service
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
// Code generated by MockGen. DO NOT EDIT.
|
||||
// Source: internal/task/service/service.go
|
||||
//
|
||||
// Generated by this command:
|
||||
//
|
||||
// mockgen -source=internal/task/service/service.go -destination=internal/task/service/mocks/mock_repository.go -package=mocks
|
||||
//
|
||||
|
||||
// Package mocks is a generated GoMock package.
|
||||
package mocks
|
||||
|
||||
import (
|
||||
context "context"
|
||||
task "datarush/pkg/api/task"
|
||||
reflect "reflect"
|
||||
|
||||
gomock "go.uber.org/mock/gomock"
|
||||
)
|
||||
|
||||
// MockTaskRepository is a mock of TaskRepository interface.
|
||||
type MockTaskRepository struct {
|
||||
ctrl *gomock.Controller
|
||||
recorder *MockTaskRepositoryMockRecorder
|
||||
isgomock struct{}
|
||||
}
|
||||
|
||||
// MockTaskRepositoryMockRecorder is the mock recorder for MockTaskRepository.
|
||||
type MockTaskRepositoryMockRecorder struct {
|
||||
mock *MockTaskRepository
|
||||
}
|
||||
|
||||
// NewMockTaskRepository creates a new mock instance.
|
||||
func NewMockTaskRepository(ctrl *gomock.Controller) *MockTaskRepository {
|
||||
mock := &MockTaskRepository{ctrl: ctrl}
|
||||
mock.recorder = &MockTaskRepositoryMockRecorder{mock}
|
||||
return mock
|
||||
}
|
||||
|
||||
// EXPECT returns an object that allows the caller to indicate expected use.
|
||||
func (m *MockTaskRepository) EXPECT() *MockTaskRepositoryMockRecorder {
|
||||
return m.recorder
|
||||
}
|
||||
|
||||
// CreateTask mocks base method.
|
||||
func (m *MockTaskRepository) CreateTask(ctx context.Context, t *task.Task) (*task.Task, error) {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "CreateTask", ctx, t)
|
||||
ret0, _ := ret[0].(*task.Task)
|
||||
ret1, _ := ret[1].(error)
|
||||
return ret0, ret1
|
||||
}
|
||||
|
||||
// CreateTask indicates an expected call of CreateTask.
|
||||
func (mr *MockTaskRepositoryMockRecorder) CreateTask(ctx, t any) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateTask", reflect.TypeOf((*MockTaskRepository)(nil).CreateTask), ctx, t)
|
||||
}
|
||||
|
||||
// DeleteTask mocks base method.
|
||||
func (m *MockTaskRepository) DeleteTask(ctx context.Context, id string) error {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "DeleteTask", ctx, id)
|
||||
ret0, _ := ret[0].(error)
|
||||
return ret0
|
||||
}
|
||||
|
||||
// DeleteTask indicates an expected call of DeleteTask.
|
||||
func (mr *MockTaskRepositoryMockRecorder) DeleteTask(ctx, id any) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteTask", reflect.TypeOf((*MockTaskRepository)(nil).DeleteTask), ctx, id)
|
||||
}
|
||||
|
||||
// EditTask mocks base method.
|
||||
func (m *MockTaskRepository) EditTask(ctx context.Context, t *task.Task) (*task.Task, error) {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "EditTask", ctx, t)
|
||||
ret0, _ := ret[0].(*task.Task)
|
||||
ret1, _ := ret[1].(error)
|
||||
return ret0, ret1
|
||||
}
|
||||
|
||||
// EditTask indicates an expected call of EditTask.
|
||||
func (mr *MockTaskRepositoryMockRecorder) EditTask(ctx, t any) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EditTask", reflect.TypeOf((*MockTaskRepository)(nil).EditTask), ctx, t)
|
||||
}
|
||||
|
||||
// GetTask mocks base method.
|
||||
func (m *MockTaskRepository) GetTask(ctx context.Context, id string) (*task.Task, error) {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "GetTask", ctx, id)
|
||||
ret0, _ := ret[0].(*task.Task)
|
||||
ret1, _ := ret[1].(error)
|
||||
return ret0, ret1
|
||||
}
|
||||
|
||||
// GetTask indicates an expected call of GetTask.
|
||||
func (mr *MockTaskRepositoryMockRecorder) GetTask(ctx, id any) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTask", reflect.TypeOf((*MockTaskRepository)(nil).GetTask), ctx, id)
|
||||
}
|
||||
|
||||
// GetTaskAttachments mocks base method.
|
||||
func (m *MockTaskRepository) GetTaskAttachments(ctx context.Context, taskID string, showPrivate bool) ([]*task.TaskAttachment, error) {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "GetTaskAttachments", ctx, taskID, showPrivate)
|
||||
ret0, _ := ret[0].([]*task.TaskAttachment)
|
||||
ret1, _ := ret[1].(error)
|
||||
return ret0, ret1
|
||||
}
|
||||
|
||||
// GetTaskAttachments indicates an expected call of GetTaskAttachments.
|
||||
func (mr *MockTaskRepositoryMockRecorder) GetTaskAttachments(ctx, taskID, showPrivate any) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTaskAttachments", reflect.TypeOf((*MockTaskRepository)(nil).GetTaskAttachments), ctx, taskID, showPrivate)
|
||||
}
|
||||
|
||||
// ListCompetitionTasks mocks base method.
|
||||
func (m *MockTaskRepository) ListCompetitionTasks(ctx context.Context, competitionID string) ([]*task.Task, error) {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "ListCompetitionTasks", ctx, competitionID)
|
||||
ret0, _ := ret[0].([]*task.Task)
|
||||
ret1, _ := ret[1].(error)
|
||||
return ret0, ret1
|
||||
}
|
||||
|
||||
// ListCompetitionTasks indicates an expected call of ListCompetitionTasks.
|
||||
func (mr *MockTaskRepositoryMockRecorder) ListCompetitionTasks(ctx, competitionID any) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListCompetitionTasks", reflect.TypeOf((*MockTaskRepository)(nil).ListCompetitionTasks), ctx, competitionID)
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
pb "datarush/pkg/api/task"
|
||||
|
||||
"google.golang.org/protobuf/types/known/emptypb"
|
||||
)
|
||||
|
||||
type TaskRepository interface {
|
||||
CreateTask(ctx context.Context, t *pb.Task) (*pb.Task, error)
|
||||
GetTask(ctx context.Context, id string) (*pb.Task, error)
|
||||
EditTask(ctx context.Context, t *pb.Task) (*pb.Task, error)
|
||||
DeleteTask(ctx context.Context, id string) error
|
||||
ListCompetitionTasks(ctx context.Context, competitionID string) ([]*pb.Task, error)
|
||||
GetTaskAttachments(ctx context.Context, taskID string, showPrivate bool) ([]*pb.TaskAttachment, error)
|
||||
}
|
||||
|
||||
type TaskService struct {
|
||||
repo TaskRepository
|
||||
}
|
||||
|
||||
func NewTaskService(repo TaskRepository) *TaskService {
|
||||
return &TaskService{repo: repo}
|
||||
}
|
||||
|
||||
func (s *TaskService) CreateTask(ctx context.Context, req *pb.Task) (*pb.Task, error) {
|
||||
return s.repo.CreateTask(ctx, req)
|
||||
}
|
||||
|
||||
func (s *TaskService) GetTask(ctx context.Context, req *pb.GetTaskRequest) (*pb.Task, error) {
|
||||
return s.repo.GetTask(ctx, req.TaskId)
|
||||
}
|
||||
|
||||
func (s *TaskService) EditTask(ctx context.Context, req *pb.Task) (*pb.Task, error) {
|
||||
return s.repo.EditTask(ctx, req)
|
||||
}
|
||||
|
||||
func (s *TaskService) DeleteTask(ctx context.Context, req *pb.DeleteTaskRequest) (*emptypb.Empty, error) {
|
||||
err := s.repo.DeleteTask(ctx, req.TaskId)
|
||||
return &emptypb.Empty{}, err
|
||||
}
|
||||
|
||||
func (s *TaskService) ListCompetitionTasks(ctx context.Context, req *pb.ListCompetitionTasksRequest) (*pb.ListCompetitionTasksResponse, error) {
|
||||
tasks, err := s.repo.ListCompetitionTasks(ctx, req.CompetitionId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.ListCompetitionTasksResponse{Tasks: tasks}, nil
|
||||
}
|
||||
|
||||
func (s *TaskService) GetTaskAttachments(ctx context.Context, req *pb.GetTaskAttachmentsRequest) (*pb.GetTaskAttachmentsResponse, error) {
|
||||
showPrivate := false
|
||||
if req.ShowPrivate != nil {
|
||||
showPrivate = *req.ShowPrivate
|
||||
}
|
||||
attachments, err := s.repo.GetTaskAttachments(ctx, req.TaskId, showPrivate)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.GetTaskAttachmentsResponse{Attachments: attachments}, nil
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"datarush/internal/task/service/mocks"
|
||||
pb "datarush/pkg/api/task"
|
||||
|
||||
"go.uber.org/mock/gomock"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"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,
|
||||
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,
|
||||
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,
|
||||
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", IsPublic: true},
|
||||
{Id: "att2", FileUrl: "url2", 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", 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)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user