Skip to content

Commit c79560f

Browse files
committed
add more testing
1 parent 1939eb2 commit c79560f

File tree

4 files changed

+102
-23
lines changed

4 files changed

+102
-23
lines changed

api-products/api/service/product_service_impl.go

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package service
22

33
import (
44
"github.com/aws/aws-sdk-go/aws"
5-
"github.com/aws/aws-sdk-go/aws/session"
65
"github.com/aws/aws-sdk-go/service/lambda"
6+
"github.com/aws/aws-sdk-go/service/lambda/lambdaiface"
77
"github.com/dieg0code/serverles-api-scraper/api/data/request"
88
"github.com/dieg0code/serverles-api-scraper/api/repository"
99
"github.com/dieg0code/shared/json/response"
@@ -12,6 +12,7 @@ import (
1212

1313
type ProductServiceImpl struct {
1414
ProductRepository repository.ProductRepository
15+
lambdaClient lambdaiface.LambdaAPI
1516
}
1617

1718
// GetAll implements ProductService.
@@ -64,26 +65,14 @@ func (p *ProductServiceImpl) UpdateData(updateData request.UpdateDataRequest) (b
6465
return false, nil
6566
}
6667

67-
// Crear una nueva sesión de AWS
68-
sess, err := session.NewSession(&aws.Config{
69-
Region: aws.String("sa-east-1"), // Reemplaza con tu región de AWS
70-
})
71-
if err != nil {
72-
logrus.WithError(err).Error("[ProductServiceImpl.UpdateData] Error creating AWS session")
73-
return false, err
74-
}
75-
76-
// Crear un nuevo cliente Lambda
77-
svc := lambda.New(sess)
78-
7968
// Preparar la entrada para invocar la función Lambda
8069
input := &lambda.InvokeInput{
8170
FunctionName: aws.String("scraper"),
8271
InvocationType: aws.String("Event"),
8372
}
8473

8574
// Invocar la función Lambda
86-
_, err = svc.Invoke(input)
75+
_, err := p.lambdaClient.Invoke(input)
8776
if err != nil {
8877
logrus.WithError(err).Error("[ProductServiceImpl.UpdateData] Error invoking lambda function")
8978
return false, err
@@ -92,8 +81,9 @@ func (p *ProductServiceImpl) UpdateData(updateData request.UpdateDataRequest) (b
9281
return true, nil
9382
}
9483

95-
func NewProductServiceImpl(productRepository repository.ProductRepository) ProductService {
84+
func NewProductServiceImpl(productRepository repository.ProductRepository, lambdaClient lambdaiface.LambdaAPI) ProductService {
9685
return &ProductServiceImpl{
9786
ProductRepository: productRepository,
87+
lambdaClient: lambdaClient,
9888
}
9989
}

api-products/api/service/product_service_impl_test.go

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@ package service
33
import (
44
"testing"
55

6+
"github.com/aws/aws-sdk-go/service/lambda"
7+
"github.com/dieg0code/serverles-api-scraper/api/data/request"
68
"github.com/dieg0code/shared/json/response"
79
"github.com/dieg0code/shared/mocks"
810
"github.com/dieg0code/shared/models"
911
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/mock"
1013
)
1114

1215
func TestPoductService_GetAll(t *testing.T) {
1316
t.Run("GetAll_Success", func(t *testing.T) {
1417
mockRepo := new(mocks.MockProductRepository)
15-
productService := NewProductServiceImpl(mockRepo)
18+
mockLambdaClient := new(mocks.MockLambdaClient)
19+
productService := NewProductServiceImpl(mockRepo, mockLambdaClient)
1620

1721
expectedProducts := []response.ProductResponse{
1822
{
@@ -58,7 +62,8 @@ func TestPoductService_GetAll(t *testing.T) {
5862

5963
t.Run("GetAll_Error", func(t *testing.T) {
6064
mockRepo := new(mocks.MockProductRepository)
61-
productService := NewProductServiceImpl(mockRepo)
65+
mockLambdaClient := new(mocks.MockLambdaClient)
66+
productService := NewProductServiceImpl(mockRepo, mockLambdaClient)
6267

6368
mockRepo.On("GetAll").Return([]models.Product{}, assert.AnError)
6469

@@ -73,7 +78,8 @@ func TestPoductService_GetAll(t *testing.T) {
7378
func TestPoductService_GetByID(t *testing.T) {
7479
t.Run("GetByID_Success", func(t *testing.T) {
7580
mockRepo := new(mocks.MockProductRepository)
76-
productService := NewProductServiceImpl(mockRepo)
81+
mockLambdaClient := new(mocks.MockLambdaClient)
82+
productService := NewProductServiceImpl(mockRepo, mockLambdaClient)
7783

7884
expectedProduct := response.ProductResponse{
7985
ProductID: "test-id",
@@ -101,7 +107,8 @@ func TestPoductService_GetByID(t *testing.T) {
101107

102108
t.Run("GetByID_Error", func(t *testing.T) {
103109
mockRepo := new(mocks.MockProductRepository)
104-
productService := NewProductServiceImpl(mockRepo)
110+
mockLambdaClient := new(mocks.MockLambdaClient)
111+
productService := NewProductServiceImpl(mockRepo, mockLambdaClient)
105112

106113
mockRepo.On("GetByID", "test-id").Return(models.Product{}, assert.AnError)
107114

@@ -111,3 +118,58 @@ func TestPoductService_GetByID(t *testing.T) {
111118
assert.Equal(t, response.ProductResponse{}, product, "Expected product to be empty")
112119
})
113120
}
121+
122+
func TestPoductService_UpdateData(t *testing.T) {
123+
t.Run("UpdateData_Success", func(t *testing.T) {
124+
mockRepo := new(mocks.MockProductRepository)
125+
mockLambdaClient := new(mocks.MockLambdaClient)
126+
productService := NewProductServiceImpl(mockRepo, mockLambdaClient)
127+
128+
updateReq := request.UpdateDataRequest{
129+
UpdateData: true,
130+
}
131+
132+
mockLambdaClient.On("Invoke", mock.Anything).Return(&lambda.InvokeOutput{}, nil)
133+
134+
success, err := productService.UpdateData(updateReq)
135+
136+
assert.NoError(t, err, "Expected no error, UpdateData() returned an error")
137+
assert.True(t, success, "Expected success to be true")
138+
139+
mockLambdaClient.AssertExpectations(t)
140+
})
141+
142+
t.Run("UpdateData_InvokeError", func(t *testing.T) {
143+
mockRepo := new(mocks.MockProductRepository)
144+
mockLambdaClient := new(mocks.MockLambdaClient)
145+
productService := NewProductServiceImpl(mockRepo, mockLambdaClient)
146+
147+
updateReq := request.UpdateDataRequest{
148+
UpdateData: true,
149+
}
150+
151+
mockLambdaClient.On("Invoke", mock.Anything).Return(&lambda.InvokeOutput{}, assert.AnError)
152+
153+
success, err := productService.UpdateData(updateReq)
154+
155+
assert.Error(t, err, "Expected error invoking lambda function")
156+
assert.False(t, success, "Expected success to be false")
157+
158+
mockLambdaClient.AssertExpectations(t)
159+
})
160+
161+
t.Run("UpdateData_NoUpdate", func(t *testing.T) {
162+
mockRepo := new(mocks.MockProductRepository)
163+
mockLambdaClient := new(mocks.MockLambdaClient)
164+
productService := NewProductServiceImpl(mockRepo, mockLambdaClient)
165+
166+
updateReq := request.UpdateDataRequest{
167+
UpdateData: false,
168+
}
169+
170+
success, err := productService.UpdateData(updateReq)
171+
172+
assert.NoError(t, err, "Expected no error, UpdateData() returned an error")
173+
assert.False(t, success, "Expected success to be false")
174+
})
175+
}

api-products/main.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import (
55

66
"github.com/aws/aws-lambda-go/events"
77
"github.com/aws/aws-lambda-go/lambda"
8+
"github.com/aws/aws-sdk-go/aws"
9+
"github.com/aws/aws-sdk-go/aws/session"
10+
lambdaClient "github.com/aws/aws-sdk-go/service/lambda"
811
"github.com/dieg0code/serverles-api-scraper/api/controller"
912
"github.com/dieg0code/serverles-api-scraper/api/repository"
1013
"github.com/dieg0code/serverles-api-scraper/api/router"
@@ -27,12 +30,19 @@ func init() {
2730
// Instance repository
2831
productRepo := repository.NewProductRepositoryImpl(db, tableName)
2932

30-
// Instance colly and scraper
31-
// collector := colly.NewCollector()
32-
// scraper := utils.NewScraperImpl(collector)
33+
// Crear una nueva sesión de AWS
34+
sess, err := session.NewSession(&aws.Config{
35+
Region: aws.String(region),
36+
})
37+
if err != nil {
38+
logrus.WithError(err).Error("[ProductServiceImpl.UpdateData] Error creating AWS session")
39+
}
40+
41+
// Crear un nuevo cliente Lambda
42+
lambdaClient := lambdaClient.New(sess)
3343

3444
// Instance service
35-
productService := service.NewProductServiceImpl(productRepo)
45+
productService := service.NewProductServiceImpl(productRepo, lambdaClient)
3646

3747
// Instance controller
3848
productController := controller.NewProductControllerImpl(productService)

shared/mocks/mock_lambda_client.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package mocks
2+
3+
import (
4+
"github.com/aws/aws-sdk-go/service/lambda"
5+
"github.com/aws/aws-sdk-go/service/lambda/lambdaiface"
6+
"github.com/stretchr/testify/mock"
7+
)
8+
9+
type MockLambdaClient struct {
10+
lambdaiface.LambdaAPI
11+
mock.Mock
12+
}
13+
14+
func (m *MockLambdaClient) Invoke(input *lambda.InvokeInput) (*lambda.InvokeOutput, error) {
15+
args := m.Called(input)
16+
return args.Get(0).(*lambda.InvokeOutput), args.Error(1)
17+
}

0 commit comments

Comments
 (0)