-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathoption_test.go
More file actions
121 lines (107 loc) · 2.68 KB
/
option_test.go
File metadata and controls
121 lines (107 loc) · 2.68 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
package tinyconf
import (
"reflect"
"testing"
"github.com/insei/fmap/v3"
)
// Mock implementations of Driver interface for the purposes of testing
type mockDriver struct{}
func (md mockDriver) GenDoc(registers ...*Registered) string { return "doc mockDriver" }
func (md mockDriver) GetName() string { return "mockDriver" }
func (md mockDriver) GetValue(field fmap.Field) (*Value, error) {
return nil, nil
}
// Mock implementations of Logger interface for the purposes of testing
type mockLogger struct{}
func (l *mockLogger) Debug(string, ...Field) {}
func (l *mockLogger) Error(string, ...Field) {}
func (l *mockLogger) Warn(string, ...Field) {}
func (l *mockLogger) Info(string, ...Field) {}
func (l *mockLogger) With(...Field) Logger { return l }
func TestCountDrivers(t *testing.T) {
testCases := []struct {
name string
opts []Option
count uint8
}{
{
name: "NoDrivers",
opts: []Option{},
count: 0,
},
{
name: "SingleDriver",
opts: []Option{WithDriver(mockDriver{})},
count: 1,
},
{
name: "MultipleDrivers",
opts: []Option{WithDriver(mockDriver{}), WithDriver(mockDriver{}), WithLogger(&noopLogger{})},
count: 2,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
if count := countDrivers(tc.opts...); count != tc.count {
t.Errorf("countDrivers(%v) = %v, expected %v", tc.opts, count, tc.count)
}
})
}
}
func TestApply(t *testing.T) {
tests := []struct {
name string
opts driverOption
expectedConfig *Manager
}{
{
name: "driver_present",
opts: driverOption{driver: &mockDriver{}},
expectedConfig: &Manager{drivers: []Driver{&mockDriver{}}},
},
{
name: "driver_absent",
opts: driverOption{driver: nil},
expectedConfig: &Manager{},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
managerConfig := &Manager{}
tt.opts.apply(managerConfig)
if !reflect.DeepEqual(managerConfig, tt.expectedConfig) {
t.Errorf("managerConfig got %v, want %v", managerConfig, tt.expectedConfig)
}
})
}
}
func TestLoggerOption_apply(t *testing.T) {
tests := []struct {
name string
logger Logger
expected Logger
}{
{
name: "With valid logger",
logger: &noopLogger{},
expected: &noopLogger{},
},
{
name: "With nil logger",
logger: nil,
expected: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
opt := loggerOption{
logger: tt.logger,
}
manager := &Manager{}
opt.apply(manager)
if manager.log != tt.expected {
t.Errorf("Expected: %v, but got: %v", tt.expected, manager.log)
}
})
}
}