Skip to content

Commit 353abeb

Browse files
GIT-94: enable extended Feature API to provide named setup and teardown
1 parent 319e09e commit 353abeb

File tree

2 files changed

+48
-9
lines changed

2 files changed

+48
-9
lines changed

pkg/features/builder.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,29 @@ func (b *FeatureBuilder) WithStep(name string, level Level, fn Func) *FeatureBui
4646

4747
// Setup adds a new setup step that will be applied prior to feature test.
4848
func (b *FeatureBuilder) Setup(fn Func) *FeatureBuilder {
49-
b.feat.steps = append(b.feat.steps, newStep(fmt.Sprintf("%s-setup", b.feat.name), types.LevelSetup, fn))
50-
return b
49+
return b.WithSetup(fmt.Sprintf("%s-setup", b.feat.name), fn)
50+
}
51+
52+
// WithSetup adds a new setup step with a pre-defined setup name instead of automating
53+
// the setup name generation. This can make tests more readable.
54+
func (b *FeatureBuilder) WithSetup(name string, fn Func) *FeatureBuilder {
55+
return b.WithStep(name, types.LevelSetup, fn)
5156
}
5257

5358
// Teardown adds a new teardown step that will be applied after feature test.
5459
func (b *FeatureBuilder) Teardown(fn Func) *FeatureBuilder {
55-
b.feat.steps = append(b.feat.steps, newStep(fmt.Sprintf("%s-teardown", b.feat.name), types.LevelTeardown, fn))
56-
return b
60+
return b.WithTeardown(fmt.Sprintf("%s-teardown", b.feat.name), fn)
61+
}
62+
63+
// WithTeardown adds a new teardown step with a pre-defined name instead of an
64+
// auto-generated one
65+
func (b *FeatureBuilder) WithTeardown(name string, fn Func) *FeatureBuilder {
66+
return b.WithStep(name, types.LevelTeardown, fn)
5767
}
5868

5969
// Assess adds an assessment step to the feature test.
6070
func (b *FeatureBuilder) Assess(desc string, fn Func) *FeatureBuilder {
61-
b.feat.steps = append(b.feat.steps, newStep(desc, types.LevelAssess, fn))
62-
return b
71+
return b.WithStep(desc, types.LevelAssess, fn)
6372
}
6473

6574
// Feature returns a feature configured by builder.

pkg/features/builder_test.go

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,21 @@ func TestFeatureBuilder(t *testing.T) {
108108
}
109109
},
110110
},
111+
{ // nolint
112+
name: "named setups",
113+
setup: func(t *testing.T) types.Feature {
114+
return New("test").WithSetup("setup-test", func(ctx context.Context, t *testing.T, config *envconf.Config) context.Context {
115+
return ctx
116+
}).Feature()
117+
},
118+
eval: func(t *testing.T, f types.Feature) {
119+
ft := f.(*defaultFeature) //nolint
120+
setups := GetStepsByLevel(ft.Steps(), types.LevelSetup)
121+
if setups[0].Name() != "setup-test" {
122+
t.Errorf("unexpected setup name: %s", setups[0].Name())
123+
}
124+
},
125+
},
111126
{
112127
name: "one teardown",
113128
setup: func(t *testing.T) types.Feature {
@@ -149,6 +164,21 @@ func TestFeatureBuilder(t *testing.T) {
149164
}
150165
},
151166
},
167+
{ // nolint
168+
name: "named teardowns",
169+
setup: func(t *testing.T) types.Feature {
170+
return New("test").WithTeardown("teardown-test", func(ctx context.Context, t *testing.T, config *envconf.Config) context.Context {
171+
return ctx
172+
}).Feature()
173+
},
174+
eval: func(t *testing.T, f types.Feature) {
175+
ft := f.(*defaultFeature) //nolint
176+
setups := GetStepsByLevel(ft.Steps(), types.LevelTeardown)
177+
if setups[0].Name() != "teardown-test" {
178+
t.Errorf("unexpected teardown name: %s", setups[0].Name())
179+
}
180+
},
181+
},
152182
{
153183
name: "single assessment",
154184
setup: func(t *testing.T) types.Feature {
@@ -174,7 +204,7 @@ func TestFeatureBuilder(t *testing.T) {
174204
return New("test").Assess("some test", func(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context {
175205
// test
176206
return ctx
177-
}).Assess("some tets 2", func(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context {
207+
}).Assess("some tests 2", func(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context {
178208
// test
179209
return ctx
180210
}).Feature()
@@ -196,10 +226,10 @@ func TestFeatureBuilder(t *testing.T) {
196226
return New("test").Setup(func(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context {
197227
// test
198228
return ctx
199-
}).Assess("some tets 2", func(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context {
229+
}).Assess("some tests 2", func(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context {
200230
// test
201231
return ctx
202-
}).Assess("some tets 3", func(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context {
232+
}).Assess("some tests 3", func(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context {
203233
// test
204234
return ctx
205235
}).Teardown(func(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context {

0 commit comments

Comments
 (0)