Passed
Pull Request — master (#4)
by felipe
01:40
created

rollout.TestRollout_IsActive   B

Complexity

Conditions 5

Size

Total Lines 35
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 27
nop 1
dl 0
loc 35
rs 8.7653
c 0
b 0
f 0
1
package rollout
2
3
import (
4
	"reflect"
5
	"testing"
6
7
	"github.com/satori/go.uuid"
8
	"github.com/stretchr/testify/assert"
9
)
10
11
func TestRollout_IsActive(t *testing.T) {
12
	features := []Feature{
13
		Feature{"foo", 100, false},
14
		Feature{"bar", 50, true},
15
		Feature{"baz", 0, true},
16
	}
17
	r := Create(features)
18
19
	id, _ := uuid.NewV4()
20
21
	type fields struct {
22
		features map[string]Feature
23
	}
24
	type args struct {
25
		feature string
26
		id      string
27
	}
28
	tests := []struct {
29
		name   string
30
		fields fields
31
		args   args
32
		want   bool
33
	}{
34
		{"rollout 100%", fields{r.features}, args{"foo", id.String()}, true},
35
		{"rollout 0%", fields{r.features}, args{"baz", id.String()}, false},
36
		{"rollout 50% out", fields{r.features}, args{"bar", "d0b7b9df-9fa8-4f72-885b-3f1cd0d705d5"}, false},
37
		{"rollout 50% int", fields{r.features}, args{"bar", "8975b460-4446-4af2-965a-ba020092e1ca"}, true},
38
	}
39
	for _, tt := range tests {
40
		t.Run(tt.name, func(t *testing.T) {
41
			r := Rollout{
42
				features: tt.fields.features,
43
			}
44
			if got := r.IsActive(tt.args.feature, tt.args.id); got != tt.want {
45
				t.Errorf("Rollout.IsActive() = %v, want %v", got, tt.want)
46
			}
47
		})
48
	}
49
}
50
51
func TestRollout_IsFeatureActive(t *testing.T) {
52
	features := []Feature{
53
		Feature{"foo", 0.5, false},
54
		Feature{"bar", 0.5, true},
55
	}
56
	r := Create(features)
57
	type fields struct {
58
		features map[string]Feature
59
	}
60
	type args struct {
61
		feature string
62
	}
63
	tests := []struct {
64
		name   string
65
		fields fields
66
		args   args
67
		want   bool
68
	}{
69
		{"active", fields{r.features}, args{"foo"}, false},
70
		{"deactivated", fields{r.features}, args{"bar"}, true},
71
	}
72
	for _, tt := range tests {
73
		t.Run(tt.name, func(t *testing.T) {
74
			r := Rollout{
75
				features: tt.fields.features,
76
			}
77
			if got := r.IsFeatureActive(tt.args.feature); got != tt.want {
78
				t.Errorf("Rollout.IsFeatureActive() = %v, want %v", got, tt.want)
79
			}
80
		})
81
	}
82
}
83
84
func TestRollout_Activate(t *testing.T) {
85
	features := []Feature{Feature{"foo", 0.5, false}}
86
	r := Create(features)
87
	r.Activate("foo")
88
	assert.Equal(t, true, r.features["foo"].Active)
89
}
90
91
func TestRollout_Deactivate(t *testing.T) {
92
	features := []Feature{Feature{"foo", 0.5, true}}
93
	r := Create(features)
94
	r.Deactivate("foo")
95
	assert.Equal(t, false, r.features["foo"].Active)
96
}
97
98
func TestRollout_Set(t *testing.T) {
99
	features := []Feature{Feature{"foo", 0.5, true}}
100
	expected := Feature{"foo", 0.7, true}
101
	r := Create(features)
102
	r.Set(expected)
103
	assert.Equal(t, expected, r.features["foo"])
104
}
105
106
func TestCreate(t *testing.T) {
107
	f := Feature{"foo", 0.5, true}
108
	features := []Feature{f}
109
	r := Create(features)
110
	assert.Equal(t, f, r.features["foo"])
111
}
112
113
func TestRollout_Get(t *testing.T) {
114
	foo := Feature{"foo", 0.5, false}
115
	features := []Feature{foo}
116
	r := Create(features)
117
	type fields struct {
118
		features map[string]Feature
119
	}
120
	type args struct {
121
		feature string
122
	}
123
	tests := []struct {
124
		name   string
125
		fields fields
126
		args   args
127
		want   Feature
128
		want1  bool
129
	}{
130
		{"feature exists", fields{r.features}, args{"foo"}, foo, true},
131
		{"feature does not exist", fields{r.features}, args{"bar"}, Feature{}, false},
132
	}
133
	for _, tt := range tests {
134
		t.Run(tt.name, func(t *testing.T) {
135
			r := Rollout{
136
				features: tt.fields.features,
137
			}
138
			got, got1 := r.Get(tt.args.feature)
139
			if !reflect.DeepEqual(got, tt.want) {
140
				t.Errorf("Rollout.Get() got = %v, want %v", got, tt.want)
141
			}
142
			if got1 != tt.want1 {
143
				t.Errorf("Rollout.Get() got1 = %v, want %v", got1, tt.want1)
144
			}
145
		})
146
	}
147
}
148
149
func TestRollout_GetAll(t *testing.T) {
150
	var emptyFeatures []Feature
151
	features := []Feature{
152
		Feature{"bar", 0.5, true},
153
		Feature{"foo", 0.5, false},
154
	}
155
	r := Create(features)
156
157
	type fields struct {
158
		features map[string]Feature
159
	}
160
	tests := []struct {
161
		name   string
162
		fields fields
163
		want   []Feature
164
	}{
165
		{"sanity", fields{r.features}, features},
166
		{"sanity", fields{make(map[string]Feature)}, emptyFeatures},
167
	}
168
	for _, tt := range tests {
169
		t.Run(tt.name, func(t *testing.T) {
170
			r := Rollout{
171
				features: tt.fields.features,
172
			}
173
			if got := r.GetAll(); !reflect.DeepEqual(got, tt.want) {
174
				t.Errorf("Rollout.GetAll() = %v, want %v", got, tt.want)
175
			}
176
		})
177
	}
178
}
179