Skip to content

Commit 6d83355

Browse files
authored
Support Redelivery object (#293)
* feat: add redelivery model into recipient * test: add recipient redelivery test case * test: fix nits * fix: remove redelivery test case header and rename test case
1 parent bb2a8dd commit 6d83355

File tree

3 files changed

+80
-2
lines changed

3 files changed

+80
-2
lines changed

linebot/models/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
Beacon,
5555
Link,
5656
)
57-
from .filter import( # noqa
57+
from .filter import ( # noqa
5858
Filter,
5959
DemographicFilter,
6060
GenderFilter,
@@ -126,7 +126,8 @@
126126
)
127127

128128
from .recipient import ( # noqa
129-
AudienceRecipient
129+
AudienceRecipient,
130+
RedeliveryRecipient
130131
)
131132

132133
from .responses import ( # noqa

linebot/models/recipient.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,19 @@ def __init__(self, group_id=None, **kwargs):
5656

5757
self.type = "audience"
5858
self.audience_group_id = group_id
59+
60+
61+
class RedeliveryRecipient(Recipient):
62+
"""RedeliveryRecipient."""
63+
64+
def __init__(self, request_id=None, **kwargs):
65+
"""__init__ method.
66+
67+
:param str request_id: The request ID of the narrowcast message previously sent.
68+
The request IDs is an ID issued for each Messaging API request.
69+
:param kwargs:
70+
"""
71+
super(RedeliveryRecipient, self).__init__(**kwargs)
72+
73+
self.type = "redelivery"
74+
self.request_id = request_id

tests/api/test_narrowcast_message.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
AgeFilter,
3636
AudienceRecipient,
3737
SubscriptionPeriodFilter,
38+
RedeliveryRecipient,
3839
)
3940

4041

@@ -92,6 +93,66 @@ def test_narrowcast_simple_text_message(self):
9293
}
9394
)
9495

96+
@responses.activate
97+
def test_narrowcast_redelivery_recipient_text_message(self):
98+
responses.add(
99+
responses.POST,
100+
LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/message/narrowcast',
101+
json={}, status=200,
102+
)
103+
104+
self.tested.narrowcast(
105+
self.text_message,
106+
recipient=And(
107+
AudienceRecipient(group_id=5614991017776),
108+
Not(
109+
RedeliveryRecipient(request_id='request_id_test')
110+
)
111+
),
112+
filter=Filter(demographic=AgeFilter(gte="age_35", lt="age_40")),
113+
limit=Limit(max=10),
114+
)
115+
116+
request = responses.calls[0].request
117+
self.assertEqual(
118+
request.url,
119+
LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/message/narrowcast')
120+
self.assertEqual(request.method, 'POST')
121+
self.assertEqual(
122+
json.loads(request.body),
123+
{
124+
"messages": self.message,
125+
"recipient": {
126+
"type": "operator",
127+
"and": [
128+
{
129+
"type": "audience",
130+
"audienceGroupId": 5614991017776
131+
},
132+
{
133+
"type": "operator",
134+
"not": {
135+
"type": "redelivery",
136+
"requestId": "request_id_test"
137+
}
138+
}
139+
]
140+
},
141+
"filter": {
142+
"demographic": {
143+
"type": "age",
144+
"gte": "age_35",
145+
"lt": "age_40"
146+
}
147+
},
148+
"limit": {
149+
"max": 10,
150+
"upToRemainingQuota": False,
151+
},
152+
"notificationDisabled": False,
153+
}
154+
)
155+
95156
@responses.activate
96157
def test_narrowcast_text_message(self):
97158
responses.add(

0 commit comments

Comments
 (0)