Skip to content

Commit 032c1f8

Browse files
authored
Add tests for ignore-empty series (#518)
This PR adds tests for these changes to correctly ignore empty values. - #496 - #497 - #498
1 parent 561f11d commit 032c1f8

File tree

3 files changed

+208
-0
lines changed

3 files changed

+208
-0
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package tests
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
"net/http/httptest"
7+
"net/url"
8+
"reflect"
9+
"testing"
10+
11+
"github.com/line/line-bot-sdk-go/v8/linebot/channel_access_token"
12+
)
13+
14+
func TestIssueStatelessChannelTokenWithHttpInfo(t *testing.T) {
15+
tests := []struct {
16+
name string
17+
grantType string
18+
clientAssertionType string
19+
clientAssertion string
20+
clientId string
21+
clientSecret string
22+
expectedFormData url.Values
23+
}{
24+
{
25+
name: "Using client assertion",
26+
grantType: "client_credentials",
27+
clientAssertionType: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
28+
clientAssertion: "assertion",
29+
clientId: "",
30+
clientSecret: "",
31+
expectedFormData: url.Values{
32+
"grant_type": {"client_credentials"},
33+
"client_assertion_type": {"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},
34+
"client_assertion": {"assertion"},
35+
},
36+
},
37+
{
38+
name: "Using clientId and clientSecret",
39+
grantType: "client_credentials",
40+
clientAssertionType: "",
41+
clientAssertion: "",
42+
clientId: "client_id",
43+
clientSecret: "client_secret",
44+
expectedFormData: url.Values{
45+
"grant_type": {"client_credentials"},
46+
"client_id": {"client_id"},
47+
"client_secret": {"client_secret"},
48+
},
49+
},
50+
}
51+
52+
for _, tt := range tests {
53+
t.Run(tt.name, func(t *testing.T) {
54+
mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
55+
if err := r.ParseForm(); err != nil {
56+
t.Fatalf("Failed to parse form: %v", err)
57+
}
58+
if !reflect.DeepEqual(r.PostForm, tt.expectedFormData) {
59+
t.Errorf("Expected form data: %v, got: %v", tt.expectedFormData, r.PostForm)
60+
}
61+
w.WriteHeader(http.StatusOK)
62+
json.NewEncoder(w).Encode(channel_access_token.IssueStatelessChannelAccessTokenResponse{
63+
AccessToken: "test_token",
64+
TokenType: "Bearer",
65+
ExpiresIn: 3600,
66+
})
67+
}))
68+
defer mockServer.Close()
69+
70+
client, err := channel_access_token.NewChannelAccessTokenAPI(
71+
channel_access_token.WithEndpoint(mockServer.URL),
72+
)
73+
if err != nil {
74+
t.Fatalf("Failed to create client: %v", err)
75+
}
76+
77+
_, result, err := client.IssueStatelessChannelTokenWithHttpInfo(
78+
tt.grantType,
79+
tt.clientAssertionType,
80+
tt.clientAssertion,
81+
tt.clientId,
82+
tt.clientSecret,
83+
)
84+
85+
if err != nil {
86+
t.Fatalf("Unexpected error: %v", err)
87+
}
88+
89+
if result.AccessToken != "test_token" {
90+
t.Errorf("Expected AccessToken: test_token, got: %s", result.AccessToken)
91+
}
92+
})
93+
}
94+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package tests
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
"net/http/httptest"
7+
"net/url"
8+
"reflect"
9+
"testing"
10+
11+
"github.com/line/line-bot-sdk-go/v8/linebot/messaging_api"
12+
)
13+
14+
func TestGetGroupMembersIdsWithHttpInfo(t *testing.T) {
15+
tests := []struct {
16+
name string
17+
groupId string
18+
start string
19+
expectedQueryParams url.Values
20+
}{
21+
{
22+
name: "With start token",
23+
groupId: "testGroup",
24+
start: "start",
25+
expectedQueryParams: url.Values{
26+
"start": {"start"},
27+
},
28+
},
29+
{
30+
name: "Without start token",
31+
groupId: "testGroup",
32+
start: "",
33+
expectedQueryParams: url.Values{},
34+
},
35+
}
36+
37+
for _, tt := range tests {
38+
t.Run(tt.name, func(t *testing.T) {
39+
mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
40+
if !reflect.DeepEqual(r.URL.Query(), tt.expectedQueryParams) {
41+
t.Fatalf("Expected query: %v, got: %v", tt.expectedQueryParams, r.URL.Query())
42+
}
43+
w.WriteHeader(http.StatusOK)
44+
json.NewEncoder(w).Encode(messaging_api.MembersIdsResponse{MemberIds: []string{"member1", "member2"}, Next: "abcdef"})
45+
}))
46+
defer mockServer.Close()
47+
48+
client, err := messaging_api.NewMessagingApiAPI(
49+
"channelToken",
50+
messaging_api.WithEndpoint(mockServer.URL),
51+
)
52+
if err != nil {
53+
t.Fatalf("Failed to create client: %v", err)
54+
}
55+
56+
_, result, err := client.GetGroupMembersIdsWithHttpInfo(tt.groupId, tt.start)
57+
58+
if err != nil {
59+
t.Fatalf("Unexpected error: %v", err)
60+
}
61+
62+
if !reflect.DeepEqual(result.MemberIds, []string{"member1", "member2"}) {
63+
t.Errorf("Expected MemberIds: [\"member1\", \"member2\"], got: %s", result.MemberIds)
64+
}
65+
if result.Next != "abcdef" {
66+
t.Errorf("Expected Next: abcdef, got: %s", result.Next)
67+
}
68+
})
69+
}
70+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package tests
2+
3+
import (
4+
"encoding/json"
5+
"testing"
6+
7+
"github.com/line/line-bot-sdk-go/v8/linebot/messaging_api"
8+
)
9+
10+
func TestLimitSerialization(t *testing.T) {
11+
tests := []struct {
12+
name string
13+
limit messaging_api.Limit
14+
expected string
15+
}{
16+
{
17+
name: "Max is set",
18+
limit: messaging_api.Limit{Max: 10, UpToRemainingQuota: true},
19+
expected: `{"max":10,"upToRemainingQuota":true}`,
20+
},
21+
{
22+
name: "Max is zero (omitempty)",
23+
limit: messaging_api.Limit{Max: 0, UpToRemainingQuota: true},
24+
expected: `{"upToRemainingQuota":true}`,
25+
},
26+
{
27+
name: "Max is zero and UpToRemainingQuota is false",
28+
limit: messaging_api.Limit{Max: 0, UpToRemainingQuota: false},
29+
expected: `{"upToRemainingQuota":false}`,
30+
},
31+
}
32+
33+
for _, tt := range tests {
34+
t.Run(tt.name, func(t *testing.T) {
35+
data, err := json.Marshal(tt.limit)
36+
if err != nil {
37+
t.Fatalf("Failed to marshal Limit: %v", err)
38+
}
39+
if string(data) != tt.expected {
40+
t.Errorf("Expected JSON: %s, got: %s", tt.expected, string(data))
41+
}
42+
})
43+
}
44+
}

0 commit comments

Comments
 (0)