Skip to content

Commit 74712bd

Browse files
authored
Add test
1 parent 775f0f6 commit 74712bd

File tree

1 file changed

+165
-0
lines changed

1 file changed

+165
-0
lines changed

github/projects_test.go

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
package github
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"net/http"
7+
"testing"
8+
)
9+
10+
func TestProjectsService_ListOrganizationProjects(t *testing.T) {
11+
t.Parallel()
12+
client, mux, _ := setup(t)
13+
14+
mux.HandleFunc("/orgs/o/projectsV2", func(w http.ResponseWriter, r *http.Request) {
15+
testMethod(t, r, "GET")
16+
testHeader(t, r, "Accept", mediaTypeProjectsPreview)
17+
// Expect query params q, page, per_page when provided
18+
testFormValues(t, r, values{"q": "alpha", "page": "2", "per_page": "1"})
19+
fmt.Fprint(w, `[{"id":1,"title":"T1","created_at":"2011-01-02T15:04:05Z","updated_at":"2012-01-02T15:04:05Z"}]`)
20+
})
21+
22+
opts := &ListProjectsOptions{Q: "alpha", ListOptions: ListOptions{Page: 2, PerPage: 1}}
23+
ctx := context.Background()
24+
projects, _, err := client.Projects.ListOrganizationProjects(ctx, "o", opts)
25+
if err != nil {
26+
t.Fatalf("Projects.ListOrganizationProjects returned error: %v", err)
27+
}
28+
if len(projects) != 1 || projects[0].GetID() != 1 || projects[0].GetTitle() != "T1" {
29+
t.Fatalf("Projects.ListOrganizationProjects returned %+v", projects)
30+
}
31+
32+
const methodName = "ListOrganizationProjects"
33+
testBadOptions(t, methodName, func() (err error) {
34+
_, _, err = client.Projects.ListOrganizationProjects(ctx, "\n", opts)
35+
return err
36+
})
37+
38+
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
39+
got, resp, err := client.Projects.ListOrganizationProjects(ctx, "o", opts)
40+
if got != nil {
41+
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
42+
}
43+
return resp, err
44+
})
45+
}
46+
47+
func TestProjectsService_GetOrganizationProject(t *testing.T) {
48+
t.Parallel()
49+
client, mux, _ := setup(t)
50+
51+
mux.HandleFunc("/orgs/o/projectsV2/1", func(w http.ResponseWriter, r *http.Request) {
52+
testMethod(t, r, "GET")
53+
testHeader(t, r, "Accept", mediaTypeProjectsPreview)
54+
fmt.Fprint(w, `{"id":1,"title":"OrgProj","created_at":"2011-01-02T15:04:05Z","updated_at":"2012-01-02T15:04:05Z"}`)
55+
})
56+
57+
ctx := context.Background()
58+
project, _, err := client.Projects.GetByOrg(ctx, "o", 1)
59+
if err != nil {
60+
t.Fatalf("Projects.GetByOrg returned error: %v", err)
61+
}
62+
if project.GetID() != 1 || project.GetTitle() != "OrgProj" {
63+
t.Fatalf("Projects.GetByOrg returned %+v", project)
64+
}
65+
66+
const methodName = "GetByOrg"
67+
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
68+
got, resp, err := client.Projects.GetByOrg(ctx, "o", 1)
69+
if got != nil {
70+
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
71+
}
72+
return resp, err
73+
})
74+
}
75+
76+
func TestProjectsService_ListUserProjects(t *testing.T) {
77+
t.Parallel()
78+
client, mux, _ := setup(t)
79+
80+
mux.HandleFunc("/users/u/projectsV2", func(w http.ResponseWriter, r *http.Request) {
81+
testMethod(t, r, "GET")
82+
testHeader(t, r, "Accept", mediaTypeProjectsPreview)
83+
testFormValues(t, r, values{"q": "beta", "page": "1", "per_page": "2"})
84+
fmt.Fprint(w, `[{"id":2,"title":"UProj","created_at":"2011-01-02T15:04:05Z","updated_at":"2012-01-02T15:04:05Z"}]`)
85+
})
86+
87+
opts := &ListProjectsOptions{Q: "beta", ListOptions: ListOptions{Page: 1, PerPage: 2}}
88+
ctx := context.Background()
89+
projects, _, err := client.Projects.ListByUser(ctx, "u", opts)
90+
if err != nil {
91+
t.Fatalf("Projects.ListByUser returned error: %v", err)
92+
}
93+
if len(projects) != 1 || projects[0].GetID() != 2 || projects[0].GetTitle() != "UProj" {
94+
t.Fatalf("Projects.ListByUser returned %+v", projects)
95+
}
96+
97+
const methodName = "ListByUser"
98+
testBadOptions(t, methodName, func() (err error) {
99+
_, _, err = client.Projects.ListByUser(ctx, "\n", opts)
100+
return err
101+
})
102+
103+
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
104+
got, resp, err := client.Projects.ListByUser(ctx, "u", opts)
105+
if got != nil {
106+
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
107+
}
108+
return resp, err
109+
})
110+
}
111+
112+
func TestProjectsService_GetUserProject(t *testing.T) {
113+
t.Parallel()
114+
client, mux, _ := setup(t)
115+
116+
mux.HandleFunc("/users/u/projectsV2/2", func(w http.ResponseWriter, r *http.Request) {
117+
testMethod(t, r, "GET")
118+
testHeader(t, r, "Accept", mediaTypeProjectsPreview)
119+
fmt.Fprint(w, `{"id":2,"title":"UProj","created_at":"2011-01-02T15:04:05Z","updated_at":"2012-01-02T15:04:05Z"}`)
120+
})
121+
122+
ctx := context.Background()
123+
project, _, err := client.Projects.GetUserProject(ctx, "u", 2)
124+
if err != nil {
125+
t.Fatalf("Projects.GetUserProject returned error: %v", err)
126+
}
127+
if project.GetID() != 2 || project.GetTitle() != "UProj" {
128+
t.Fatalf("Projects.GetUserProject returned %+v", project)
129+
}
130+
131+
const methodName = "GetUserProject"
132+
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
133+
got, resp, err := client.Projects.GetUserProject(ctx, "u", 2)
134+
if got != nil {
135+
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
136+
}
137+
return resp, err
138+
})
139+
}
140+
141+
// Marshal test ensures V2 fields marshal correctly.
142+
func TestProjectV2_Marshal(t *testing.T) {
143+
t.Parallel()
144+
testJSONMarshal(t, &ProjectV2{}, "{}")
145+
146+
p := &ProjectV2{
147+
ID: Ptr(int64(10)),
148+
Title: Ptr("Title"),
149+
Description: Ptr("Desc"),
150+
Public: Ptr(true),
151+
CreatedAt: &Timestamp{referenceTime},
152+
UpdatedAt: &Timestamp{referenceTime},
153+
}
154+
155+
want := `{
156+
"id": 10,
157+
"title": "Title",
158+
"description": "Desc",
159+
"public": true,
160+
"created_at": ` + referenceTimeStr + `,
161+
"updated_at": ` + referenceTimeStr + `
162+
}`
163+
164+
testJSONMarshal(t, p, want)
165+
}

0 commit comments

Comments
 (0)