Skip to content

Commit 2a2bc2f

Browse files
committed
Add unit tests for mapRunnerToDataSourceModel in data_source.go
data_source.go had no test file at all. The two new tests cover the full-field mapping path and the null/optional-field path, matching the pattern used for the equivalent runners_data_source_test.go tests. https://claude.ai/code/session_01RGuqEJbEyQYff6DAr5nst1
1 parent 0298598 commit 2a2bc2f

1 file changed

Lines changed: 97 additions & 0 deletions

File tree

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package provider
2+
3+
import (
4+
"encoding/json"
5+
"testing"
6+
7+
gitpod "github.com/gitpod-io/gitpod-sdk-go"
8+
"github.com/hashicorp/terraform-plugin-framework/types"
9+
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestMapRunnerToDataSourceModel_MapsAllFields(t *testing.T) {
14+
var cfg gitpod.RunnerConfiguration
15+
require.NoError(t, json.Unmarshal([]byte(`{"autoUpdate":true,"devcontainerImageCacheEnabled":true,"region":"us-east-1","releaseChannel":"RUNNER_RELEASE_CHANNEL_STABLE","logLevel":"LOG_LEVEL_INFO","metrics":{"enabled":true,"managedMetricsEnabled":true,"url":"https://metrics.example","username":"metrics-user"},"updateWindow":{"startHour":8,"endHour":12}}`), &cfg))
16+
17+
runner := gitpod.Runner{
18+
RunnerID: "runner-123",
19+
Name: "Test Runner",
20+
Provider: gitpod.RunnerProviderAwsEc2,
21+
RunnerManagerID: "mgr-456",
22+
Spec: gitpod.RunnerSpec{
23+
DesiredPhase: gitpod.RunnerPhaseActive,
24+
Variant: gitpod.RunnerVariantStandard,
25+
Configuration: cfg,
26+
},
27+
Status: gitpod.RunnerStatus{
28+
Phase: gitpod.RunnerPhaseDegraded,
29+
Message: "degraded",
30+
Version: "1.2.3",
31+
Region: "eu-central-1",
32+
},
33+
}
34+
35+
got := mapRunnerToDataSourceModel(runner)
36+
37+
assert.Equal(t, "runner-123", got.ID.ValueString())
38+
assert.Equal(t, "Test Runner", got.Name.ValueString())
39+
assert.Equal(t, string(gitpod.RunnerProviderAwsEc2), got.ProviderType.ValueString())
40+
assert.Equal(t, "mgr-456", got.RunnerManagerID.ValueString())
41+
42+
require.NotNil(t, got.Spec)
43+
assert.Equal(t, string(gitpod.RunnerPhaseActive), got.Spec.DesiredPhase.ValueString())
44+
assert.Equal(t, string(gitpod.RunnerVariantStandard), got.Spec.Variant.ValueString())
45+
46+
require.NotNil(t, got.Spec.Configuration)
47+
assert.True(t, got.Spec.Configuration.AutoUpdate.ValueBool())
48+
assert.True(t, got.Spec.Configuration.DevcontainerImageCacheEnabled.ValueBool())
49+
assert.Equal(t, "us-east-1", got.Spec.Configuration.Region.ValueString())
50+
assert.Equal(t, string(gitpod.RunnerReleaseChannelStable), got.Spec.Configuration.ReleaseChannel.ValueString())
51+
assert.Equal(t, string(gitpod.LogLevelInfo), got.Spec.Configuration.LogLevel.ValueString())
52+
53+
require.NotNil(t, got.Spec.Configuration.Metrics)
54+
assert.True(t, got.Spec.Configuration.Metrics.Enabled.ValueBool())
55+
assert.True(t, got.Spec.Configuration.Metrics.ManagedMetricsEnabled.ValueBool())
56+
assert.Equal(t, "https://metrics.example", got.Spec.Configuration.Metrics.URL.ValueString())
57+
assert.Equal(t, "metrics-user", got.Spec.Configuration.Metrics.Username.ValueString())
58+
59+
require.NotNil(t, got.Spec.Configuration.UpdateWindow)
60+
assert.Equal(t, int64(8), got.Spec.Configuration.UpdateWindow.StartHour.ValueInt64())
61+
assert.Equal(t, int64(12), got.Spec.Configuration.UpdateWindow.EndHour.ValueInt64())
62+
63+
statusAttrs := got.Status.Attributes()
64+
assert.Equal(t, string(gitpod.RunnerPhaseDegraded), statusAttrs["phase"].(types.String).ValueString())
65+
assert.Equal(t, "degraded", statusAttrs["message"].(types.String).ValueString())
66+
assert.Equal(t, "1.2.3", statusAttrs["version"].(types.String).ValueString())
67+
assert.Equal(t, "eu-central-1", statusAttrs["region"].(types.String).ValueString())
68+
}
69+
70+
func TestMapRunnerToDataSourceModel_NullOptionalFields(t *testing.T) {
71+
runner := gitpod.Runner{
72+
RunnerID: "runner-456",
73+
Name: "Minimal Runner",
74+
Provider: gitpod.RunnerProviderLinuxHost,
75+
Spec: gitpod.RunnerSpec{
76+
Configuration: gitpod.RunnerConfiguration{},
77+
},
78+
}
79+
80+
got := mapRunnerToDataSourceModel(runner)
81+
82+
assert.True(t, got.RunnerManagerID.IsNull())
83+
84+
require.NotNil(t, got.Spec)
85+
assert.True(t, got.Spec.DesiredPhase.IsNull())
86+
assert.True(t, got.Spec.Variant.IsNull())
87+
88+
require.NotNil(t, got.Spec.Configuration)
89+
assert.True(t, got.Spec.Configuration.Region.IsNull())
90+
assert.True(t, got.Spec.Configuration.ReleaseChannel.IsNull())
91+
assert.True(t, got.Spec.Configuration.LogLevel.IsNull())
92+
assert.Nil(t, got.Spec.Configuration.UpdateWindow)
93+
94+
require.NotNil(t, got.Spec.Configuration.Metrics)
95+
assert.True(t, got.Spec.Configuration.Metrics.URL.IsNull())
96+
assert.True(t, got.Spec.Configuration.Metrics.Username.IsNull())
97+
}

0 commit comments

Comments
 (0)