@@ -2,12 +2,36 @@ package github
22
33import (
44 "context"
5+ "encoding/json"
6+ "fmt"
7+ "net/http"
8+ "net/url"
59 "testing"
610
711 "github.com/google/go-cmp/cmp"
12+ "github.com/google/go-github/v82/github"
813)
914
10- func Test_resourceGithubRepositoryFileStateUpgradeV0 (t * testing.T ) {
15+ func buildMockResponsesForRepositoryFileMigrationV0toV1 (mockOwner , mockRepo string , wantRepoID int ) []* mockResponse {
16+ responseBodyJson , err := json .Marshal (github.Repository {
17+ ID : github .Ptr (int64 (wantRepoID )),
18+ DefaultBranch : github .Ptr ("main" ),
19+ Name : github .Ptr (mockRepo ),
20+ })
21+ if err != nil {
22+ panic (fmt .Sprintf ("error marshalling repository response: %s" , err ))
23+ }
24+ return []* mockResponse {{
25+ ExpectedUri : fmt .Sprintf ("/repos/%s/%s" , mockOwner , mockRepo ),
26+ ExpectedHeaders : map [string ]string {
27+ "Accept" : "application/vnd.github.scarlet-witch-preview+json, application/vnd.github.mercy-preview+json, application/vnd.github.baptiste-preview+json, application/vnd.github.nebula-preview+json" ,
28+ },
29+ ResponseBody : string (responseBodyJson ),
30+ StatusCode : http .StatusOK ,
31+ }}
32+ }
33+
34+ func Test_resourceGithubRepositoryFileStateUpgradeV0toV1 (t * testing.T ) {
1135 t .Parallel ()
1236
1337 for _ , d := range []struct {
@@ -31,6 +55,7 @@ func Test_resourceGithubRepositoryFileStateUpgradeV0(t *testing.T) {
3155 want : map [string ]any {
3256 "id" : "test-repo:path/to/file.txt:main" ,
3357 "repository" : "test-repo" ,
58+ "repository_id" : 1234567890 ,
3459 "file" : "path/to/file.txt" ,
3560 "content" : "file content" ,
3661 "branch" : "main" ,
@@ -50,56 +75,72 @@ func Test_resourceGithubRepositoryFileStateUpgradeV0(t *testing.T) {
5075 "branch" : "develop" ,
5176 },
5277 want : map [string ]any {
53- "id" : "test-repo:README.md:develop" ,
78+ "id" : "test-repo:README.md:develop" ,
79+ "repository" : "test-repo" ,
80+ "repository_id" : 1234567890 ,
81+ "file" : "README.md" ,
82+ "content" : "# README" ,
83+ "branch" : "develop" ,
84+ },
85+ shouldError : false ,
86+ },
87+ {
88+ testName : "migrates_with_missing_branch" ,
89+ rawState : map [string ]any {
90+ "id" : "test-repo/path/to/file.txt" ,
5491 "repository" : "test-repo" ,
55- "file" : "README.md" ,
56- "content" : "# README" ,
57- "branch" : "develop" ,
92+ "file" : "path/to/file.txt" ,
93+ "content" : "file content" ,
94+ },
95+ want : map [string ]any {
96+ "id" : "test-repo:path/to/file.txt:main" ,
97+ "repository" : "test-repo" ,
98+ "repository_id" : 1234567890 ,
99+ "file" : "path/to/file.txt" ,
100+ "content" : "file content" ,
101+ "branch" : "main" , // fetched from API
102+ },
103+ shouldError : false ,
104+ },
105+ {
106+ testName : "migrates_with_empty_branch" ,
107+ rawState : map [string ]any {
108+ "id" : "test-repo/path/to/file.txt" ,
109+ "repository" : "test-repo" ,
110+ "file" : "path/to/file.txt" ,
111+ "content" : "file content" ,
112+ "branch" : "" ,
113+ },
114+ want : map [string ]any {
115+ "id" : "test-repo:path/to/file.txt:main" ,
116+ "repository" : "test-repo" ,
117+ "repository_id" : 1234567890 ,
118+ "file" : "path/to/file.txt" ,
119+ "content" : "file content" ,
120+ "branch" : "main" , // fetched from API
58121 },
59122 shouldError : false ,
60123 },
61- // TODO: Enable this test once we have a pattern to create a mock client for the test.
62- // {
63- // testName: "migrates_with_missing_branch",
64- // rawState: map[string]any{
65- // "id": "test-repo/path/to/file.txt",
66- // "repository": "test-repo",
67- // "file": "path/to/file.txt",
68- // "content": "file content",
69- // },
70- // want: map[string]any{
71- // "id": "test-repo:path/to/file.txt:main",
72- // "repository": "test-repo",
73- // "file": "path/to/file.txt",
74- // "content": "file content",
75- // "branch": "main", // fetched from API
76- // },
77- // shouldError: false,
78- // },
79- // TODO: Enable this test once we have a pattern to create a mock client for the test.
80- // {
81- // testName: "migrates_with_empty_branch",
82- // rawState: map[string]any{
83- // "id": "test-repo/path/to/file.txt",
84- // "repository": "test-repo",
85- // "file": "path/to/file.txt",
86- // "content": "file content",
87- // "branch": "",
88- // },
89- // want: map[string]any{
90- // "id": "test-repo:path/to/file.txt:main",
91- // "repository": "test-repo",
92- // "file": "path/to/file.txt",
93- // "content": "file content",
94- // "branch": "main", // fetched from API
95- // },
96- // shouldError: false,
97- // },
98124 } {
99125 t .Run (d .testName , func (t * testing.T ) {
100126 t .Parallel ()
101127
102- got , err := resourceGithubRepositoryFileStateUpgradeV0 (context .Background (), d .rawState , nil )
128+ meta := & Owner {
129+ name : "test-org" ,
130+ }
131+
132+ ts := githubApiMock (buildMockResponsesForRepositoryFileMigrationV0toV1 (meta .name , d .want ["repository" ].(string ), d .want ["repository_id" ].(int )))
133+ defer ts .Close ()
134+
135+ httpCl := http .DefaultClient
136+ httpCl .Transport = http .DefaultTransport
137+
138+ client := github .NewClient (httpCl )
139+ u , _ := url .Parse (ts .URL + "/" )
140+ client .BaseURL = u
141+ meta .v3client = client
142+
143+ got , err := resourceGithubRepositoryFileStateUpgradeV0 (context .Background (), d .rawState , meta )
103144 if (err != nil ) != d .shouldError {
104145 t .Fatalf ("unexpected error state: got error %v, shouldError %v" , err , d .shouldError )
105146 }
0 commit comments