@@ -46,6 +46,136 @@ func Test_RepoCreate(t *testing.T) {
4646 t .Errorf ("expected homepageUrl to be %q, got %q" , "http://example.com" , homepage )
4747 }
4848}
49+ func Test_RepoMetadata (t * testing.T ) {
50+ http := & httpmock.Registry {}
51+ client := NewClient (ReplaceTripper (http ))
52+
53+ repo := ghrepo .FromFullName ("OWNER/REPO" )
54+ input := RepoMetadataInput {
55+ Assignees : true ,
56+ Reviewers : true ,
57+ Labels : true ,
58+ Projects : true ,
59+ Milestones : true ,
60+ }
61+
62+ http .Register (
63+ httpmock .GraphQL (`\bassignableUsers\(` ),
64+ httpmock .StringResponse (`
65+ { "data": { "repository": { "assignableUsers": {
66+ "nodes": [
67+ { "login": "hubot", "id": "HUBOTID" },
68+ { "login": "MonaLisa", "id": "MONAID" }
69+ ],
70+ "pageInfo": { "hasNextPage": false }
71+ } } } }
72+ ` ))
73+ http .Register (
74+ httpmock .GraphQL (`\blabels\(` ),
75+ httpmock .StringResponse (`
76+ { "data": { "repository": { "labels": {
77+ "nodes": [
78+ { "name": "feature", "id": "FEATUREID" },
79+ { "name": "TODO", "id": "TODOID" },
80+ { "name": "bug", "id": "BUGID" }
81+ ],
82+ "pageInfo": { "hasNextPage": false }
83+ } } } }
84+ ` ))
85+ http .Register (
86+ httpmock .GraphQL (`\bmilestones\(` ),
87+ httpmock .StringResponse (`
88+ { "data": { "repository": { "milestones": {
89+ "nodes": [
90+ { "title": "GA", "id": "GAID" },
91+ { "title": "Big One.oh", "id": "BIGONEID" }
92+ ],
93+ "pageInfo": { "hasNextPage": false }
94+ } } } }
95+ ` ))
96+ http .Register (
97+ httpmock .GraphQL (`\brepository\(.+\bprojects\(` ),
98+ httpmock .StringResponse (`
99+ { "data": { "repository": { "projects": {
100+ "nodes": [
101+ { "name": "Cleanup", "id": "CLEANUPID" },
102+ { "name": "Roadmap", "id": "ROADMAPID" }
103+ ],
104+ "pageInfo": { "hasNextPage": false }
105+ } } } }
106+ ` ))
107+ http .Register (
108+ httpmock .GraphQL (`\borganization\(.+\bprojects\(` ),
109+ httpmock .StringResponse (`
110+ { "data": { "organization": { "projects": {
111+ "nodes": [
112+ { "name": "Triage", "id": "TRIAGEID" }
113+ ],
114+ "pageInfo": { "hasNextPage": false }
115+ } } } }
116+ ` ))
117+ http .Register (
118+ httpmock .GraphQL (`\borganization\(.+\bteams\(` ),
119+ httpmock .StringResponse (`
120+ { "data": { "organization": { "teams": {
121+ "nodes": [
122+ { "slug": "owners", "id": "OWNERSID" },
123+ { "slug": "Core", "id": "COREID" }
124+ ],
125+ "pageInfo": { "hasNextPage": false }
126+ } } } }
127+ ` ))
128+
129+ result , err := RepoMetadata (client , repo , input )
130+ if err != nil {
131+ t .Fatalf ("unexpected error: %v" , err )
132+ }
133+
134+ expectedMemberIDs := []string {"MONAID" , "HUBOTID" }
135+ memberIDs , err := result .MembersToIDs ([]string {"monalisa" , "hubot" })
136+ if err != nil {
137+ t .Errorf ("error resolving members: %v" , err )
138+ }
139+ if ! sliceEqual (memberIDs , expectedMemberIDs ) {
140+ t .Errorf ("expected members %v, got %v" , expectedMemberIDs , memberIDs )
141+ }
142+
143+ expectedTeamIDs := []string {"COREID" , "OWNERSID" }
144+ teamIDs , err := result .TeamsToIDs ([]string {"OWNER/core" , "/owners" })
145+ if err != nil {
146+ t .Errorf ("error resolving teams: %v" , err )
147+ }
148+ if ! sliceEqual (teamIDs , expectedTeamIDs ) {
149+ t .Errorf ("expected teams %v, got %v" , expectedTeamIDs , teamIDs )
150+ }
151+
152+ expectedLabelIDs := []string {"BUGID" , "TODOID" }
153+ labelIDs , err := result .LabelsToIDs ([]string {"bug" , "todo" })
154+ if err != nil {
155+ t .Errorf ("error resolving labels: %v" , err )
156+ }
157+ if ! sliceEqual (labelIDs , expectedLabelIDs ) {
158+ t .Errorf ("expected labels %v, got %v" , expectedLabelIDs , labelIDs )
159+ }
160+
161+ expectedProjectIDs := []string {"TRIAGEID" , "ROADMAPID" }
162+ projectIDs , err := result .ProjectsToIDs ([]string {"triage" , "roadmap" })
163+ if err != nil {
164+ t .Errorf ("error resolving projects: %v" , err )
165+ }
166+ if ! sliceEqual (projectIDs , expectedProjectIDs ) {
167+ t .Errorf ("expected projects %v, got %v" , expectedProjectIDs , projectIDs )
168+ }
169+
170+ expectedMilestoneID := "BIGONEID"
171+ milestoneID , err := result .MilestoneToID ("big one.oh" )
172+ if err != nil {
173+ t .Errorf ("error resolving milestone: %v" , err )
174+ }
175+ if milestoneID != expectedMilestoneID {
176+ t .Errorf ("expected milestone %v, got %v" , expectedMilestoneID , milestoneID )
177+ }
178+ }
49179
50180func Test_RepoResolveMetadataIDs (t * testing.T ) {
51181 http := & httpmock.Registry {}
0 commit comments