Skip to content

Commit

Permalink
feat: add unit test codes to image registry package (#3967)
Browse files Browse the repository at this point in the history
Signed-off-by: namkyu1999 <lak9348@konkuk.ac.kr>
  • Loading branch information
namkyu1999 committed May 15, 2023
1 parent c25df55 commit 4cecb9f
Showing 1 changed file with 259 additions and 0 deletions.
259 changes: 259 additions & 0 deletions litmus-portal/graphql-server/pkg/image_registry/service_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,259 @@
// Package image_registry_test contains tests for the image_registry package.
package image_registry_test

import (
"context"
"errors"
"strconv"
"testing"

"github.com/google/uuid"
"github.com/litmuschaos/litmus/litmus-portal/graphql-server/graph/model"
"github.com/litmuschaos/litmus/litmus-portal/graphql-server/pkg/database/mongodb"
dbOperationsImageRegistry "github.com/litmuschaos/litmus/litmus-portal/graphql-server/pkg/database/mongodb/image_registry"
mongodbMocks "github.com/litmuschaos/litmus/litmus-portal/graphql-server/pkg/database/mongodb/model/mocks"
"github.com/litmuschaos/litmus/litmus-portal/graphql-server/pkg/image_registry"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
)

var (
mongoOperator = new(mongodbMocks.MongoOperator)
imageRegistryOperator = dbOperationsImageRegistry.NewImageRegistryOperator(mongoOperator)
imageRegistryService = image_registry.NewService(imageRegistryOperator)
)

// TestImageRegistryService_CreateImageRegistry tests the CreateImageRegistry method of imageRegistryService
func TestImageRegistryService_CreateImageRegistry(t *testing.T) {
// given
ctx := context.Background()
projectID := uuid.NewString()
imageRegistryInfo := model.ImageRegistryInput{
ImageRegistryName: uuid.NewString(),
ImageRepoName: uuid.NewString(),
ImageRegistryType: uuid.NewString(),
IsDefault: true,
}
testcases := []struct {
name string
given func()
wantErr bool
}{
{
name: "success",
given: func() {
mongoOperator.On("Create", mock.Anything, mongodb.ImageRegistryCollection, mock.Anything).Return(nil).Once()
},
},
{
name: "failure: mongo create error",
given: func() {
mongoOperator.On("Create", mock.Anything, mongodb.ImageRegistryCollection, mock.Anything).Return(errors.New("")).Once()
},
wantErr: true,
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
// given
tc.given()
// when
result, err := imageRegistryService.CreateImageRegistry(ctx, projectID, imageRegistryInfo)
// then
if tc.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, imageRegistryInfo.ImageRegistryName, result.ImageRegistryInfo.ImageRegistryName)
assert.Equal(t, imageRegistryInfo.ImageRepoName, result.ImageRegistryInfo.ImageRepoName)
assert.Equal(t, imageRegistryInfo.ImageRegistryType, result.ImageRegistryInfo.ImageRegistryType)
assert.Equal(t, projectID, result.ProjectID)
}
})
}
}

// TestImageRegistryService_UpdateImageRegistry tests the UpdateImageRegistry method of imageRegistryService
func TestImageRegistryService_UpdateImageRegistry(t *testing.T) {
// given
ctx := context.Background()
projectID, imageRegistryID := uuid.NewString(), uuid.NewString()
imageRegistryInfo := model.ImageRegistryInput{
ImageRegistryName: uuid.NewString(),
ImageRepoName: uuid.NewString(),
ImageRegistryType: uuid.NewString(),
IsDefault: true,
}
testcases := []struct {
name string
given func()
wantErr bool
}{
{
name: "success",
given: func() {
mongoOperator.On("Update", mock.Anything, mongodb.ImageRegistryCollection, mock.Anything, mock.Anything, mock.Anything).Return(&mongo.UpdateResult{MatchedCount: 1}, nil).Once()
},
},
{
name: "failure: mongo update error",
given: func() {
mongoOperator.On("Update", mock.Anything, mongodb.ImageRegistryCollection, mock.Anything, mock.Anything, mock.Anything).Return(&mongo.UpdateResult{MatchedCount: 0}, errors.New("")).Once()
},
wantErr: true,
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
// given
tc.given()
// when
result, err := imageRegistryService.UpdateImageRegistry(ctx, imageRegistryID, projectID, imageRegistryInfo)
// then
if tc.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, imageRegistryInfo.ImageRegistryName, result.ImageRegistryInfo.ImageRegistryName)
assert.Equal(t, imageRegistryInfo.ImageRepoName, result.ImageRegistryInfo.ImageRepoName)
assert.Equal(t, imageRegistryInfo.ImageRegistryType, result.ImageRegistryInfo.ImageRegistryType)
assert.Equal(t, projectID, result.ProjectID)
}
})
}
}

// TestImageRegistryService_DeleteImageRegistry tests the DeleteImageRegistry method of imageRegistryService
func TestImageRegistryService_DeleteImageRegistry(t *testing.T) {
// given
ctx := context.Background()
projectID, imageRegistryID := uuid.NewString(), uuid.NewString()
testcases := []struct {
name string
given func()
wantErr bool
}{
{
name: "success",
given: func() {
mongoOperator.On("Update", mock.Anything, mongodb.ImageRegistryCollection, mock.Anything, mock.Anything, mock.Anything).Return(&mongo.UpdateResult{MatchedCount: 1}, nil).Once()
},
},
{
name: "failure: mongo delete error",
given: func() {
mongoOperator.On("Update", mock.Anything, mongodb.ImageRegistryCollection, mock.Anything, mock.Anything, mock.Anything).Return(&mongo.UpdateResult{MatchedCount: 0}, errors.New("")).Once()
},
wantErr: true,
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
// given
tc.given()
// when
_, err := imageRegistryService.DeleteImageRegistry(ctx, imageRegistryID, projectID)
// then
if tc.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}

// TestImageRegistryService_GetImageRegistry tests the GetImageRegistry method of imageRegistryService
func TestImageRegistryService_GetImageRegistry(t *testing.T) {
// given
ctx := context.Background()
projectID, imageRegistryID := uuid.NewString(), uuid.NewString()
testcases := []struct {
name string
given func()
wantErr bool
}{
{
name: "success",
given: func() {
findResult := bson.D{{"image_registry_id", imageRegistryID}, {"project_id", projectID}}
singleResult := mongo.NewSingleResultFromDocument(findResult, nil, nil)
mongoOperator.On("Get", mock.Anything, mongodb.ImageRegistryCollection, mock.Anything).Return(singleResult, nil).Once()
},
},
{
name: "failure: mongo get error",
given: func() {
singleResult := mongo.NewSingleResultFromDocument(nil, nil, nil)
mongoOperator.On("Get", mock.Anything, mongodb.ImageRegistryCollection, mock.Anything).Return(singleResult, errors.New("")).Once()
},
wantErr: true,
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
// given
tc.given()
// when
_, err := imageRegistryService.GetImageRegistry(ctx, imageRegistryID, projectID)
// then
if tc.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}

// TestImageRegistryService_ListImageRegistries tests the ListImageRegistries method of imageRegistryService
func TestImageRegistryService_ListImageRegistries(t *testing.T) {
// given
ctx := context.Background()
projectID, imageRegistryID := uuid.NewString(), uuid.NewString()
testcases := []struct {
name string
given func()
wantErr bool
}{
{
name: "success",
given: func() {
imageRegistries := make([]interface{}, 10)
for i := 0; i < 10; i++ {
imageRegistries[i] = dbOperationsImageRegistry.ImageRegistry{ImageRegistryID: imageRegistryID + strconv.Itoa(i), ProjectID: projectID}
}
cursor, _ := mongo.NewCursorFromDocuments(imageRegistries, nil, nil)
mongoOperator.On("List", mock.Anything, mongodb.ImageRegistryCollection, mock.Anything).Return(cursor, nil).Once()
},
},
{
name: "failure: mongo list error",
given: func() {
cursor, _ := mongo.NewCursorFromDocuments(nil, nil, nil)
mongoOperator.On("List", mock.Anything, mongodb.ImageRegistryCollection, mock.Anything).Return(cursor, errors.New("")).Once()
},
wantErr: true,
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
// given
tc.given()
// when
result, err := imageRegistryService.ListImageRegistries(ctx, projectID)
// then
if tc.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
for i, imageRegistry := range result {
assert.Equal(t, projectID, imageRegistry.ProjectID)
assert.Equal(t, imageRegistryID+strconv.Itoa(i), imageRegistry.ImageRegistryID)
}
}
})
}
}

0 comments on commit 4cecb9f

Please sign in to comment.