From 777978644c348eaaaeb3b208412baee90cf70b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Tue, 5 Oct 2021 16:49:40 +0000 Subject: [PATCH 01/11] Adding pagination to list codespaces --- internal/codespaces/api/api.go | 74 ++++++++++++++++++----------- internal/codespaces/api/api_test.go | 55 ++++++++++++++++----- 2 files changed, 89 insertions(+), 40 deletions(-) diff --git a/internal/codespaces/api/api.go b/internal/codespaces/api/api.go index 03f01e7ab..0f114cdbe 100644 --- a/internal/codespaces/api/api.go +++ b/internal/codespaces/api/api.go @@ -189,36 +189,54 @@ type CodespaceEnvironmentConnection struct { // ListCodespaces returns a list of codespaces for the user. func (a *API) ListCodespaces(ctx context.Context) ([]*Codespace, error) { - req, err := http.NewRequest( - http.MethodGet, a.githubAPI+"/user/codespaces", nil, - ) - if err != nil { - return nil, fmt.Errorf("error creating request: %w", err) + page := 1 + per_page := 50 + codespaces := []*Codespace{} + + for { + req, err := http.NewRequest( + http.MethodGet, a.githubAPI+"/user/codespaces", nil, + ) + if err != nil { + return nil, fmt.Errorf("error creating request: %w", err) + } + a.setHeaders(req) + q := req.URL.Query() + q.Add("page", strconv.Itoa(page)) + q.Add("per_page", strconv.Itoa(per_page)) + + req.URL.RawQuery = q.Encode() + resp, err := a.do(ctx, req, "/user/codespaces") + if err != nil { + return nil, fmt.Errorf("error making request: %w", err) + } + defer resp.Body.Close() + + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("error reading response body: %w", err) + } + + if resp.StatusCode != http.StatusOK { + return nil, jsonErrorResponse(b) + } + + var response struct { + Codespaces []*Codespace `json:"codespaces"` + } + if err := json.Unmarshal(b, &response); err != nil { + return nil, fmt.Errorf("error unmarshaling response: %w", err) + } + + if len(response.Codespaces) > 0 { + codespaces = append(codespaces, response.Codespaces...) + page++ + } else { + break + } } - a.setHeaders(req) - resp, err := a.do(ctx, req, "/user/codespaces") - if err != nil { - return nil, fmt.Errorf("error making request: %w", err) - } - defer resp.Body.Close() - - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, fmt.Errorf("error reading response body: %w", err) - } - - if resp.StatusCode != http.StatusOK { - return nil, jsonErrorResponse(b) - } - - var response struct { - Codespaces []*Codespace `json:"codespaces"` - } - if err := json.Unmarshal(b, &response); err != nil { - return nil, fmt.Errorf("error unmarshaling response: %w", err) - } - return response.Codespaces, nil + return codespaces, nil } // getCodespaceTokenRequest is the request body for the get codespace token endpoint. diff --git a/internal/codespaces/api/api_test.go b/internal/codespaces/api/api_test.go index 8bbe1c8a9..6b9beeba9 100644 --- a/internal/codespaces/api/api_test.go +++ b/internal/codespaces/api/api_test.go @@ -6,22 +6,50 @@ import ( "fmt" "net/http" "net/http/httptest" + "strconv" "testing" ) -func TestListCodespaces(t *testing.T) { - codespaces := []*Codespace{ - { - Name: "testcodespace", - CreatedAt: "2021-08-09T10:10:24+02:00", - LastUsedAt: "2021-08-09T13:10:24+02:00", - }, +func generateCodespaceList(start int, end int) []*Codespace { + codespacesList := []*Codespace{} + for i := start; i < end; i++ { + codespacesList = append(codespacesList, &Codespace{ + Name: fmt.Sprintf("codespace-%d", i), + }) } + return codespacesList +} + +func TestListCodespaces(t *testing.T) { + svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/user/codespaces" { + t.Fatal("Incorrect path") + } + + page := 1 + if r.URL.Query().Has("page") { + page, _ = strconv.Atoi(r.URL.Query()["page"][0]) + } + + per_page := 0 + if r.URL.Query().Has("per_page") { + per_page, _ = strconv.Atoi(r.URL.Query()["per_page"][0]) + } + + codespaces := []*Codespace{} + if page == 1 { + codespaces = generateCodespaceList(0, per_page) + } else if page == 2 { + codespaces = generateCodespaceList(per_page, per_page*2) + } + response := struct { Codespaces []*Codespace `json:"codespaces"` + TotalCount int `json:"total_count"` }{ Codespaces: codespaces, + TotalCount: 100, } data, _ := json.Marshal(response) fmt.Fprint(w, string(data)) @@ -38,13 +66,16 @@ func TestListCodespaces(t *testing.T) { if err != nil { t.Fatal(err) } - - if len(codespaces) != 1 { - t.Fatalf("expected 1 codespace, got %d", len(codespaces)) + if len(codespaces) != 100 { + t.Fatalf("expected 100 codespace, got %d", len(codespaces)) } - if codespaces[0].Name != "testcodespace" { - t.Fatalf("expected testcodespace, got %s", codespaces[0].Name) + if codespaces[0].Name != "codespace-0" { + t.Fatalf("expected codespace-0, got %s", codespaces[0].Name) + } + + if codespaces[99].Name != "codespace-99" { + t.Fatalf("expected codespace-99, got %s", codespaces[0].Name) } } From 409cd9c388976b4025bb929684d8fb034eb9ef52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Tue, 5 Oct 2021 18:49:41 +0000 Subject: [PATCH 02/11] Fixing Has() issue due to go version --- internal/codespaces/api/api_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/codespaces/api/api_test.go b/internal/codespaces/api/api_test.go index 6b9beeba9..449849814 100644 --- a/internal/codespaces/api/api_test.go +++ b/internal/codespaces/api/api_test.go @@ -28,13 +28,13 @@ func TestListCodespaces(t *testing.T) { } page := 1 - if r.URL.Query().Has("page") { - page, _ = strconv.Atoi(r.URL.Query()["page"][0]) + if r.URL.Query().Get("page") != "" { + page, _ = strconv.Atoi(r.URL.Query().Get("page")) } per_page := 0 - if r.URL.Query().Has("per_page") { - per_page, _ = strconv.Atoi(r.URL.Query()["per_page"][0]) + if r.URL.Query().Get("per_page") != "" { + per_page, _ = strconv.Atoi(r.URL.Query().Get("per_page")) } codespaces := []*Codespace{} From e793a5961d4b400ec122391e21f77e663ac47225 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Tue, 5 Oct 2021 19:00:21 +0000 Subject: [PATCH 03/11] Add strconv --- internal/codespaces/api/api.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/codespaces/api/api.go b/internal/codespaces/api/api.go index fd1bba99e..e3d856230 100644 --- a/internal/codespaces/api/api.go +++ b/internal/codespaces/api/api.go @@ -34,6 +34,7 @@ import ( "fmt" "io/ioutil" "net/http" + "strconv" "strings" "time" From 4314f734e30ff4ceb0bd67834527c1cf8d53044a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Tue, 5 Oct 2021 15:33:16 -0500 Subject: [PATCH 04/11] Update internal/codespaces/api/api.go Co-authored-by: Jose Garcia --- internal/codespaces/api/api.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/internal/codespaces/api/api.go b/internal/codespaces/api/api.go index e3d856230..651d77d57 100644 --- a/internal/codespaces/api/api.go +++ b/internal/codespaces/api/api.go @@ -228,12 +228,11 @@ func (a *API) ListCodespaces(ctx context.Context) ([]*Codespace, error) { return nil, fmt.Errorf("error unmarshaling response: %w", err) } - if len(response.Codespaces) > 0 { - codespaces = append(codespaces, response.Codespaces...) - page++ - } else { - break + if len(response.Codespaces) == 0 { + break } + + codespaces = append(codespaces, response.Codespaces...) } return codespaces, nil From c6dc50983dc9d9c1d441797d74443397506c0c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Tue, 5 Oct 2021 15:33:22 -0500 Subject: [PATCH 05/11] Update internal/codespaces/api/api.go Co-authored-by: Jose Garcia --- internal/codespaces/api/api.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/codespaces/api/api.go b/internal/codespaces/api/api.go index 651d77d57..ec2c4a49a 100644 --- a/internal/codespaces/api/api.go +++ b/internal/codespaces/api/api.go @@ -193,7 +193,7 @@ func (a *API) ListCodespaces(ctx context.Context) ([]*Codespace, error) { per_page := 50 codespaces := []*Codespace{} - for { + for page := 1;; page++ { req, err := http.NewRequest( http.MethodGet, a.githubAPI+"/user/codespaces", nil, ) From 02145cc4fd27cd619da298208846982e85203f7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Tue, 5 Oct 2021 21:15:24 +0000 Subject: [PATCH 06/11] Updated PR with suggestions - created a new method to avoid defer pileup issue - removed extra api call at the end of the sequence --- internal/codespaces/api/api.go | 90 ++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 42 deletions(-) diff --git a/internal/codespaces/api/api.go b/internal/codespaces/api/api.go index ec2c4a49a..0d3a99961 100644 --- a/internal/codespaces/api/api.go +++ b/internal/codespaces/api/api.go @@ -187,57 +187,63 @@ type CodespaceEnvironmentConnection struct { HostPublicKeys []string `json:"hostPublicKeys"` } +// codespacesListResponse is the request body for the `/user/codespaces` endpoint +type getCodespacesListResponse struct { + Codespaces []*Codespace `json:"codespaces"` + TotalCount int `json:"total_count"` +} + // ListCodespaces returns a list of codespaces for the user. -func (a *API) ListCodespaces(ctx context.Context) ([]*Codespace, error) { - page := 1 - per_page := 50 - codespaces := []*Codespace{} - - for page := 1;; page++ { - req, err := http.NewRequest( - http.MethodGet, a.githubAPI+"/user/codespaces", nil, - ) +func (a *API) ListCodespaces(ctx context.Context) (codespaces []*Codespace, err error) { + for page := 1; ; page++ { + response, err := a.fetchCodespaces(ctx, page) if err != nil { - return nil, fmt.Errorf("error creating request: %w", err) + return nil, fmt.Errorf("%w", err) } - a.setHeaders(req) - q := req.URL.Query() - q.Add("page", strconv.Itoa(page)) - q.Add("per_page", strconv.Itoa(per_page)) - - req.URL.RawQuery = q.Encode() - resp, err := a.do(ctx, req, "/user/codespaces") - if err != nil { - return nil, fmt.Errorf("error making request: %w", err) + if len(codespaces) >= response.TotalCount { + break } - defer resp.Body.Close() - - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, fmt.Errorf("error reading response body: %w", err) - } - - if resp.StatusCode != http.StatusOK { - return nil, jsonErrorResponse(b) - } - - var response struct { - Codespaces []*Codespace `json:"codespaces"` - } - if err := json.Unmarshal(b, &response); err != nil { - return nil, fmt.Errorf("error unmarshaling response: %w", err) - } - - if len(response.Codespaces) == 0 { - break - } - - codespaces = append(codespaces, response.Codespaces...) + codespaces = append(codespaces, response.Codespaces...) } return codespaces, nil } +func (a *API) fetchCodespaces(ctx context.Context, page int) (response *getCodespacesListResponse, err error) { + per_page := 50 + req, err := http.NewRequest( + http.MethodGet, a.githubAPI+"/user/codespaces", nil, + ) + if err != nil { + return nil, fmt.Errorf("error creating request: %w", err) + } + a.setHeaders(req) + q := req.URL.Query() + q.Add("page", strconv.Itoa(page)) + q.Add("per_page", strconv.Itoa(per_page)) + + req.URL.RawQuery = q.Encode() + resp, err := a.do(ctx, req, "/user/codespaces") + if err != nil { + return nil, fmt.Errorf("error making request: %w", err) + } + defer resp.Body.Close() + + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("error reading response body: %w", err) + } + + if resp.StatusCode != http.StatusOK { + return nil, jsonErrorResponse(b) + } + + if err := json.Unmarshal(b, &response); err != nil { + return nil, fmt.Errorf("error unmarshaling response: %w", err) + } + return response, nil +} + // getCodespaceTokenRequest is the request body for the get codespace token endpoint. type getCodespaceTokenRequest struct { MintRepositoryToken bool `json:"mint_repository_token"` From 61b0fe36b2f354967ee6a009e9b744737ef113ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Tue, 5 Oct 2021 21:31:47 +0000 Subject: [PATCH 07/11] Adding additional tests for mid-flight deletions and additions --- internal/codespaces/api/api_test.go | 68 +++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 13 deletions(-) diff --git a/internal/codespaces/api/api_test.go b/internal/codespaces/api/api_test.go index 449849814..09c22df35 100644 --- a/internal/codespaces/api/api_test.go +++ b/internal/codespaces/api/api_test.go @@ -20,9 +20,8 @@ func generateCodespaceList(start int, end int) []*Codespace { return codespacesList } -func TestListCodespaces(t *testing.T) { - - svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { +func createFakeListEndpointServer(t *testing.T, initalTotal int, finalTotal int) *httptest.Server { + return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/user/codespaces" { t.Fatal("Incorrect path") } @@ -37,23 +36,29 @@ func TestListCodespaces(t *testing.T) { per_page, _ = strconv.Atoi(r.URL.Query().Get("per_page")) } - codespaces := []*Codespace{} - if page == 1 { - codespaces = generateCodespaceList(0, per_page) - } else if page == 2 { - codespaces = generateCodespaceList(per_page, per_page*2) - } - response := struct { Codespaces []*Codespace `json:"codespaces"` TotalCount int `json:"total_count"` }{ - Codespaces: codespaces, - TotalCount: 100, + Codespaces: []*Codespace{}, + TotalCount: finalTotal, } + + if page == 1 { + response.Codespaces = generateCodespaceList(0, per_page) + response.TotalCount = initalTotal + } else if page == 2 { + response.Codespaces = generateCodespaceList(per_page, per_page*2) + response.TotalCount = finalTotal + } + data, _ := json.Marshal(response) fmt.Fprint(w, string(data)) })) +} + +func TestListCodespaces(t *testing.T) { + svr := createFakeListEndpointServer(t, 100, 100) defer svr.Close() api := API{ @@ -77,5 +82,42 @@ func TestListCodespaces(t *testing.T) { if codespaces[99].Name != "codespace-99" { t.Fatalf("expected codespace-99, got %s", codespaces[0].Name) } - +} + +func TestMidIterationDeletion(t *testing.T) { + svr := createFakeListEndpointServer(t, 100, 99) + defer svr.Close() + + api := API{ + githubAPI: svr.URL, + client: &http.Client{}, + token: "faketoken", + } + ctx := context.TODO() + codespaces, err := api.ListCodespaces(ctx) + if err != nil { + t.Fatal(err) + } + if len(codespaces) != 100 { + t.Fatalf("expected 100 codespace, got %d", len(codespaces)) + } +} + +func TestMidIterationAddition(t *testing.T) { + svr := createFakeListEndpointServer(t, 99, 100) + defer svr.Close() + + api := API{ + githubAPI: svr.URL, + client: &http.Client{}, + token: "faketoken", + } + ctx := context.TODO() + codespaces, err := api.ListCodespaces(ctx) + if err != nil { + t.Fatal(err) + } + if len(codespaces) != 100 { + t.Fatalf("expected 100 codespace, got %d", len(codespaces)) + } } From aa49a3a5571e78eddb49a90a833ffb74bc76da5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Tue, 5 Oct 2021 21:43:28 +0000 Subject: [PATCH 08/11] Adding a second condition just in case --- internal/codespaces/api/api.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/codespaces/api/api.go b/internal/codespaces/api/api.go index 0d3a99961..2f5cc4d40 100644 --- a/internal/codespaces/api/api.go +++ b/internal/codespaces/api/api.go @@ -200,7 +200,7 @@ func (a *API) ListCodespaces(ctx context.Context) (codespaces []*Codespace, err if err != nil { return nil, fmt.Errorf("%w", err) } - if len(codespaces) >= response.TotalCount { + if len(codespaces) >= response.TotalCount || len(response.Codespaces) == 0 { break } codespaces = append(codespaces, response.Codespaces...) From 237fdd40c8773f87039b80b651fea840eb0e54c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Wed, 6 Oct 2021 09:03:49 -0500 Subject: [PATCH 09/11] Update internal/codespaces/api/api.go Co-authored-by: Jose Garcia --- internal/codespaces/api/api.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/codespaces/api/api.go b/internal/codespaces/api/api.go index 2f5cc4d40..84869b9fb 100644 --- a/internal/codespaces/api/api.go +++ b/internal/codespaces/api/api.go @@ -187,7 +187,7 @@ type CodespaceEnvironmentConnection struct { HostPublicKeys []string `json:"hostPublicKeys"` } -// codespacesListResponse is the request body for the `/user/codespaces` endpoint +// codespacesListResponse is the response body for the `/user/codespaces` endpoint type getCodespacesListResponse struct { Codespaces []*Codespace `json:"codespaces"` TotalCount int `json:"total_count"` From 34f9c0a67c201f98ddde69f26794d1b2bf54539c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Wed, 6 Oct 2021 14:18:44 +0000 Subject: [PATCH 10/11] Updating docs and interation exit condition to not check the final page --- internal/codespaces/api/api.go | 6 ++++-- internal/codespaces/api/api_test.go | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/codespaces/api/api.go b/internal/codespaces/api/api.go index 2f5cc4d40..4abaac3d6 100644 --- a/internal/codespaces/api/api.go +++ b/internal/codespaces/api/api.go @@ -194,16 +194,18 @@ type getCodespacesListResponse struct { } // ListCodespaces returns a list of codespaces for the user. +// It consumes all pages returned by the API until all codespaces have been fetched. func (a *API) ListCodespaces(ctx context.Context) (codespaces []*Codespace, err error) { + per_page := 50 for page := 1; ; page++ { response, err := a.fetchCodespaces(ctx, page) if err != nil { return nil, fmt.Errorf("%w", err) } - if len(codespaces) >= response.TotalCount || len(response.Codespaces) == 0 { + codespaces = append(codespaces, response.Codespaces...) + if page*per_page >= response.TotalCount { break } - codespaces = append(codespaces, response.Codespaces...) } return codespaces, nil diff --git a/internal/codespaces/api/api_test.go b/internal/codespaces/api/api_test.go index 09c22df35..f1cd98efb 100644 --- a/internal/codespaces/api/api_test.go +++ b/internal/codespaces/api/api_test.go @@ -50,6 +50,8 @@ func createFakeListEndpointServer(t *testing.T, initalTotal int, finalTotal int) } else if page == 2 { response.Codespaces = generateCodespaceList(per_page, per_page*2) response.TotalCount = finalTotal + } else { + t.Fatal("Should not check extra page") } data, _ := json.Marshal(response) From 20ae9d305d13746c5691611686a21168266dafba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ram=C3=ADrez?= Date: Wed, 6 Oct 2021 14:53:55 +0000 Subject: [PATCH 11/11] Fetch 100 codespaces by default --- internal/codespaces/api/api.go | 9 ++++----- internal/codespaces/api/api_test.go | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/internal/codespaces/api/api.go b/internal/codespaces/api/api.go index 8609fab20..8fd7bd9cf 100644 --- a/internal/codespaces/api/api.go +++ b/internal/codespaces/api/api.go @@ -196,11 +196,11 @@ type getCodespacesListResponse struct { // ListCodespaces returns a list of codespaces for the user. // It consumes all pages returned by the API until all codespaces have been fetched. func (a *API) ListCodespaces(ctx context.Context) (codespaces []*Codespace, err error) { - per_page := 50 + per_page := 100 for page := 1; ; page++ { - response, err := a.fetchCodespaces(ctx, page) + response, err := a.fetchCodespaces(ctx, page, per_page) if err != nil { - return nil, fmt.Errorf("%w", err) + return nil, err } codespaces = append(codespaces, response.Codespaces...) if page*per_page >= response.TotalCount { @@ -211,8 +211,7 @@ func (a *API) ListCodespaces(ctx context.Context) (codespaces []*Codespace, err return codespaces, nil } -func (a *API) fetchCodespaces(ctx context.Context, page int) (response *getCodespacesListResponse, err error) { - per_page := 50 +func (a *API) fetchCodespaces(ctx context.Context, page int, per_page int) (response *getCodespacesListResponse, err error) { req, err := http.NewRequest( http.MethodGet, a.githubAPI+"/user/codespaces", nil, ) diff --git a/internal/codespaces/api/api_test.go b/internal/codespaces/api/api_test.go index f1cd98efb..a9d81e442 100644 --- a/internal/codespaces/api/api_test.go +++ b/internal/codespaces/api/api_test.go @@ -60,7 +60,7 @@ func createFakeListEndpointServer(t *testing.T, initalTotal int, finalTotal int) } func TestListCodespaces(t *testing.T) { - svr := createFakeListEndpointServer(t, 100, 100) + svr := createFakeListEndpointServer(t, 200, 200) defer svr.Close() api := API{ @@ -73,7 +73,7 @@ func TestListCodespaces(t *testing.T) { if err != nil { t.Fatal(err) } - if len(codespaces) != 100 { + if len(codespaces) != 200 { t.Fatalf("expected 100 codespace, got %d", len(codespaces)) } @@ -81,13 +81,13 @@ func TestListCodespaces(t *testing.T) { t.Fatalf("expected codespace-0, got %s", codespaces[0].Name) } - if codespaces[99].Name != "codespace-99" { - t.Fatalf("expected codespace-99, got %s", codespaces[0].Name) + if codespaces[199].Name != "codespace-199" { + t.Fatalf("expected codespace-199, got %s", codespaces[0].Name) } } func TestMidIterationDeletion(t *testing.T) { - svr := createFakeListEndpointServer(t, 100, 99) + svr := createFakeListEndpointServer(t, 200, 199) defer svr.Close() api := API{ @@ -100,13 +100,13 @@ func TestMidIterationDeletion(t *testing.T) { if err != nil { t.Fatal(err) } - if len(codespaces) != 100 { - t.Fatalf("expected 100 codespace, got %d", len(codespaces)) + if len(codespaces) != 200 { + t.Fatalf("expected 200 codespace, got %d", len(codespaces)) } } func TestMidIterationAddition(t *testing.T) { - svr := createFakeListEndpointServer(t, 99, 100) + svr := createFakeListEndpointServer(t, 199, 200) defer svr.Close() api := API{ @@ -119,7 +119,7 @@ func TestMidIterationAddition(t *testing.T) { if err != nil { t.Fatal(err) } - if len(codespaces) != 100 { - t.Fatalf("expected 100 codespace, got %d", len(codespaces)) + if len(codespaces) != 200 { + t.Fatalf("expected 200 codespace, got %d", len(codespaces)) } }