erationError_Error   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 12
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 10
nop 0
dl 0
loc 12
rs 9.9
c 0
b 0
f 0
1
package data
2
3
import (
4
	"context"
5
	"errors"
6
	"testing"
7
8
	"github.com/getkin/kin-openapi/openapi3"
9
	"github.com/stretchr/testify/mock"
10
	"github.com/stretchr/testify/suite"
11
)
12
13
type UniqueArrayGeneratorSuite struct {
14
	suite.Suite
15
16
	lengthGenerator *mockArrayLengthGenerator
17
	schemaGenerator *mockSchemaGenerator
18
19
	generator *uniqueArrayGenerator
20
}
21
22
func (suite *UniqueArrayGeneratorSuite) SetupTest() {
23
	suite.lengthGenerator = &mockArrayLengthGenerator{}
24
	suite.schemaGenerator = &mockSchemaGenerator{}
25
26
	suite.generator = &uniqueArrayGenerator{
27
		lengthGenerator: suite.lengthGenerator,
28
		schemaGenerator: suite.schemaGenerator,
29
	}
30
}
31
32
func TestUniqueArrayGeneratorSuite(t *testing.T) {
33
	suite.Run(t, new(UniqueArrayGeneratorSuite))
34
}
35
36
func (suite *UniqueArrayGeneratorSuite) TestGenerateDataBySchema_ZeroLength_EmptySlice() {
37
	schema := openapi3.NewSchema()
38
	suite.lengthGenerator.On("GenerateLength", uint64(0), uint64(0)).Return(uint64(0), uint64(0)).Once()
39
40
	data, err := suite.generator.GenerateDataBySchema(context.Background(), schema)
41
42
	suite.assertExpectations()
43
	suite.NoError(err)
44
	suite.Len(data, 0)
45
}
46
47
func (suite *UniqueArrayGeneratorSuite) TestGenerateDataBySchema_OneElementLengthAndGeneratedValue_SliceWithOneValue() {
48
	itemsSchema := openapi3.NewSchema()
49
	schema := openapi3.NewSchema()
50
	schema.Items = openapi3.NewSchemaRef("", itemsSchema)
51
	suite.lengthGenerator.On("GenerateLength", uint64(0), uint64(0)).Return(uint64(1), uint64(0)).Once()
52
	suite.schemaGenerator.On("GenerateDataBySchema", mock.Anything, itemsSchema).Return("data", nil).Once()
53
54
	data, err := suite.generator.GenerateDataBySchema(context.Background(), schema)
55
56
	suite.assertExpectations()
57
	suite.NoError(err)
58
	suite.Len(data, 1)
59
	suite.Equal("data", data.([]interface{})[0])
60
}
61
62
func (suite *UniqueArrayGeneratorSuite) TestGenerateDataBySchema_LengthIs2AndMinLengthIs1AndCannotGenerateSecondUniqueValue_SliceWithOneValue() {
63
	itemsSchema := openapi3.NewSchema()
64
	schema := openapi3.NewSchema()
65
	schema.Items = openapi3.NewSchemaRef("", itemsSchema)
66
	suite.lengthGenerator.On("GenerateLength", uint64(0), uint64(0)).Return(uint64(2), uint64(1)).Once()
67
	suite.schemaGenerator.On("GenerateDataBySchema", mock.Anything, itemsSchema).Return("data", nil)
68
69
	data, err := suite.generator.GenerateDataBySchema(context.Background(), schema)
70
71
	suite.assertExpectations()
72
	suite.NoError(err)
73
	suite.Len(data, 1)
74
	suite.Equal("data", data.([]interface{})[0])
75
}
76
77
func (suite *UniqueArrayGeneratorSuite) TestGenerateDataBySchema_LengthIs2AndMinLengthIs2AndCannotGenerateSecondUniqueValue_Error() {
78
	itemsSchema := openapi3.NewSchema()
79
	schema := openapi3.NewSchema()
80
	schema.Items = openapi3.NewSchemaRef("", itemsSchema)
81
	suite.lengthGenerator.On("GenerateLength", uint64(0), uint64(0)).Return(uint64(2), uint64(2)).Once()
82
	suite.schemaGenerator.On("GenerateDataBySchema", mock.Anything, itemsSchema).Return("data", nil)
83
84
	data, err := suite.generator.GenerateDataBySchema(context.Background(), schema)
85
86
	suite.assertExpectations()
87
	suite.EqualError(err, "[uniqueArrayGenerator] failed to generate array with unique values: [uniqueValueGenerator] failed to generate unique value: attempts limit exceeded")
88
	suite.True(errors.Is(err, errAttemptsLimitExceeded))
89
	suite.Len(data, 1)
90
	suite.Equal("data", data.([]interface{})[0])
91
}
92
93
func (suite *UniqueArrayGeneratorSuite) TestGenerateDataBySchema_GenerationError_Error() {
94
	itemsSchema := openapi3.NewSchema()
95
	schema := openapi3.NewSchema()
96
	schema.Items = openapi3.NewSchemaRef("", itemsSchema)
97
	suite.lengthGenerator.On("GenerateLength", uint64(0), uint64(0)).Return(uint64(1), uint64(0)).Once()
98
	suite.schemaGenerator.On("GenerateDataBySchema", mock.Anything, itemsSchema).Return(nil, errors.New("error")).Once()
99
100
	data, err := suite.generator.GenerateDataBySchema(context.Background(), schema)
101
102
	suite.assertExpectations()
103
	suite.EqualError(err, "[uniqueArrayGenerator] failed to generate array with unique values: [uniqueValueGenerator] failed to generate value: error")
104
	suite.Len(data, 0)
105
}
106
107
func (suite *UniqueArrayGeneratorSuite) assertExpectations() {
108
	suite.lengthGenerator.AssertExpectations(suite.T())
109
	suite.schemaGenerator.AssertExpectations(suite.T())
110
}
111