Skip to content

Commit 343bc7d

Browse files
committed
Refactor mockResponse builder to accept inputs
Signed-off-by: Timo Sand <[email protected]>
1 parent 1b4f74e commit 343bc7d

2 files changed

Lines changed: 60 additions & 37 deletions

File tree

github/resource_github_emu_group_mapping_migration.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ func resourceGithubEMUGroupMappingStateUpgradeV0(ctx context.Context, rawState m
5050
}
5151
return nil, err
5252
}
53+
5354
group := groupsList.Groups[0]
5455
teamID, err := lookupTeamID(ctx, meta.(*Owner), teamSlug)
5556
if err != nil {

github/resource_github_emu_group_mapping_migration_test.go

Lines changed: 59 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,111 @@
11
package github
22

33
import (
4+
"encoding/json"
45
"fmt"
56
"net/http"
67
"net/url"
78
"testing"
9+
"time"
810

911
"github.com/google/go-cmp/cmp"
1012
"github.com/google/go-github/v82/github"
1113
)
1214

13-
var (
14-
testTeamID = 432574718
15-
testGroupID = 1234567890
16-
)
15+
func buildMockResponsesForMigrationV0toV1(mockResponsesOptions mockResponsesOptionsEMUGroupMappingMigrationV0V1) []*mockResponse {
16+
responseBodyJson, err := json.Marshal(mockResponsesOptions.ExternalGroupList)
17+
if err != nil {
18+
panic(fmt.Sprintf("error marshalling external groups response: %s", err))
19+
}
1720

18-
func buildMockResponsesForMigrationV0toV1() []*mockResponse {
21+
mockTeamResponseJson, err := json.Marshal(mockResponsesOptions.Team)
22+
if err != nil {
23+
panic(fmt.Sprintf("error marshalling mock team response: %s", err))
24+
}
1925
return []*mockResponse{
2026
{
21-
ExpectedUri: fmt.Sprintf("/orgs/%s/teams/%s/external-groups", "test-org", "test-team"),
27+
ExpectedUri: fmt.Sprintf("/orgs/%s/teams/%s/external-groups", mockResponsesOptions.OrgSlug, mockResponsesOptions.TeamSlug),
2228
ExpectedHeaders: map[string]string{
2329
"Accept": "application/vnd.github.v3+json",
2430
},
25-
ResponseBody: fmt.Sprintf(`
26-
{
27-
"groups": [
28-
{
29-
"group_id": %d,
30-
"group_name": "test-group",
31-
"updated_at": "2021-01-24T11:31:04-06:00"
32-
}
33-
]
34-
}`, int64(testGroupID)),
35-
StatusCode: 201,
31+
ResponseBody: string(responseBodyJson),
32+
StatusCode: mockResponsesOptions.externalGroupsResponseStatusCode,
3633
},
3734
{
38-
ExpectedUri: fmt.Sprintf("/orgs/%s/teams/%s", "test-org", "test-team"),
35+
ExpectedUri: fmt.Sprintf("/orgs/%s/teams/%s", mockResponsesOptions.OrgSlug, mockResponsesOptions.TeamSlug),
3936
ExpectedHeaders: map[string]string{
4037
"Accept": "application/vnd.github.v3+json",
4138
},
42-
ResponseBody: fmt.Sprintf(`
43-
{
44-
"id": %d
45-
}
46-
`, testTeamID),
47-
StatusCode: 200,
39+
ResponseBody: string(mockTeamResponseJson),
40+
StatusCode: mockResponsesOptions.teamResponseStatusCode,
4841
},
4942
}
5043
}
5144

45+
type mockResponsesOptionsEMUGroupMappingMigrationV0V1 struct {
46+
OrgSlug string
47+
TeamSlug string
48+
externalGroupsResponseStatusCode int
49+
teamResponseStatusCode int
50+
ExternalGroupList github.ExternalGroupList
51+
Team github.Team
52+
}
53+
5254
func Test_resourceGithubEMUGroupMappingStateUpgradeV0(t *testing.T) {
5355
t.Parallel()
5456

57+
const testOrgSlug = "test-org"
58+
const testTeamSlug = "test-team"
59+
const testTeamID = 432574718
60+
const testGroupID = 1234567890
61+
5562
meta := &Owner{
56-
name: "test-org",
63+
name: testOrgSlug,
5764
}
5865

5966
for _, d := range []struct {
60-
testName string
61-
rawState map[string]any
62-
want map[string]any
63-
buildMockResponses func() []*mockResponse
64-
shouldError bool
67+
testName string
68+
rawState map[string]any
69+
want map[string]any
70+
shouldError bool
71+
mockResponsesOptions mockResponsesOptionsEMUGroupMappingMigrationV0V1
6572
}{
6673
{
6774
testName: "migrates v0 to v1",
6875
rawState: map[string]any{
69-
"id": "teams/test-team/external-groups",
70-
"team_slug": "test-team",
76+
"id": fmt.Sprintf("teams/%s/%d/external-groups", testTeamSlug, testGroupID),
77+
"team_slug": testTeamSlug,
7178
"group_id": testGroupID,
7279
},
7380
want: map[string]any{
74-
"id": "432574718:test-team:1234567890",
75-
"team_slug": "test-team",
81+
"id": fmt.Sprintf("%d:%s:%d", testTeamID, testTeamSlug, testGroupID),
82+
"team_slug": testTeamSlug,
7683
"team_id": int64(testTeamID),
7784
"group_id": testGroupID,
7885
},
79-
buildMockResponses: buildMockResponsesForMigrationV0toV1,
80-
shouldError: false,
86+
shouldError: false,
87+
mockResponsesOptions: mockResponsesOptionsEMUGroupMappingMigrationV0V1{
88+
OrgSlug: testOrgSlug,
89+
TeamSlug: testTeamSlug,
90+
externalGroupsResponseStatusCode: 201,
91+
teamResponseStatusCode: 200,
92+
ExternalGroupList: github.ExternalGroupList{
93+
Groups: []*github.ExternalGroup{{
94+
GroupID: github.Ptr(int64(testGroupID)),
95+
GroupName: github.Ptr(testOrgSlug),
96+
UpdatedAt: github.Ptr(github.Timestamp{Time: time.Now()}),
97+
}},
98+
},
99+
Team: github.Team{
100+
ID: github.Ptr(int64(testTeamID)),
101+
},
102+
},
81103
},
82104
} {
83105
t.Run(d.testName, func(t *testing.T) {
84106
t.Parallel()
85107

86-
ts := githubApiMock(d.buildMockResponses())
108+
ts := githubApiMock(buildMockResponsesForMigrationV0toV1(d.mockResponsesOptions))
87109
defer ts.Close()
88110

89111
httpCl := http.DefaultClient

0 commit comments

Comments
 (0)