1
+ import os
2
+
3
+ from bunq import ApiEnvironmentType
4
+ from bunq .sdk .context .api_context import ApiContext
5
+ from bunq .sdk .context .bunq_context import BunqContext
6
+ from bunq .sdk .json import converter
7
+ from bunq .sdk .model .generated .endpoint import OauthClient
1
8
from tests .bunq_test import BunqSdkTestCase
2
9
3
10
@@ -7,4 +14,89 @@ class TestPsd2Context(BunqSdkTestCase):
7
14
Psd2Context
8
15
"""
9
16
10
- # TODO: Implement PSD2
17
+ _FILE_TEST_CONFIGURATION = '/assets/bunq-psd2-test.conf'
18
+ _FILE_TEST_OAUTH = '/assets/bunq-oauth-test.conf'
19
+
20
+ _FILE_TEST_CERTIFICATE = '/assets/cert.pem'
21
+ _FILE_TEST_CERTIFICATE_CHAIN = '/assets/cert.pem'
22
+ _FILE_TEST_PRIVATE_KEY = '/assets/key.pem'
23
+
24
+ _TEST_DEVICE_DESCRIPTION = 'PSD2TestDevice'
25
+
26
+ @classmethod
27
+ def setUpClass (cls ) -> None :
28
+ cls ._FILE_MODE_READ = ApiContext ._FILE_MODE_READ
29
+ cls ._FILE_TEST_CONFIGURATION_PATH_FULL = (cls ._get_directory_test_root () + cls ._FILE_TEST_CONFIGURATION )
30
+ cls ._FILE_TEST_OAUTH_PATH_FULL = (cls ._get_directory_test_root () + cls ._FILE_TEST_OAUTH )
31
+ cls ._FILE_TEST_CERTIFICATE_PATH_FULL = (cls ._get_directory_test_root () + cls ._FILE_TEST_CERTIFICATE )
32
+ cls ._FILE_TEST_CERTIFICATE_CHAIN_PATH_FULL = (cls ._get_directory_test_root () + cls ._FILE_TEST_CERTIFICATE_CHAIN )
33
+ cls ._FILE_TEST_PRIVATE_KEY_PATH_FULL = (cls ._get_directory_test_root () + cls ._FILE_TEST_PRIVATE_KEY )
34
+ cls .setup_test_data ()
35
+
36
+ @classmethod
37
+ def setup_test_data (cls ) -> None :
38
+ if not os .path .isfile (cls ._FILE_TEST_CONFIGURATION_PATH_FULL ):
39
+ try :
40
+ BunqContext .load_api_context (cls ._create_api_context ())
41
+ except FileNotFoundError :
42
+ return
43
+
44
+ api_context = ApiContext .restore (cls ._get_directory_test_root () + cls ._FILE_TEST_CONFIGURATION )
45
+ BunqContext .load_api_context (api_context )
46
+
47
+ def test_create_psd2_context (self ) -> None :
48
+ if os .path .isfile (self ._FILE_TEST_CONFIGURATION_PATH_FULL ):
49
+ return
50
+
51
+ try :
52
+ api_context = self ._create_api_context ()
53
+ BunqContext .load_api_context (api_context )
54
+
55
+ self .assertTrue (os .path .isfile (self ._FILE_TEST_CONFIGURATION_PATH_FULL ))
56
+
57
+ except AssertionError :
58
+ raise AssertionError
59
+
60
+ def test_create_oauth_client (self ) -> None :
61
+ if os .path .isfile (self ._FILE_TEST_OAUTH ):
62
+ return
63
+
64
+ try :
65
+ client_id = OauthClient .create ().value
66
+ oauth_client = OauthClient .get (client_id ).value
67
+
68
+ self .assertIsNotNone (oauth_client )
69
+
70
+ serialized_client = converter .class_to_json (oauth_client )
71
+
72
+ file = open (self ._FILE_TEST_OAUTH_PATH_FULL , ApiContext ._FILE_MODE_WRITE )
73
+ file .write (serialized_client )
74
+ file .close ()
75
+
76
+ self .assertTrue (os .path .isfile (self ._FILE_TEST_OAUTH_PATH_FULL ))
77
+
78
+ except AssertionError :
79
+ raise AssertionError
80
+
81
+ @classmethod
82
+ def _create_api_context (cls ) -> ApiContext :
83
+ with open (cls ._FILE_TEST_CERTIFICATE_PATH_FULL , cls ._FILE_MODE_READ ) as file_ :
84
+ certificate = file_ .read ()
85
+
86
+ with open (cls ._FILE_TEST_PRIVATE_KEY_PATH_FULL , cls ._FILE_MODE_READ ) as file_ :
87
+ private_key = file_ .read ()
88
+
89
+ with open (cls ._FILE_TEST_CERTIFICATE_PATH_FULL , cls ._FILE_MODE_READ ) as file_ :
90
+ all_certificate_chain = file_ .read ()
91
+
92
+ api_context = ApiContext .create_for_psd2 (
93
+ ApiEnvironmentType .SANDBOX ,
94
+ certificate ,
95
+ private_key ,
96
+ [all_certificate_chain ],
97
+ cls ._TEST_DEVICE_DESCRIPTION
98
+ )
99
+
100
+ api_context .save (cls ._FILE_TEST_CONFIGURATION_PATH_FULL )
101
+
102
+ return api_context
0 commit comments