Skip to content

Commit 2285160

Browse files
authored
test: move type assertion helpers to testhelpers package (scaleway#4357)
1 parent d03b60c commit 2285160

File tree

8 files changed

+1413
-1298
lines changed

8 files changed

+1413
-1298
lines changed

core/testing.go

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -89,27 +89,6 @@ func (meta testMetadata) render(strTpl string) string {
8989
return buf.String()
9090
}
9191

92-
func GetFromMeta[T any](t *testing.T, ctx *CheckFuncCtx, key string) T {
93-
t.Helper()
94-
95-
item, ok := ctx.Meta[key]
96-
assert.True(t, ok)
97-
typedItem, typeIsCorrect := item.(T)
98-
assert.True(t, typeIsCorrect)
99-
100-
return typedItem
101-
}
102-
103-
func GetTestResult[T any](t *testing.T, ctx *CheckFuncCtx) T {
104-
t.Helper()
105-
106-
typedItem, typeIsCorrect := ctx.Result.(T)
107-
assert.True(t, typeIsCorrect)
108-
assert.NotNil(t, typedItem)
109-
110-
return typedItem
111-
}
112-
11392
func BeforeFuncStoreInMeta(key string, value interface{}) BeforeFunc {
11493
return func(ctx *BeforeFuncCtx) error {
11594
ctx.Meta[key] = value

internal/namespaces/instance/v1/custom_image_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/alecthomas/assert"
77
"github.com/scaleway/scaleway-cli/v2/core"
88
"github.com/scaleway/scaleway-cli/v2/internal/namespaces/instance/v1"
9+
"github.com/scaleway/scaleway-cli/v2/internal/testhelpers"
910
instanceSDK "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
1011
"github.com/scaleway/scaleway-sdk-go/scw"
1112
)
@@ -62,8 +63,10 @@ func Test_ImageDelete(t *testing.T) {
6263
t.Helper()
6364
// Assert snapshot are deleted with the image
6465
api := instanceSDK.NewAPI(ctx.Client)
66+
snapshot := testhelpers.MapValue[*instanceSDK.CreateSnapshotResponse](t, ctx.Meta, "Snapshot")
67+
6568
_, err := api.GetSnapshot(&instanceSDK.GetSnapshotRequest{
66-
SnapshotID: ctx.Meta["Snapshot"].(*instanceSDK.CreateSnapshotResponse).Snapshot.ID,
69+
SnapshotID: snapshot.Snapshot.ID,
6770
})
6871
assert.IsType(t, &scw.ResourceNotFoundError{}, err)
6972
},

internal/namespaces/instance/v1/custom_server_action_test.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/scaleway/scaleway-cli/v2/core"
88
"github.com/scaleway/scaleway-cli/v2/internal/interactive"
99
"github.com/scaleway/scaleway-cli/v2/internal/namespaces/instance/v1"
10+
"github.com/scaleway/scaleway-cli/v2/internal/testhelpers"
1011
instanceSDK "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
1112
"github.com/scaleway/scaleway-sdk-go/scw"
1213
"github.com/stretchr/testify/require"
@@ -19,15 +20,16 @@ func Test_ServerTerminate(t *testing.T) {
1920

2021
t.Run("without IP", core.Test(&core.TestConfig{
2122
Commands: instance.GetCommands(),
22-
BeforeFunc: core.ExecStoreBeforeCmd("Server", testServerCommand("image=ubuntu-jammy -w")),
23+
BeforeFunc: core.ExecStoreBeforeCmd("Server", testServerCommand("image=ubuntu-jammy ip=new -w")),
2324
Cmd: `scw instance server terminate {{ .Server.ID }}`,
2425
Check: core.TestCheckCombine(
2526
core.TestCheckGolden(),
2627
core.TestCheckExitCode(0),
2728
func(t *testing.T, ctx *core.CheckFuncCtx) {
2829
t.Helper()
2930
api := instanceSDK.NewAPI(ctx.Client)
30-
server := ctx.Meta["Server"].(*instanceSDK.Server)
31+
server := testhelpers.MapValue[*instanceSDK.Server](t, ctx.Meta, "Server")
32+
assert.NotNil(t, server.PublicIP)
3133
_, err := api.GetIP(&instanceSDK.GetIPRequest{
3234
IP: server.PublicIP.ID,
3335
})
@@ -40,15 +42,17 @@ func Test_ServerTerminate(t *testing.T) {
4042

4143
t.Run("with IP", core.Test(&core.TestConfig{
4244
Commands: instance.GetCommands(),
43-
BeforeFunc: core.ExecStoreBeforeCmd("Server", testServerCommand("image=ubuntu-jammy -w")),
45+
BeforeFunc: core.ExecStoreBeforeCmd("Server", testServerCommand("image=ubuntu-jammy ip=new -w")),
4446
Cmd: `scw instance server terminate {{ .Server.ID }} with-ip=true`,
4547
Check: core.TestCheckCombine(
4648
core.TestCheckGolden(),
4749
core.TestCheckExitCode(0),
4850
func(t *testing.T, ctx *core.CheckFuncCtx) {
4951
t.Helper()
5052
api := instanceSDK.NewAPI(ctx.Client)
51-
server := ctx.Meta["Server"].(*instanceSDK.Server)
53+
server := testhelpers.MapValue[*instanceSDK.Server](t, ctx.Meta, "Server")
54+
assert.NotNil(t, server.PublicIP)
55+
5256
_, err := api.GetIP(&instanceSDK.GetIPRequest{
5357
IP: server.PublicIP.ID,
5458
})
@@ -84,9 +88,11 @@ func Test_ServerTerminate(t *testing.T) {
8488
func(t *testing.T, ctx *core.CheckFuncCtx) {
8589
t.Helper()
8690
api := instanceSDK.NewAPI(ctx.Client)
87-
server := ctx.Meta["Server"].(*instanceSDK.Server)
91+
server := testhelpers.MapValue[*instanceSDK.Server](t, ctx.Meta, "Server")
92+
volume := testhelpers.MapTValue(t, server.Volumes, "0")
93+
8894
_, err := api.GetVolume(&instanceSDK.GetVolumeRequest{
89-
VolumeID: server.Volumes["0"].ID,
95+
VolumeID: volume.ID,
9096
Zone: server.Zone,
9197
})
9298
require.IsType(t, &scw.ResourceNotFoundError{}, err)
@@ -139,7 +145,7 @@ func Test_ServerAction(t *testing.T) {
139145
core.TestCheckExitCode(0),
140146
func(t *testing.T, ctx *core.CheckFuncCtx) {
141147
t.Helper()
142-
storedServer := ctx.Meta["Server"].(*instanceSDK.Server)
148+
storedServer := testhelpers.MapValue[*instanceSDK.Server](t, ctx.Meta, "Server")
143149
api := instanceSDK.NewAPI(ctx.Client)
144150
resp, err := api.GetServer(&instanceSDK.GetServerRequest{
145151
Zone: storedServer.Zone,

internal/namespaces/instance/v1/custom_server_create_test.go

Lines changed: 54 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/scaleway/scaleway-cli/v2/core"
99
block "github.com/scaleway/scaleway-cli/v2/internal/namespaces/block/v1alpha1"
1010
"github.com/scaleway/scaleway-cli/v2/internal/namespaces/instance/v1"
11+
"github.com/scaleway/scaleway-cli/v2/internal/testhelpers"
1112
blockSDK "github.com/scaleway/scaleway-sdk-go/api/block/v1alpha1"
1213
instanceSDK "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
1314
"github.com/scaleway/scaleway-sdk-go/scw"
@@ -123,7 +124,9 @@ func Test_CreateServer(t *testing.T) {
123124
func(t *testing.T, ctx *core.CheckFuncCtx) {
124125
t.Helper()
125126
assert.NotNil(t, ctx.Result)
126-
size := ctx.Result.(*instanceSDK.Server).Volumes["0"].Size
127+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
128+
volume := testhelpers.MapTValue(t, server.Volumes, "0")
129+
size := volume.Size
127130
assert.Equal(t, 20*scw.GB, instance.SizeValue(size), "Size of volume should be 20 GB")
128131
},
129132
core.TestCheckExitCode(0),
@@ -143,7 +146,9 @@ func Test_CreateServer(t *testing.T) {
143146
func(t *testing.T, ctx *core.CheckFuncCtx) {
144147
t.Helper()
145148
assert.NotNil(t, ctx.Result)
146-
size := ctx.Result.(*instanceSDK.Server).Volumes["0"].Size
149+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
150+
volume := testhelpers.MapTValue(t, server.Volumes, "0")
151+
size := volume.Size
147152
assert.Equal(t, 20*scw.GB, instance.SizeValue(size), "Size of volume should be 20 GB")
148153
},
149154
),
@@ -166,7 +171,9 @@ func Test_CreateServer(t *testing.T) {
166171
func(t *testing.T, ctx *core.CheckFuncCtx) {
167172
t.Helper()
168173
assert.NotNil(t, ctx.Result)
169-
size := ctx.Result.(*instanceSDK.Server).Volumes["0"].Size
174+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
175+
volume := testhelpers.MapTValue(t, server.Volumes, "0")
176+
size := volume.Size
170177
assert.Equal(t, 20*scw.GB, instance.SizeValue(size), "Size of volume should be 20 GB")
171178
},
172179
),
@@ -184,8 +191,9 @@ func Test_CreateServer(t *testing.T) {
184191
func(t *testing.T, ctx *core.CheckFuncCtx) {
185192
t.Helper()
186193
assert.NotNil(t, ctx.Result)
187-
size0 := ctx.Result.(*instanceSDK.Server).Volumes["0"].Size
188-
size1 := ctx.Result.(*instanceSDK.Server).Volumes["1"].Size
194+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
195+
size0 := testhelpers.MapTValue(t, server.Volumes, "0").Size
196+
size1 := testhelpers.MapTValue(t, server.Volumes, "1").Size
189197
assert.Equal(t, 10*scw.GB, instance.SizeValue(size0), "Size of volume should be 10 GB")
190198
assert.Equal(t, 10*scw.GB, instance.SizeValue(size1), "Size of volume should be 10 GB")
191199
},
@@ -206,8 +214,9 @@ func Test_CreateServer(t *testing.T) {
206214
func(t *testing.T, ctx *core.CheckFuncCtx) {
207215
t.Helper()
208216
assert.NotNil(t, ctx.Result)
209-
size0 := ctx.Result.(*instanceSDK.Server).Volumes["0"].Size
210-
size1 := ctx.Result.(*instanceSDK.Server).Volumes["1"].Size
217+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
218+
size0 := testhelpers.MapTValue(t, server.Volumes, "0").Size
219+
size1 := testhelpers.MapTValue(t, server.Volumes, "1").Size
211220
assert.Equal(t, 20*scw.GB, instance.SizeValue(size0), "Size of volume should be 20 GB")
212221
assert.Equal(t, 20*scw.GB, instance.SizeValue(size1), "Size of volume should be 20 GB")
213222
},
@@ -227,9 +236,10 @@ func Test_CreateServer(t *testing.T) {
227236
func(t *testing.T, ctx *core.CheckFuncCtx) {
228237
t.Helper()
229238
assert.NotNil(t, ctx.Result)
230-
size1 := ctx.Result.(*instanceSDK.Server).Volumes["1"].Size
231-
size2 := ctx.Result.(*instanceSDK.Server).Volumes["2"].Size
232-
size3 := ctx.Result.(*instanceSDK.Server).Volumes["3"].Size
239+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
240+
size1 := testhelpers.MapTValue(t, server.Volumes, "1").Size
241+
size2 := testhelpers.MapTValue(t, server.Volumes, "2").Size
242+
size3 := testhelpers.MapTValue(t, server.Volumes, "3").Size
233243
assert.Equal(t, 1*scw.GB, instance.SizeValue(size1), "Size of volume should be 1 GB")
234244
assert.Equal(t, 5*scw.GB, instance.SizeValue(size2), "Size of volume should be 5 GB")
235245
assert.Equal(t, 10*scw.GB, instance.SizeValue(size3), "Size of volume should be 10 GB")
@@ -251,7 +261,9 @@ func Test_CreateServer(t *testing.T) {
251261
func(t *testing.T, ctx *core.CheckFuncCtx) {
252262
t.Helper()
253263
assert.NotNil(t, ctx.Result)
254-
assert.Equal(t, instanceSDK.VolumeServerVolumeTypeSbsVolume, ctx.Result.(*instanceSDK.Server).Volumes["1"].VolumeType)
264+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
265+
volume := testhelpers.MapTValue(t, server.Volumes, "1")
266+
assert.Equal(t, instanceSDK.VolumeServerVolumeTypeSbsVolume, volume.VolumeType)
255267
},
256268
core.TestCheckExitCode(0),
257269
),
@@ -271,7 +283,9 @@ func Test_CreateServer(t *testing.T) {
271283
func(t *testing.T, ctx *core.CheckFuncCtx) {
272284
t.Helper()
273285
assert.NotNil(t, ctx.Result)
274-
assert.Equal(t, instanceSDK.VolumeServerVolumeTypeSbsVolume, ctx.Result.(*instanceSDK.Server).Volumes["1"].VolumeType)
286+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
287+
volume := testhelpers.MapTValue(t, server.Volumes, "1")
288+
assert.Equal(t, instanceSDK.VolumeServerVolumeTypeSbsVolume, volume.VolumeType)
275289
},
276290
),
277291
AfterFunc: core.AfterFuncCombine(
@@ -293,7 +307,9 @@ func Test_CreateServer(t *testing.T) {
293307
func(t *testing.T, ctx *core.CheckFuncCtx) {
294308
t.Helper()
295309
assert.NotNil(t, ctx.Result)
296-
assert.Equal(t, instanceSDK.VolumeServerVolumeTypeSbsVolume, ctx.Result.(*instanceSDK.Server).Volumes["0"].VolumeType)
310+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
311+
volume := testhelpers.MapTValue(t, server.Volumes, "0")
312+
assert.Equal(t, instanceSDK.VolumeServerVolumeTypeSbsVolume, volume.VolumeType)
297313
},
298314
),
299315
AfterFunc: core.AfterFuncCombine(
@@ -312,7 +328,9 @@ func Test_CreateServer(t *testing.T) {
312328
func(t *testing.T, ctx *core.CheckFuncCtx) {
313329
t.Helper()
314330
assert.NotNil(t, ctx.Result)
315-
assert.Equal(t, instanceSDK.VolumeServerVolumeTypeSbsVolume, ctx.Result.(*instanceSDK.Server).Volumes["0"].VolumeType)
331+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
332+
volume := testhelpers.MapTValue(t, server.Volumes, "0")
333+
assert.Equal(t, instanceSDK.VolumeServerVolumeTypeSbsVolume, volume.VolumeType)
316334
},
317335
),
318336
AfterFunc: core.AfterFuncCombine(
@@ -331,7 +349,9 @@ func Test_CreateServer(t *testing.T) {
331349
func(t *testing.T, ctx *core.CheckFuncCtx) {
332350
t.Helper()
333351
assert.NotNil(t, ctx.Result)
334-
rootVolume, rootVolumeExists := ctx.Result.(*instanceSDK.Server).Volumes["0"]
352+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
353+
354+
rootVolume, rootVolumeExists := server.Volumes["0"]
335355
assert.True(t, rootVolumeExists)
336356
assert.Equal(t, instanceSDK.VolumeServerVolumeTypeSbsVolume, rootVolume.VolumeType)
337357

@@ -362,8 +382,10 @@ func Test_CreateServer(t *testing.T) {
362382
func(t *testing.T, ctx *core.CheckFuncCtx) {
363383
t.Helper()
364384
assert.NotNil(t, ctx.Result)
365-
assert.NotEmpty(t, ctx.Result.(*instanceSDK.Server).PublicIP.Address)
366-
assert.Equal(t, false, ctx.Result.(*instanceSDK.Server).PublicIP.Dynamic)
385+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
386+
assert.NotNil(t, server.PublicIP)
387+
assert.NotEmpty(t, server.PublicIP.Address)
388+
assert.Equal(t, false, server.PublicIP.Dynamic)
367389
},
368390
core.TestCheckExitCode(0),
369391
),
@@ -378,8 +400,10 @@ func Test_CreateServer(t *testing.T) {
378400
t.Helper()
379401
assert.NoError(t, ctx.Err)
380402
assert.NotNil(t, ctx.Result)
381-
assert.NotEmpty(t, ctx.Result.(*instanceSDK.Server).PublicIP.Address)
382-
assert.Equal(t, true, ctx.Result.(*instanceSDK.Server).DynamicIPRequired)
403+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
404+
assert.NotNil(t, server.PublicIP)
405+
assert.NotEmpty(t, server.PublicIP.Address)
406+
assert.Equal(t, true, server.DynamicIPRequired)
383407
},
384408
core.TestCheckExitCode(0),
385409
),
@@ -394,8 +418,10 @@ func Test_CreateServer(t *testing.T) {
394418
func(t *testing.T, ctx *core.CheckFuncCtx) {
395419
t.Helper()
396420
assert.NotNil(t, ctx.Result)
397-
assert.NotEmpty(t, ctx.Result.(*instanceSDK.Server).PublicIP.Address)
398-
assert.Equal(t, false, ctx.Result.(*instanceSDK.Server).PublicIP.Dynamic)
421+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
422+
assert.NotNil(t, server.PublicIP)
423+
assert.NotEmpty(t, server.PublicIP.Address)
424+
assert.Equal(t, false, server.PublicIP.Dynamic)
399425
},
400426
core.TestCheckExitCode(0),
401427
),
@@ -410,8 +436,10 @@ func Test_CreateServer(t *testing.T) {
410436
func(t *testing.T, ctx *core.CheckFuncCtx) {
411437
t.Helper()
412438
assert.NotNil(t, ctx.Result)
413-
assert.NotEmpty(t, ctx.Result.(*instanceSDK.Server).PublicIP.Address)
414-
assert.Equal(t, false, ctx.Result.(*instanceSDK.Server).PublicIP.Dynamic)
439+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
440+
assert.NotNil(t, server.PublicIP)
441+
assert.NotEmpty(t, server.PublicIP.Address)
442+
assert.Equal(t, false, server.PublicIP.Dynamic)
415443
},
416444
core.TestCheckExitCode(0),
417445
),
@@ -425,7 +453,7 @@ func Test_CreateServer(t *testing.T) {
425453
func(t *testing.T, ctx *core.CheckFuncCtx) {
426454
t.Helper()
427455
require.NotNil(t, ctx.Result, "Server is nil")
428-
server := ctx.Result.(*instanceSDK.Server)
456+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
429457
assert.Len(t, server.PublicIPs, 1)
430458
assert.Equal(t, instanceSDK.ServerIPIPFamilyInet6, server.PublicIPs[0].Family)
431459
},
@@ -442,7 +470,7 @@ func Test_CreateServer(t *testing.T) {
442470
func(t *testing.T, ctx *core.CheckFuncCtx) {
443471
t.Helper()
444472
assert.NotNil(t, ctx.Result, "server is nil")
445-
server := ctx.Result.(*instanceSDK.Server)
473+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
446474
assert.Len(t, server.PublicIPs, 2)
447475
assert.Equal(t, instanceSDK.ServerIPIPFamilyInet, server.PublicIPs[0].Family)
448476
assert.True(t, server.PublicIPs[0].Dynamic)
@@ -460,7 +488,7 @@ func Test_CreateServer(t *testing.T) {
460488
func(t *testing.T, ctx *core.CheckFuncCtx) {
461489
t.Helper()
462490
assert.NotNil(t, ctx.Result, "server is nil")
463-
server := ctx.Result.(*instanceSDK.Server)
491+
server := testhelpers.Value[*instanceSDK.Server](t, ctx.Result)
464492
assert.Len(t, server.PublicIPs, 2)
465493
assert.Equal(t, instanceSDK.ServerIPIPFamilyInet, server.PublicIPs[0].Family)
466494
assert.Equal(t, instanceSDK.ServerIPIPFamilyInet6, server.PublicIPs[1].Family)

internal/namespaces/instance/v1/custom_server_rdp_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/scaleway/scaleway-cli/v2/core"
1616
iamCLI "github.com/scaleway/scaleway-cli/v2/internal/namespaces/iam/v1alpha1"
1717
"github.com/scaleway/scaleway-cli/v2/internal/namespaces/instance/v1"
18+
"github.com/scaleway/scaleway-cli/v2/internal/testhelpers"
1819
iam "github.com/scaleway/scaleway-sdk-go/api/iam/v1alpha1"
1920
"golang.org/x/crypto/ssh"
2021
)
@@ -128,10 +129,7 @@ func Test_ServerGetRdpPassword(t *testing.T) {
128129
func(t *testing.T, ctx *core.CheckFuncCtx) {
129130
t.Helper()
130131
assert.NotNil(t, ctx.Result)
131-
resp, ok := ctx.Result.(*instance.ServerGetRdpPasswordResponse)
132-
if !ok {
133-
t.Fatal("Unexpected result type: " + reflect.TypeOf(ctx.Result).String())
134-
}
132+
resp := testhelpers.Value[*instance.ServerGetRdpPasswordResponse](t, ctx.Result)
135133

136134
assert.NotEmpty(t, resp.Password)
137135
},

0 commit comments

Comments
 (0)