3
3
4
4
import pytest
5
5
6
- from littlepay .api .groups import GroupResponse , GroupsMixin
6
+ from littlepay .api import ListResponse
7
+ from littlepay .api .groups import GroupFundingSourceResponse , GroupResponse , GroupsMixin
8
+
9
+
10
+ @pytest .fixture
11
+ def ListResponse_GroupFundingSources ():
12
+ items = [
13
+ dict (
14
+ id = "0" ,
15
+ participant_id = "zero_0" ,
16
+ concession_expiry = "2024-03-19T20:00:00Z" ,
17
+ concession_created_at = "2024-03-19T20:00:00Z" ,
18
+ concession_updated_at = "2024-03-19T20:00:00Z" ,
19
+ ),
20
+ dict (
21
+ id = "1" ,
22
+ participant_id = "one_1" ,
23
+ concession_expiry = "2024-03-19T20:00:00Z" ,
24
+ concession_created_at = "2024-03-19T20:00:00Z" ,
25
+ concession_updated_at = "2024-03-19T20:00:00Z" ,
26
+ ),
27
+ dict (id = "2" , participant_id = "two_2" , concession_expiry = "" , concession_created_at = "" ),
28
+ ]
29
+ return ListResponse (list = items , total_count = 3 )
7
30
8
31
9
32
@pytest .fixture
@@ -28,6 +51,13 @@ def mock_ClientProtocol_post_link_concession_group_funding_source(mocker):
28
51
return mocker .patch ("littlepay.api.ClientProtocol._post" , side_effect = lambda * args , ** kwargs : response )
29
52
30
53
54
+ @pytest .fixture
55
+ def mock_ClientProtocol_put_update_concession_group_funding_source (mocker , ListResponse_GroupFundingSources ):
56
+ return mocker .patch (
57
+ "littlepay.api.ClientProtocol._put" , side_effect = lambda * args , ** kwargs : ListResponse_GroupFundingSources
58
+ )
59
+
60
+
31
61
def test_GroupResponse_csv ():
32
62
group = GroupResponse ("id" , "label" , "participant" )
33
63
assert group .csv () == "id,label,participant"
@@ -40,6 +70,42 @@ def test_GroupResponse_csv_header():
40
70
assert GroupResponse .csv_header () == "id,label,participant_id"
41
71
42
72
73
+ def test_GroupFundingSourceResponse_no_dates ():
74
+ response = GroupFundingSourceResponse ("id" , "participant_id" )
75
+
76
+ assert response .id == "id"
77
+ assert response .participant_id == "participant_id"
78
+ assert response .concession_expiry is None
79
+ assert response .concession_created_at is None
80
+ assert response .concession_updated_at is None
81
+
82
+
83
+ def test_GroupFundingSourceResponse_empty_dates ():
84
+ response = GroupFundingSourceResponse ("id" , "participant_id" , "" , "" , "" )
85
+
86
+ assert response .id == "id"
87
+ assert response .participant_id == "participant_id"
88
+ assert response .concession_expiry is None
89
+ assert response .concession_created_at is None
90
+ assert response .concession_updated_at is None
91
+
92
+
93
+ def test_GroupFundingSourceResponse_with_dates ():
94
+ str_date = "2024-03-19T20:00:00Z"
95
+ expected_date = datetime (2024 , 3 , 19 , 20 , 0 , 0 , tzinfo = timezone .utc )
96
+
97
+ response = GroupFundingSourceResponse ("id" , "participant_id" , str_date , str_date , str_date )
98
+
99
+ assert response .id == "id"
100
+ assert response .participant_id == "participant_id"
101
+ assert response .concession_expiry == expected_date
102
+ assert response .concession_expiry .tzinfo == timezone .utc
103
+ assert response .concession_created_at == expected_date
104
+ assert response .concession_created_at .tzinfo == timezone .utc
105
+ assert response .concession_updated_at == expected_date
106
+ assert response .concession_updated_at .tzinfo == timezone .utc
107
+
108
+
43
109
def test_GroupsMixin_concession_groups_endpoint (url ):
44
110
client = GroupsMixin ()
45
111
@@ -171,3 +237,20 @@ def test_GroupsMixin_link_concession_group_funding_source_expiry(
171
237
endpoint , {"id" : "funding-source-1234" , "concession_expiry" : "formatted concession expiry" }, dict
172
238
)
173
239
assert result == {"status_code" : 201 }
240
+
241
+
242
+ def test_GroupsMixin_update_concession_group_funding_source_expiry (
243
+ mock_ClientProtocol_put_update_concession_group_funding_source , ListResponse_GroupFundingSources , mocker
244
+ ):
245
+ client = GroupsMixin ()
246
+ mocker .patch .object (client , "_format_concession_expiry" , return_value = "formatted concession expiry" )
247
+
248
+ result = client .update_concession_group_funding_source_expiry ("group-1234" , "funding-source-1234" , datetime .now ())
249
+
250
+ endpoint = client .concession_group_funding_source_endpoint ("group-1234" )
251
+ mock_ClientProtocol_put_update_concession_group_funding_source .assert_called_once_with (
252
+ endpoint , {"id" : "funding-source-1234" , "concession_expiry" : "formatted concession expiry" }, ListResponse
253
+ )
254
+
255
+ expected = GroupFundingSourceResponse (** ListResponse_GroupFundingSources .list [0 ])
256
+ assert result == expected
0 commit comments