Skip to content

Commit 308e2b8

Browse files
authored
Merge pull request #278 from michimani/feature/272/fix-liking-users-api-parameters
feat: support max_results and pagination_token parameter at GET /2/tweets/:id/liking_users #272
2 parents 279e364 + d29c0f2 commit 308e2b8

2 files changed

Lines changed: 49 additions & 33 deletions

File tree

tweet/like/types/parameter.go

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,36 @@ import (
1111
"github.com/michimani/gotwi/internal/util"
1212
)
1313

14+
type ListUsersMaxResults int
15+
16+
func (m ListUsersMaxResults) Valid() bool {
17+
return m > 0 && m <= 100
18+
}
19+
20+
func (m ListUsersMaxResults) String() string {
21+
return strconv.Itoa(int(m))
22+
}
23+
1424
type ListUsersInput struct {
1525
accessToken string
1626

1727
// Path parameter
1828
ID string // Tweet ID
1929

2030
// Query parameters
21-
Expansions fields.ExpansionList
22-
MediaFields fields.MediaFieldList
23-
PlaceFields fields.PlaceFieldList
24-
PollFields fields.PollFieldList
25-
TweetFields fields.TweetFieldList
26-
UserFields fields.UserFieldList
31+
Expansions fields.ExpansionList
32+
MaxResults ListUsersMaxResults // default 100
33+
PaginationToken string
34+
TweetFields fields.TweetFieldList
35+
UserFields fields.UserFieldList
2736
}
2837

2938
var listUsersQueryParameters = map[string]struct{}{
30-
"expansions": {},
31-
"media.fields": {},
32-
"place.fields": {},
33-
"poll.fields": {},
34-
"tweet.fields": {},
35-
"user.fields": {},
39+
"expansions": {},
40+
"max_results": {},
41+
"pagination_token": {},
42+
"tweet.fields": {},
43+
"user.fields": {},
3644
}
3745

3846
func (p *ListUsersInput) SetAccessToken(token string) {
@@ -66,7 +74,16 @@ func (p *ListUsersInput) Body() (io.Reader, error) {
6674

6775
func (p *ListUsersInput) ParameterMap() map[string]string {
6876
m := map[string]string{}
69-
m = fields.SetFieldsParams(m, p.Expansions, p.MediaFields, p.PlaceFields, p.PollFields, p.TweetFields, p.UserFields)
77+
78+
if p.MaxResults.Valid() {
79+
m["max_results"] = p.MaxResults.String()
80+
}
81+
82+
if p.PaginationToken != "" {
83+
m["pagination_token"] = p.PaginationToken
84+
}
85+
86+
m = fields.SetFieldsParams(m, p.Expansions, p.TweetFields, p.UserFields)
7087

7188
return m
7289
}

tweet/like/types/parameter_test.go

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -90,28 +90,28 @@ func Test_ListUsersInput_ResolveEndpoint(t *testing.T) {
9090
expect: endpointRoot + "test-id" + "?expansions=ex1%2Cex2",
9191
},
9292
{
93-
name: "with media.fields",
93+
name: "with max_results",
9494
params: &types.ListUsersInput{
95-
ID: "test-id",
96-
MediaFields: fields.MediaFieldList{"tf1", "tf2"},
95+
ID: "test-id",
96+
MaxResults: types.ListUsersMaxResults(42),
9797
},
98-
expect: endpointRoot + "test-id" + "?media.fields=tf1%2Ctf2",
98+
expect: endpointRoot + "test-id" + "?max_results=42",
9999
},
100100
{
101-
name: "with place.fields",
101+
name: "with invalid max_results",
102102
params: &types.ListUsersInput{
103-
ID: "test-id",
104-
PlaceFields: fields.PlaceFieldList{"tf1", "tf2"},
103+
ID: "test-id",
104+
MaxResults: types.ListUsersMaxResults(5000),
105105
},
106-
expect: endpointRoot + "test-id" + "?place.fields=tf1%2Ctf2",
106+
expect: endpointRoot + "test-id",
107107
},
108108
{
109-
name: "with poll.fields",
109+
name: "with pagination_token",
110110
params: &types.ListUsersInput{
111-
ID: "test-id",
112-
PollFields: fields.PollFieldList{"tf1", "tf2"},
111+
ID: "test-id",
112+
PaginationToken: "p-token",
113113
},
114-
expect: endpointRoot + "test-id" + "?poll.fields=tf1%2Ctf2",
114+
expect: endpointRoot + "test-id" + "?pagination_token=p-token",
115115
},
116116
{
117117
name: "with tweets.fields",
@@ -132,15 +132,14 @@ func Test_ListUsersInput_ResolveEndpoint(t *testing.T) {
132132
{
133133
name: "all query parameters",
134134
params: &types.ListUsersInput{
135-
ID: "test-id",
136-
Expansions: fields.ExpansionList{"ex"},
137-
MediaFields: fields.MediaFieldList{"mf"},
138-
PlaceFields: fields.PlaceFieldList{"plf"},
139-
PollFields: fields.PollFieldList{"pof"},
140-
UserFields: fields.UserFieldList{"uf"},
141-
TweetFields: fields.TweetFieldList{"tf"},
135+
ID: "test-id",
136+
Expansions: fields.ExpansionList{"ex"},
137+
MaxResults: types.ListUsersMaxResults(20),
138+
PaginationToken: "p-token",
139+
UserFields: fields.UserFieldList{"uf"},
140+
TweetFields: fields.TweetFieldList{"tf"},
142141
},
143-
expect: endpointRoot + "test-id" + "?expansions=ex&media.fields=mf&place.fields=plf&poll.fields=pof&tweet.fields=tf&user.fields=uf",
142+
expect: endpointRoot + "test-id" + "?expansions=ex&max_results=20&pagination_token=p-token&tweet.fields=tf&user.fields=uf",
144143
},
145144
{
146145
name: "has no required parameter",

0 commit comments

Comments
 (0)