diff --git a/confluence/internal/page_impl.go b/confluence/internal/page_impl.go index 0667bd2b..a306c7a3 100644 --- a/confluence/internal/page_impl.go +++ b/confluence/internal/page_impl.go @@ -9,6 +9,7 @@ import ( "net/http" "net/url" "strconv" + "strings" ) // NewPageService returns a new Confluence V2 Page service @@ -40,8 +41,8 @@ func (p *PageService) Get(ctx context.Context, pageID int, format string, draft // GET /wiki/api/v2/pages // // https://docs.go-atlassian.io/confluence-cloud/v2/page#get-pages -func (p *PageService) Bulk(ctx context.Context, cursor string, limit int) (*model.PageChunkScheme, *model.ResponseScheme, error) { - return p.internalClient.Bulk(ctx, cursor, limit) +func (p *PageService) Bulk(ctx context.Context, cursor string, limit int, pageIDs ...int) (*model.PageChunkScheme, *model.ResponseScheme, error) { + return p.internalClient.Bulk(ctx, cursor, limit, pageIDs...) } // GetsByLabel returns the pages of specified label. @@ -141,10 +142,17 @@ func (i *internalPageImpl) Get(ctx context.Context, pageID int, format string, d return page, response, nil } -func (i *internalPageImpl) Bulk(ctx context.Context, cursor string, limit int) (*model.PageChunkScheme, *model.ResponseScheme, error) { +func (i *internalPageImpl) Bulk(ctx context.Context, cursor string, limit int, pageIDs ...int) (*model.PageChunkScheme, *model.ResponseScheme, error) { query := url.Values{} query.Add("limit", strconv.Itoa(limit)) + if len(pageIDs) > 0 { + ids := make([]string, 0, len(pageIDs)) + for _, id := range pageIDs { + ids = append(ids, strconv.Itoa(id)) + } + query.Add("id", strings.Join(ids, ",")) + } if cursor != "" { query.Add("cursor", cursor) diff --git a/confluence/internal/page_impl_test.go b/confluence/internal/page_impl_test.go index 377f4db0..4933eb2f 100644 --- a/confluence/internal/page_impl_test.go +++ b/confluence/internal/page_impl_test.go @@ -139,9 +139,10 @@ func Test_internalPageImpl_Bulk(t *testing.T) { } type args struct { - ctx context.Context - cursor string - limit int + ctx context.Context + cursor string + limit int + pageIDs []int } testCases := []struct { @@ -179,6 +180,34 @@ func Test_internalPageImpl_Bulk(t *testing.T) { }, }, + { + name: "when the page ids are included", + args: args{ + ctx: context.TODO(), + cursor: "cursor-sample", + limit: 200, + pageIDs: []int{1, 2, 3, 4, 5, 6}, + }, + on: func(fields *fields) { + + client := mocks.NewClient(t) + + client.On("NewRequest", + context.Background(), + http.MethodGet, + "wiki/api/v2/pages?cursor=cursor-sample&id=1%2C2%2C3%2C4%2C5%2C6&limit=200", + nil). + Return(&http.Request{}, nil) + + client.On("Call", + &http.Request{}, + &model.PageChunkScheme{}). + Return(&model.ResponseScheme{}, nil) + + fields.c = client + }, + }, + { name: "when the http request cannot be created", args: args{ @@ -214,7 +243,7 @@ func Test_internalPageImpl_Bulk(t *testing.T) { newService := NewPageService(testCase.fields.c) - gotResult, gotResponse, err := newService.Bulk(testCase.args.ctx, testCase.args.cursor, testCase.args.limit) + gotResult, gotResponse, err := newService.Bulk(testCase.args.ctx, testCase.args.cursor, testCase.args.limit, testCase.args.pageIDs...) if testCase.wantErr { diff --git a/service/confluence/page.go b/service/confluence/page.go index 1df29729..b8b861ae 100644 --- a/service/confluence/page.go +++ b/service/confluence/page.go @@ -25,7 +25,7 @@ type PageConnector interface { // GET /wiki/api/v2/pages // // https://docs.go-atlassian.io/confluence-cloud/v2/page#get-pages - Bulk(ctx context.Context, cursor string, limit int) (*models.PageChunkScheme, *models.ResponseScheme, error) + Bulk(ctx context.Context, cursor string, limit int, pageIDs... int) (*models.PageChunkScheme, *models.ResponseScheme, error) // GetsByLabel returns the pages of specified label. //