Skip to content

Commit 172e17c

Browse files
authored
Merge pull request #15 from nanato12/feature/add-test
Add tests
2 parents 0e01478 + db1b144 commit 172e17c

File tree

15 files changed

+973
-0
lines changed

15 files changed

+973
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#[cfg(test)]
2+
mod account_link_test {
3+
extern crate line_bot_sdk_rust as line;
4+
5+
use line::events::source::SouceType;
6+
use line::events::{EventType, Events};
7+
8+
#[test]
9+
fn test_parse_valid() {
10+
let string = r#"
11+
{
12+
"destination": "xxxxxxxxxx",
13+
"events": [
14+
{
15+
"replyToken": "b60d432864f44d079f6d8efe86cf404b",
16+
"type": "accountLink",
17+
"mode": "active",
18+
"source": {
19+
"userId": "U91eeaf62d...",
20+
"type": "user"
21+
},
22+
"timestamp": 1513669370317,
23+
"link": {
24+
"result": "ok",
25+
"nonce": "xxxxxxxxxxxxxxx"
26+
}
27+
}
28+
]
29+
}
30+
"#;
31+
32+
let events: Events = serde_json::from_str(&string).unwrap();
33+
34+
// events length test
35+
assert_eq!(1, events.events.len());
36+
37+
// event type test
38+
match &events.events[0].r#type {
39+
EventType::AccountLinkEvent(account_link_event) => {
40+
// check events field value
41+
assert_eq!("xxxxxxxxxx", events.destination);
42+
43+
// check account_link_event field value
44+
assert_eq!(
45+
"b60d432864f44d079f6d8efe86cf404b",
46+
account_link_event.reply_token
47+
);
48+
assert_eq!("active", account_link_event.mode);
49+
assert_eq!(1513669370317, account_link_event.timestamp);
50+
51+
// check source type
52+
match &account_link_event.source.r#type {
53+
SouceType::User(source) => {
54+
assert_eq!("U91eeaf62d...", source.user_id);
55+
}
56+
_ => panic!("Expected SouceType::User"),
57+
}
58+
59+
// check link field
60+
assert_eq!("ok", account_link_event.link.result);
61+
assert_eq!("xxxxxxxxxxxxxxx", account_link_event.link.nonce);
62+
}
63+
_ => panic!("Expected EventType::AccountLinkEvent"),
64+
}
65+
}
66+
}

tests/events_test/join_test.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#[test]
2+
fn example_test() {
3+
assert_eq!(4, 2 + 2);
4+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod text_message_test;
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#[cfg(test)]
2+
mod text_message_test {
3+
extern crate line_bot_sdk_rust as line;
4+
5+
use line::events::messages::MessageType;
6+
use line::events::source::SouceType;
7+
use line::events::{EventType, Events};
8+
9+
#[test]
10+
fn test_parse_valid() {
11+
let string = r#"
12+
{
13+
"destination": "xxxxxxxxxx",
14+
"events": [
15+
{
16+
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
17+
"type": "message",
18+
"mode": "active",
19+
"timestamp": 1462629479859,
20+
"source": {
21+
"type": "user",
22+
"userId": "U4af4980629..."
23+
},
24+
"message": {
25+
"id": "325708",
26+
"type": "text",
27+
"text": "@example Hello, world! (love)",
28+
"emojis": [
29+
{
30+
"index": 14,
31+
"length": 6,
32+
"productId": "5ac1bfd5040ab15980c9b435",
33+
"emojiId": "001"
34+
}
35+
],
36+
"mention": {
37+
"mentionees": [
38+
{
39+
"index": 0,
40+
"length": 8,
41+
"userId": "U850014438e..."
42+
}
43+
]
44+
}
45+
}
46+
}
47+
]
48+
}
49+
"#;
50+
51+
let events: Events = serde_json::from_str(&string).unwrap();
52+
53+
// events length test
54+
assert_eq!(1, events.events.len());
55+
56+
// event type test
57+
match &events.events[0].r#type {
58+
EventType::MessageEvent(message_event) => {
59+
// check events field value
60+
assert_eq!("xxxxxxxxxx", events.destination);
61+
62+
// check message_event field value
63+
assert_eq!("nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", message_event.reply_token);
64+
assert_eq!("active", message_event.mode);
65+
assert_eq!(1462629479859, message_event.timestamp);
66+
67+
// check source type
68+
match &message_event.source.r#type {
69+
SouceType::User(source) => {
70+
assert_eq!("U4af4980629...", source.user_id);
71+
}
72+
_ => panic!("Expected SouceType::User"),
73+
}
74+
75+
// check text_message_event field value
76+
match &message_event.message.r#type {
77+
MessageType::TextMessage(text_message) => {
78+
assert_eq!("325708", text_message.id);
79+
assert_eq!("@example Hello, world! (love)", text_message.text);
80+
81+
// check text_message_event.emojis field value
82+
match &text_message.emojis {
83+
Some(emojis) => {
84+
assert_eq!(14, emojis[0].index);
85+
assert_eq!(6, emojis[0].length);
86+
assert_eq!("5ac1bfd5040ab15980c9b435", emojis[0].product_id);
87+
assert_eq!("001", emojis[0].emoji_id);
88+
}
89+
None => panic!("Expected text_message.emojis"),
90+
};
91+
92+
// check text_message_event.mention field value
93+
match &text_message.mention {
94+
Some(mention) => {
95+
assert_eq!(0, mention.mentionees[0].index);
96+
assert_eq!(8, mention.mentionees[0].length);
97+
98+
// check text_message_event.mention.mentionees[0].user_id field value
99+
match &mention.mentionees[0].user_id {
100+
Some(user_id) => {
101+
assert_eq!("U850014438e...", user_id);
102+
}
103+
_ => panic!(
104+
"Expected text_message_event.mention.mentionees[0].user_id"
105+
),
106+
}
107+
}
108+
None => panic!("Expected text_message_event.mention"),
109+
};
110+
}
111+
_ => panic!("Expected MessageType::TextMessage"),
112+
}
113+
}
114+
_ => panic!("Expected EventType::MessageEvent"),
115+
}
116+
}
117+
}

tests/events_test/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pub mod account_link_test;
2+
pub mod messages_test;

tests/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
pub mod events_test;
2+
pub mod messages_test;
3+
pub mod objects_test;
4+
pub mod other_test;

tests/messages_test/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod text_message_test;
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#[cfg(test)]
2+
mod text_message_test {
3+
extern crate line_bot_sdk_rust as line;
4+
5+
use line::messages::{Emoji, SendMessage, SendMessageType, TextMessage};
6+
use serde_json::{json, Value};
7+
8+
#[test]
9+
fn test_text_message_valid() {
10+
let expected_str: &str = r#"
11+
{
12+
"type": "text",
13+
"text": "Hello, world"
14+
}
15+
"#;
16+
let expected_json: Value = serde_json::from_str(expected_str).unwrap();
17+
18+
let message: SendMessage = SendMessage {
19+
r#type: SendMessageType::TextMessage(TextMessage {
20+
text: String::from("Hello, world"),
21+
emojis: None,
22+
}),
23+
};
24+
assert_eq!(json!(message), expected_json);
25+
}
26+
27+
#[test]
28+
fn test_text_message_invalid() {
29+
let expected_str: &str = r#"
30+
{
31+
"type": "text",
32+
"text": "Hello, world"
33+
}
34+
"#;
35+
let expected_json: Value = serde_json::from_str(expected_str).unwrap();
36+
37+
let message: SendMessage = SendMessage {
38+
r#type: SendMessageType::TextMessage(TextMessage {
39+
text: String::from("xxxxxxx"),
40+
emojis: None,
41+
}),
42+
};
43+
assert_ne!(json!(message), expected_json);
44+
}
45+
#[test]
46+
fn test_text_message_with_emoji_valid() {
47+
let expected_str: &str = r#"
48+
{
49+
"type": "text",
50+
"text": "$ LINE emoji $",
51+
"emojis": [
52+
{
53+
"index": 0,
54+
"productId": "5ac1bfd5040ab15980c9b435",
55+
"emojiId": "001"
56+
},
57+
{
58+
"index": 13,
59+
"productId": "5ac1bfd5040ab15980c9b435",
60+
"emojiId": "002"
61+
}
62+
]
63+
}
64+
"#;
65+
let expected_json: Value = serde_json::from_str(expected_str).unwrap();
66+
67+
let message: SendMessage = SendMessage {
68+
r#type: SendMessageType::TextMessage(TextMessage {
69+
text: String::from("$ LINE emoji $"),
70+
emojis: Some(vec![
71+
Emoji {
72+
index: 0,
73+
product_id: String::from("5ac1bfd5040ab15980c9b435"),
74+
emoji_id: String::from("001"),
75+
},
76+
Emoji {
77+
index: 13,
78+
product_id: String::from("5ac1bfd5040ab15980c9b435"),
79+
emoji_id: String::from("002"),
80+
},
81+
]),
82+
}),
83+
};
84+
assert_eq!(json!(message), expected_json);
85+
}
86+
87+
#[test]
88+
fn test_text_message_with_emoji_invalid() {
89+
let expected_str: &str = r#"
90+
{
91+
"type": "text",
92+
"text": "$ LINE emoji $",
93+
"emojis": [
94+
{
95+
"index": 0,
96+
"productId": "5ac1bfd5040ab15980c9b435",
97+
"emojiId": "001"
98+
},
99+
{
100+
"index": 13,
101+
"productId": "5ac1bfd5040ab15980c9b435",
102+
"emojiId": "002"
103+
}
104+
]
105+
}
106+
"#;
107+
let expected_json: Value = serde_json::from_str(expected_str).unwrap();
108+
let message: SendMessage = SendMessage {
109+
r#type: SendMessageType::TextMessage(TextMessage {
110+
text: String::from("xxxxxxx"),
111+
emojis: Some(vec![
112+
Emoji {
113+
index: 1,
114+
product_id: String::from("xxxxxxxxxxxxxxx"),
115+
emoji_id: String::from("001"),
116+
},
117+
Emoji {
118+
index: 12,
119+
product_id: String::from("xxxxxxxxxxxxxxx"),
120+
emoji_id: String::from("002"),
121+
},
122+
]),
123+
}),
124+
};
125+
assert_ne!(json!(message), expected_json);
126+
}
127+
}

0 commit comments

Comments
 (0)