Skip to content

Commit 547ce54

Browse files
Release 5.1.0
1 parent 95d896a commit 547ce54

14 files changed

Lines changed: 247 additions & 16 deletions

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
long_description = fh.read()
77

88
NAME = "wallee"
9-
VERSION = "5.0.0"
9+
VERSION = "5.1.0"
1010

1111
REQUIRES = [
1212
"certifi >= 14.05.14",

test/constants.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from wallee import Configuration
22

33
from wallee.models import (
4+
AddressCreate,
45
LineItem,
56
LineItemType,
67
TransactionCreate,
@@ -17,7 +18,22 @@
1718

1819

1920
def get_transaction_create():
21+
address = AddressCreate(
22+
city = "Winterthur",
23+
country = "CH",
24+
email_address = "test@example.com",
25+
family_name = "Customer",
26+
given_name = "Good",
27+
postcode = "8400",
28+
postal_state = "ZH",
29+
organization_name = "Test GmbH",
30+
mobile_phone_number = "+41791234567",
31+
salutation = "Ms"
32+
)
33+
2034
return TransactionCreate(
35+
currency="CHF",
36+
auto_confirmation_enabled=True,
2137
line_items=[
2238
LineItem(
2339
name="Blue T-Shirt",
@@ -28,8 +44,9 @@ def get_transaction_create():
2844
type=LineItemType.PRODUCT,
2945
)
3046
],
31-
auto_confirmation_enabled=True,
32-
currency="CHF",
47+
billing_address=address,
48+
shipping_address=address,
49+
language="en-GB",
3350
)
3451

3552

@@ -38,4 +55,5 @@ def get_transaction_create():
3855
)
3956

4057
TEST_CARD_PAYMENT_METHOD_CONFIGURATION_ID = 1352
58+
TEST_ISR_INVOICE_PAYMENT_METHOD_CONFIGURATION_ID = 8656
4159
TEST_CUSTOMER_ID = 7311742
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import unittest
2+
3+
from constants import (
4+
API_CONFIG,
5+
SPACE_ID,
6+
get_transaction_create,
7+
FAKE_CARD_DATA,
8+
TEST_CARD_PAYMENT_METHOD_CONFIGURATION_ID,
9+
TEST_CUSTOMER_ID,
10+
)
11+
12+
from wallee.api import (
13+
TransactionServiceApi,
14+
CardProcessingServiceApi,
15+
ChargeAttemptServiceApi
16+
)
17+
from wallee.models import (
18+
TransactionState,
19+
EntityQuery,
20+
EntityQueryFilter,
21+
EntityQueryFilterType,
22+
CriteriaOperator,
23+
TokenizationMode,
24+
TransactionCompletionBehavior,
25+
CustomersPresence,
26+
)
27+
28+
class ChargeAttemptServiceTest(unittest.TestCase):
29+
"""ChargeAttemptServiceApi tests"""
30+
31+
def setUp(self):
32+
self.transaction_service = TransactionServiceApi(API_CONFIG)
33+
self.card_processing_service = CardProcessingServiceApi(API_CONFIG)
34+
self.charge_attempt_service = ChargeAttemptServiceApi(API_CONFIG)
35+
36+
def tearDown(self):
37+
pass
38+
39+
def test_search(self):
40+
"""search() should find charge attempts by given criteria"""
41+
42+
transaction_create = get_transaction_create()
43+
transaction_create.tokenization_mode = TokenizationMode.FORCE_CREATION
44+
transaction_create.customers_presence = CustomersPresence.NOT_PRESENT
45+
transaction_create.completion_behavior = TransactionCompletionBehavior.COMPLETE_DEFERRED
46+
47+
transaction = self.transaction_service.create(
48+
space_id=SPACE_ID, transaction=transaction_create)
49+
transaction_processed = self.card_processing_service.process(
50+
space_id=SPACE_ID,
51+
transaction_id=transaction.id,
52+
payment_method_configuration_id=TEST_CARD_PAYMENT_METHOD_CONFIGURATION_ID,
53+
card_data=FAKE_CARD_DATA,
54+
)
55+
56+
self.assertEqual(
57+
TransactionState.AUTHORIZED,
58+
transaction_processed.state,
59+
"State must be AUTHORIZED",
60+
)
61+
62+
entity_query_filter = EntityQueryFilter(
63+
field_name="charge.transaction.id",
64+
value=transaction.id,
65+
type=EntityQueryFilterType.LEAF,
66+
operator=CriteriaOperator.EQUALS,
67+
)
68+
entity_query = EntityQuery(filter=entity_query_filter)
69+
70+
attempts_found = self.charge_attempt_service.search(
71+
space_id=SPACE_ID, query=entity_query)
72+
73+
self.assertTrue(len(attempts_found) > 0)
74+
for attempt in attempts_found:
75+
self.assertEqual(transaction.id, attempt.linked_transaction)
76+
77+
# TODO write more API tests
78+
79+
80+
if __name__ == "__main__":
81+
unittest.main(failfast=True)
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
import unittest
2+
3+
from constants import (
4+
API_CONFIG,
5+
SPACE_ID,
6+
get_transaction_create,
7+
FAKE_CARD_DATA,
8+
TEST_CARD_PAYMENT_METHOD_CONFIGURATION_ID,
9+
TEST_ISR_INVOICE_PAYMENT_METHOD_CONFIGURATION_ID,
10+
)
11+
12+
from wallee.api import (
13+
TransactionServiceApi,
14+
CardProcessingServiceApi,
15+
TransactionInvoiceServiceApi,
16+
TransactionCompletionServiceApi,
17+
)
18+
from wallee.models import (
19+
TransactionState,
20+
TransactionInvoiceState,
21+
EntityQuery,
22+
EntityQueryFilter,
23+
EntityQueryFilterType,
24+
CriteriaOperator,
25+
TokenizationMode,
26+
TransactionCompletionBehavior,
27+
CustomersPresence,
28+
)
29+
30+
31+
class TransactionInvoiceServiceTest(unittest.TestCase):
32+
"""TransactionInvoiceServiceApi tests"""
33+
34+
def setUp(self):
35+
self.transaction_service = TransactionServiceApi(API_CONFIG)
36+
self.transaction_invoice_service = TransactionInvoiceServiceApi(API_CONFIG)
37+
self.transaction_completion_service = TransactionCompletionServiceApi(
38+
API_CONFIG)
39+
self.card_processing_service = CardProcessingServiceApi(API_CONFIG)
40+
41+
def tearDown(self):
42+
pass
43+
44+
def test_search(self):
45+
"""search() should find transaction invoice by a given criteria"""
46+
47+
transaction_create = get_transaction_create()
48+
transaction_create.tokenization_mode = TokenizationMode.FORCE_CREATION
49+
transaction_create.customers_presence = CustomersPresence.NOT_PRESENT
50+
transaction_create.completion_behavior = TransactionCompletionBehavior.COMPLETE_IMMEDIATELY
51+
transaction = self.transaction_service.create(space_id=SPACE_ID, transaction=transaction_create)
52+
53+
transaction_processed = self.card_processing_service.process(
54+
space_id=SPACE_ID,
55+
transaction_id=transaction.id,
56+
payment_method_configuration_id=TEST_CARD_PAYMENT_METHOD_CONFIGURATION_ID,
57+
card_data=FAKE_CARD_DATA,
58+
)
59+
60+
self.assertEqual(
61+
TransactionState.FULFILL,
62+
transaction_processed.state,
63+
"State must be FULFILL",
64+
)
65+
66+
entity_query_filter = EntityQueryFilter(
67+
# linkedTransaction does not work here as criteria
68+
field_name="completion.lineItemVersion.transaction.id",
69+
value=transaction_processed.id,
70+
type=EntityQueryFilterType.LEAF,
71+
operator=CriteriaOperator.EQUALS,
72+
)
73+
entity_query = EntityQuery(filter=entity_query_filter)
74+
75+
invoices_found = self.transaction_invoice_service.search(
76+
space_id=SPACE_ID, query=entity_query)
77+
78+
self.assertTrue(len(invoices_found) > 0,
79+
"Should find invoice", )
80+
81+
for invoice in invoices_found:
82+
self.assertEqual(TransactionInvoiceState.NOT_APPLICABLE, invoice.state,
83+
"Invoice paid by card is expected to be of NOT_APPLICABLE state")
84+
85+
86+
87+
def test_derecognize_transaction_invoice(self):
88+
"""mark_as_derecognized() should derecognize open invoice"""
89+
90+
transaction_create = get_transaction_create()
91+
transaction_create.tokenization_mode = TokenizationMode.FORCE_CREATION
92+
transaction_create.customers_presence = CustomersPresence.NOT_PRESENT
93+
transaction_create.completion_behavior = TransactionCompletionBehavior.COMPLETE_DEFERRED
94+
95+
# we want invoice in OPEN state (OPEN invoices can be derecognized), so we force payment by invoice
96+
transaction_create.allowed_payment_method_configurations = [TEST_ISR_INVOICE_PAYMENT_METHOD_CONFIGURATION_ID]
97+
transaction = self.transaction_service.create(space_id=SPACE_ID, transaction=transaction_create)
98+
99+
transaction_processed = self.transaction_service.process_without_user_interaction(
100+
space_id=SPACE_ID, id=transaction.id)
101+
102+
transaction_completion = self.transaction_completion_service.complete_online(
103+
space_id=SPACE_ID, id=transaction_processed.id)
104+
105+
entity_query_filter = EntityQueryFilter(
106+
field_name="completion.lineItemVersion.transaction.id",
107+
value=transaction_processed.id,
108+
type=EntityQueryFilterType.LEAF,
109+
operator=CriteriaOperator.EQUALS,
110+
)
111+
entity_query = EntityQuery(filter=entity_query_filter)
112+
113+
invoices_found = self.transaction_invoice_service.search(
114+
space_id=SPACE_ID, query=entity_query)
115+
116+
self.assertTrue(len(invoices_found) > 0,
117+
"Should find invoice", )
118+
119+
found_invoice = invoices_found[0]
120+
121+
self.assertEqual(TransactionInvoiceState.OPEN, found_invoice.state,
122+
"Transaction paid by invoice should create invoice in OPEN state" )
123+
124+
derecognized_invoice = self.transaction_invoice_service.mark_as_derecognized(
125+
space_id=SPACE_ID, id=found_invoice.id);
126+
127+
self.assertEqual(TransactionInvoiceState.DERECOGNIZED, derecognized_invoice.state,
128+
"Expected DERECOGNIZED invoice state")
129+
130+
131+
if __name__ == "__main__":
132+
unittest.main(failfast=True)

test/test_transaction_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ def test_fetch_one_click_tokens_with_credentials_no_tokens(self):
271271
self.assertEqual(0, len(tokens), "Should be no tokens yet")
272272

273273
def test_fetch_payment_methods_with_credentials(self):
274-
"""fetch_one_click_tokens_with_credentials() should return one-click payment tokens (if any) for provided transaction"""
274+
"""fetch_payment_methods_with_credentials() should return payment methods (if any) for credentials"""
275275

276276
transaction = self.transaction_service.create(
277277
space_id=SPACE_ID, transaction=get_transaction_create())

wallee/api/charge_flow_service_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ def fetch_charge_flow_payment_page_url_with_http_info(self, space_id, id, **kwar
419419
body_params = None
420420
# HTTP header `Accept`
421421
header_params['Accept'] = self.api_client.select_header_accept(
422-
['text/plain;charset=utf-8', 'application/json'])
422+
['application/json', 'text/plain;charset=utf-8'])
423423

424424
# Authentication setting
425425
auth_settings = []

wallee/api/human_user_service_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ def export_with_http_info(self, request, **kwargs):
395395
body_params = params['request']
396396
# HTTP header `Accept`
397397
header_params['Accept'] = self.api_client.select_header_accept(
398-
['text/csv', 'application/json;charset=utf-8'])
398+
['application/json;charset=utf-8', 'text/csv'])
399399

400400
# HTTP header `Content-Type`
401401
header_params['Content-Type'] = self.api_client.select_header_content_type(

wallee/api/transaction_iframe_service_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def javascript_url_with_http_info(self, space_id, id, **kwargs):
9898
body_params = None
9999
# HTTP header `Accept`
100100
header_params['Accept'] = self.api_client.select_header_accept(
101-
['text/plain;charset=utf-8', 'application/json'])
101+
['application/json', 'text/plain;charset=utf-8'])
102102

103103
# Authentication setting
104104
auth_settings = []

wallee/api/transaction_lightbox_service_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def javascript_url_with_http_info(self, space_id, id, **kwargs):
9898
body_params = None
9999
# HTTP header `Accept`
100100
header_params['Accept'] = self.api_client.select_header_accept(
101-
['text/plain;charset=utf-8', 'application/json'])
101+
['application/json', 'text/plain;charset=utf-8'])
102102

103103
# Authentication setting
104104
auth_settings = []

wallee/api/transaction_mobile_sdk_service_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def payment_form_url_with_http_info(self, credentials, **kwargs):
9090
body_params = None
9191
# HTTP header `Accept`
9292
header_params['Accept'] = self.api_client.select_header_accept(
93-
['text/plain;charset=utf-8', 'application/json'])
93+
['application/json', 'text/plain;charset=utf-8'])
9494

9595
# Authentication setting
9696
auth_settings = []

0 commit comments

Comments
 (0)