forked from GoCodeAlone/modular
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig_provider_setup_test.go
More file actions
139 lines (130 loc) · 3.98 KB
/
config_provider_setup_test.go
File metadata and controls
139 lines (130 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package modular
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)
// Test implementation of ConfigSetup
type testSetupCfg struct {
Value string `yaml:"value"`
setupCalled bool
shouldError bool
}
func (t *testSetupCfg) Setup() error {
t.setupCalled = true
if t.shouldError {
return ErrSetupFailed
}
return nil
}
func TestConfig_Feed(t *testing.T) {
t.Parallel()
tests := []struct {
name string
setupConfig func() (*Config, *MockComplexFeeder)
expectFeedErr bool
expectKeyErr bool
expectedErrMsg string
}{
{
name: "successful feed",
setupConfig: func() (*Config, *MockComplexFeeder) {
cfg := NewConfig()
feeder := new(MockComplexFeeder)
feeder.On("Feed", mock.Anything).Return(nil)
feeder.On("FeedKey", "main", mock.Anything).Return(nil)
feeder.On("FeedKey", "test", mock.Anything).Return(nil)
cfg.AddFeeder(feeder)
cfg.AddStructKey("main", &testCfg{})
cfg.AddStructKey("test", &testCfg{})
return cfg, feeder
},
expectFeedErr: false,
},
{
name: "feed error",
setupConfig: func() (*Config, *MockComplexFeeder) {
cfg := NewConfig()
feeder := new(MockComplexFeeder)
feeder.On("Feed", mock.Anything).Return(ErrFeedFailed)
cfg.AddFeeder(feeder)
cfg.AddStructKey("main", &testCfg{})
return cfg, feeder
},
expectFeedErr: true,
expectedErrMsg: "feed error",
},
{
name: "feedKey error",
setupConfig: func() (*Config, *MockComplexFeeder) {
cfg := NewConfig()
feeder := new(MockComplexFeeder)
feeder.On("Feed", mock.Anything).Return(nil)
// Due to map iteration order being random, either key could be processed first
// If "test" is processed first, it will fail and stop processing
// If "main" is processed first, it will succeed, then "test" will fail
feeder.On("FeedKey", "main", mock.Anything).Return(nil).Maybe()
feeder.On("FeedKey", "test", mock.Anything).Return(ErrFeedKeyFailed)
cfg.AddFeeder(feeder)
cfg.AddStructKey("main", &testCfg{})
cfg.AddStructKey("test", &testCfg{})
return cfg, feeder
},
expectFeedErr: true,
expectKeyErr: true,
expectedErrMsg: "feeder error",
},
{
name: "setup success",
setupConfig: func() (*Config, *MockComplexFeeder) {
cfg := NewConfig()
feeder := new(MockComplexFeeder)
feeder.On("Feed", mock.Anything).Return(nil)
feeder.On("FeedKey", "main", mock.Anything).Return(nil)
feeder.On("FeedKey", "test", mock.Anything).Return(nil)
cfg.AddFeeder(feeder)
cfg.AddStructKey("main", &testCfg{})
cfg.AddStructKey("test", &testSetupCfg{})
return cfg, feeder
},
expectFeedErr: false,
},
{
name: "setup error",
setupConfig: func() (*Config, *MockComplexFeeder) {
cfg := NewConfig()
feeder := new(MockComplexFeeder)
feeder.On("Feed", mock.Anything).Return(nil)
// Due to map iteration order being random, either key could be processed first
// If "test" is processed first, it will succeed then fail at setup
// If "main" is processed first, it will succeed, then "test" will succeed and fail at setup
feeder.On("FeedKey", "main", mock.Anything).Return(nil).Maybe()
feeder.On("FeedKey", "test", mock.Anything).Return(nil).Maybe()
cfg.AddFeeder(feeder)
cfg.AddStructKey("main", &testCfg{})
cfg.AddStructKey("test", &testSetupCfg{shouldError: true})
return cfg, feeder
},
expectFeedErr: true,
expectedErrMsg: "config setup error for test",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cfg, feeder := tt.setupConfig()
err := cfg.Feed()
if tt.expectFeedErr {
require.Error(t, err)
assert.Contains(t, err.Error(), tt.expectedErrMsg)
} else {
require.NoError(t, err)
// Check if setup was called when using testSetupCfg
if setupCfg, ok := cfg.StructKeys["test"].(*testSetupCfg); ok {
assert.True(t, setupCfg.setupCalled)
}
}
feeder.AssertExpectations(t)
})
}
}