|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 "use strict"; |
|
5 |
|
6 function getPaymentHelper() { |
|
7 let error; |
|
8 let paym = newPaymentModule(); |
|
9 |
|
10 paym.PaymentManager.paymentFailed = function paymentFailed(aRequestId, |
|
11 errorMsg) { |
|
12 error = errorMsg; |
|
13 }; |
|
14 |
|
15 return { |
|
16 get paymentModule() { |
|
17 return paym; |
|
18 }, |
|
19 get error() { |
|
20 return error; |
|
21 } |
|
22 }; |
|
23 } |
|
24 |
|
25 function run_test() { |
|
26 run_next_test(); |
|
27 } |
|
28 |
|
29 function testGetPaymentRequest(paymentProviders, test) { |
|
30 let helper = getPaymentHelper(); |
|
31 let paym = helper.paymentModule; |
|
32 |
|
33 paym.PaymentManager.registeredProviders = paymentProviders; |
|
34 |
|
35 let ret = paym.PaymentManager.getPaymentRequestInfo("", test.jwt); |
|
36 if (!test.result) { |
|
37 test.ret ? do_check_true(ret) : do_check_false(ret); |
|
38 } |
|
39 if (test.error !== null) { |
|
40 do_check_eq(helper.error, test.error); |
|
41 } else { |
|
42 do_check_eq(typeof ret, "object"); |
|
43 do_check_eq(ret.jwt, test.jwt); |
|
44 do_check_eq(ret.type, test.result.type); |
|
45 do_check_eq(ret.providerName, test.result.providerName); |
|
46 } |
|
47 } |
|
48 |
|
49 add_test(function test_successfull_request() { |
|
50 let providers = {}; |
|
51 let type = "mock/payments/inapp/v1"; |
|
52 providers[type] = { |
|
53 name: "mockprovider", |
|
54 description: "Mock Payment Provider", |
|
55 uri: "https://mockpayprovider.phpfogapp.com/?req=", |
|
56 requestMethod: "GET" |
|
57 }; |
|
58 |
|
59 // Payload |
|
60 // { |
|
61 // "aud": "mockpayprovider.phpfogapp.com", |
|
62 // "iss": "Enter you app key here!", |
|
63 // "request": { |
|
64 // "name": "Piece of Cake", |
|
65 // "price": "10.50", |
|
66 // "priceTier": 1, |
|
67 // "productdata": "transaction_id=86", |
|
68 // "currencyCode": "USD", |
|
69 // "description": "Virtual chocolate cake to fill your virtual tummy" |
|
70 // }, |
|
71 // "exp": 1352232792, |
|
72 // "iat": 1352229192, |
|
73 // "typ": "mock/payments/inapp/v1" |
|
74 // } |
|
75 let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" + |
|
76 "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + |
|
77 "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + |
|
78 "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + |
|
79 "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + |
|
80 "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + |
|
81 "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + |
|
82 "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + |
|
83 "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + |
|
84 "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; |
|
85 |
|
86 testGetPaymentRequest(providers, { |
|
87 jwt: jwt, |
|
88 ret: true, |
|
89 error: null, |
|
90 result: { |
|
91 type: type, |
|
92 providerName: providers[type].name |
|
93 } |
|
94 }); |
|
95 |
|
96 run_next_test(); |
|
97 }); |
|
98 |
|
99 add_test(function test_successfull_request_html_description() { |
|
100 let providers = {}; |
|
101 let type = "mozilla/payments/pay/v1"; |
|
102 providers[type] = { |
|
103 name: "webpay", |
|
104 description: "Mozilla Payment Provider", |
|
105 uri: "https://marketplace.firefox.com/mozpay/?req=", |
|
106 requestMethod: "GET" |
|
107 }; |
|
108 |
|
109 // Payload |
|
110 // { |
|
111 // "aud": "marketplace.firefox.com", |
|
112 // "iss": "marketplace-dev.allizom.org", |
|
113 // "request": { |
|
114 // "name": "Krupa's paid app 1", |
|
115 // "chargebackURL": "http://localhost:8002/telefonica/services/webpay/" |
|
116 // "chargeback", |
|
117 // "postbackURL": "http://localhost:8002/telefonica/services/webpay/" |
|
118 // "postback", |
|
119 // "productData": "addon_id=85&seller_uuid=d4855df9-6ce0-45cd-81cb-" |
|
120 // "cf8737e1e7aa&contrib_uuid=201868b7ac2cda410a99b3" |
|
121 // "ed4c11a8ea", |
|
122 // "pricePoint": 1, |
|
123 // "id": "maude:85", |
|
124 // "description": "This app has been automatically generated by <a href=" |
|
125 // "\"http://outgoing.mozilla.org/v1/ba7f373ae16789eff3ab" |
|
126 // "fd95ca8d3c15d18dc9009afa204dc43f85a55b1f6ef1/http%3A/" |
|
127 // "/testmanifest.com\" rel=\"nofollow\">testmanifest.com" |
|
128 // "</a>" |
|
129 // }, |
|
130 // "exp": 1358379147, |
|
131 // "iat": 1358375547, |
|
132 // "typ": "mozilla/payments/pay/v1" |
|
133 // } |
|
134 let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibWFya2V0cGx" + |
|
135 "hY2UuZmlyZWZveC5jb20iLCAiaXNzIjogIm1hcmtldHBsYWNlLWRldi5hbGxpem9" + |
|
136 "tLm9yZyIsICJyZXF1ZXN0IjogeyJuYW1lIjogIktydXBhJ3MgcGFpZCBhcHAgMSI" + |
|
137 "sICJjaGFyZ2ViYWNrVVJMIjogImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi90ZWxlZm9" + |
|
138 "uaWNhL3NlcnZpY2VzL3dlYnBheS9jaGFyZ2ViYWNrIiwgInBvc3RiYWNrVVJMIjo" + |
|
139 "gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi90ZWxlZm9uaWNhL3NlcnZpY2VzL3dlYnB" + |
|
140 "heS9wb3N0YmFjayIsICJwcm9kdWN0RGF0YSI6ICJhZGRvbl9pZD04NSZzZWxsZXJ" + |
|
141 "fdXVpZD1kNDg1NWRmOS02Y2UwLTQ1Y2QtODFjYi1jZjg3MzdlMWU3YWEmY29udHJ" + |
|
142 "pYl91dWlkPTIwMTg2OGI3YWMyY2RhNDEwYTk5YjNlZDRjMTFhOGVhIiwgInByaWN" + |
|
143 "lUG9pbnQiOiAxLCAiaWQiOiAibWF1ZGU6ODUiLCAiZGVzY3JpcHRpb24iOiAiVGh" + |
|
144 "pcyBhcHAgaGFzIGJlZW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgPGEgaHJ" + |
|
145 "lZj1cImh0dHA6Ly9vdXRnb2luZy5tb3ppbGxhLm9yZy92MS9iYTdmMzczYWUxNjc" + |
|
146 "4OWVmZjNhYmZkOTVjYThkM2MxNWQxOGRjOTAwOWFmYTIwNGRjNDNmODVhNTViMWY" + |
|
147 "2ZWYxL2h0dHAlM0EvL3Rlc3RtYW5pZmVzdC5jb21cIiByZWw9XCJub2ZvbGxvd1w" + |
|
148 "iPnRlc3RtYW5pZmVzdC5jb208L2E-In0sICJleHAiOiAxMzU4Mzc5MTQ3LCAiaWF" + |
|
149 "0IjogMTM1ODM3NTU0NywgInR5cCI6ICJtb3ppbGxhL3BheW1lbnRzL3BheS92MSJ" + |
|
150 "9.kgSt636OSRBezMGtm9QLeDxlEOevL4xcOoDj8VRJyD8"; |
|
151 |
|
152 testGetPaymentRequest(providers, { |
|
153 jwt: jwt, |
|
154 ret: true, |
|
155 error: null, |
|
156 result: { |
|
157 type: type, |
|
158 providerName: providers[type].name |
|
159 } |
|
160 }); |
|
161 |
|
162 run_next_test(); |
|
163 }); |
|
164 |
|
165 add_test(function test_empty_jwt() { |
|
166 testGetPaymentRequest(null, { |
|
167 jwt: "", |
|
168 ret: true, |
|
169 error: "INTERNAL_ERROR_CALL_WITH_MISSING_JWT" |
|
170 }); |
|
171 |
|
172 run_next_test(); |
|
173 }); |
|
174 |
|
175 add_test(function test_wrong_segments_count() { |
|
176 // 1 segment JWT |
|
177 let OneSegJwt = "eyJhbGciOiJIUzI1NiJ9"; |
|
178 testGetPaymentRequest(null, { |
|
179 jwt: OneSegJwt, |
|
180 ret: true, |
|
181 error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT" |
|
182 }); |
|
183 |
|
184 // 2 segments JWT |
|
185 let TwoSegJwt = "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIwNTg2NDkwMTM2NTY2N" + |
|
186 "zU1ODY2MSIsImF1ZCI6Ikdvb2dsZSIsInR5cCI6Imdvb2dsZS9" + |
|
187 "wYXltZW50cy9pbmFwcC9pdGVtL3YxIiwiaWF0IjoxMzUyMjIwM" + |
|
188 "jEyLCJleHAiOjEzNTIzMDY2MTIsInJlcXVlc3QiOnsiY3VycmV" + |
|
189 "uY3lDb2RlIjoiVVNEIiwicHJpY2UiOiIzLjAwIiwibmFtZSI6I" + |
|
190 "kdvbGQgU3RhciIsInNlbGxlckRhdGEiOiJzb21lIG9wYXF1ZSB" + |
|
191 "kYXRhIiwiZGVzY3JpcHRpb24iOiJBIHNoaW5pbmcgYmFkZ2Ugb" + |
|
192 "2YgZGlzdGluY3Rpb24ifX0"; |
|
193 |
|
194 testGetPaymentRequest(null, { |
|
195 jwt: TwoSegJwt, |
|
196 ret: true, |
|
197 error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT" |
|
198 }); |
|
199 |
|
200 run_next_test(); |
|
201 }); |
|
202 |
|
203 add_test(function test_empty_payload() { |
|
204 let EmptyPayloadJwt = "eyJhbGciOiJIUzI1NiJ9..eyJpc3MiOiIwNTg2NDkwMTM2NTY2N"; |
|
205 |
|
206 testGetPaymentRequest(null, { |
|
207 jwt: EmptyPayloadJwt, |
|
208 ret: true, |
|
209 error: "PAY_REQUEST_ERROR_EMPTY_PAYLOAD" |
|
210 }); |
|
211 |
|
212 run_next_test(); |
|
213 }); |
|
214 |
|
215 add_test(function test_missing_typ_parameter() { |
|
216 // Payload |
|
217 // { |
|
218 // "iss": "640ae477-df33-45cd-83b8-6f1f910a6494", |
|
219 // "iat": 1361203745, |
|
220 // "request": { |
|
221 // "description": "detailed description", |
|
222 // "id": "799db970-7afa-4028-bdb7-8b045eb8babc", |
|
223 // "postbackURL": "http://inapp-pay-test.farmdev.com/postback", |
|
224 // "productData": "transaction_id=58", |
|
225 // "pricePoint": 1, |
|
226 // "chargebackURL": "http://inapp-pay-test.farmdev.com/chargeback", |
|
227 // "name": "The Product" |
|
228 // }, |
|
229 // "aud": "marketplace-dev.allizom.org", |
|
230 // "exp": 1361207345 |
|
231 // } |
|
232 let missingTypJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9." + |
|
233 "eyJpc3MiOiAiNjQwYWU0NzctZGYzMy00NWNkLTgzY" + |
|
234 "jgtNmYxZjkxMGE2NDk0IiwgImlhdCI6IDEzNjEyMD" + |
|
235 "M3NDUsICJyZXF1ZXN0IjogeyJkZXNjcmlwdGlvbiI" + |
|
236 "6ICJkZXRhaWxlZCBkZXNjcmlwdGlvbiIsICJpZCI6" + |
|
237 "ICI3OTlkYjk3MC03YWZhLTQwMjgtYmRiNy04YjA0N" + |
|
238 "WViOGJhYmMiLCAicG9zdGJhY2tVUkwiOiAiaHR0cD" + |
|
239 "ovL2luYXBwLXBheS10ZXN0LmZhcm1kZXYuY29tL3B" + |
|
240 "vc3RiYWNrIiwgInByb2R1Y3REYXRhIjogInRyYW5z" + |
|
241 "YWN0aW9uX2lkPTU4IiwgInByaWNlUG9pbnQiOiAxL" + |
|
242 "CAiY2hhcmdlYmFja1VSTCI6ICJodHRwOi8vaW5hcH" + |
|
243 "AtcGF5LXRlc3QuZmFybWRldi5jb20vY2hhcmdlYmF" + |
|
244 "jayIsICJuYW1lIjogIlRoZSBQcm9kdWN0In0sICJh" + |
|
245 "dWQiOiAibWFya2V0cGxhY2UtZGV2LmFsbGl6b20ub" + |
|
246 "3JnIiwgImV4cCI6IDEzNjEyMDczNDV9.KAHsJX1Hy" + |
|
247 "fmwNvAckdVUqlpPvdHggpx9yX276TWacRg"; |
|
248 testGetPaymentRequest(null, { |
|
249 jwt: missingTypJwt, |
|
250 ret: true, |
|
251 error: "PAY_REQUEST_ERROR_NO_TYP_PARAMETER" |
|
252 }); |
|
253 |
|
254 run_next_test(); |
|
255 }); |
|
256 |
|
257 add_test(function test_missing_request_parameter() { |
|
258 // Payload |
|
259 // { |
|
260 // "iss": "Enter you app key here!", |
|
261 // "iat": 1352225299, |
|
262 // "typ": "mock/payments/inapp/v1", |
|
263 // "aud": "mockpayprovider.phpfogapp.com", |
|
264 // "exp": 1352228899 |
|
265 // } |
|
266 let missingRequestJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9." + |
|
267 "eyJpc3MiOiAiRW50ZXIgeW91IGFwcCBrZXkgaGVyZ" + |
|
268 "SEiLCAiaWF0IjogMTM1MjIyNTI5OSwgInR5cCI6IC" + |
|
269 "Jtb2NrL3BheW1lbnRzL2luYXBwL3YxIiwgImF1ZCI" + |
|
270 "6ICJtb2NrcGF5cHJvdmlkZXIucGhwZm9nYXBwLmNv" + |
|
271 "bSIsICJleHAiOiAxMzUyMjI4ODk5fQ.yXGinvZiUs" + |
|
272 "v9JWvdfM6zPD0iOX9DgCPcIwIbCrL4tcs"; |
|
273 |
|
274 testGetPaymentRequest(null, { |
|
275 jwt: missingRequestJwt, |
|
276 ret: true, |
|
277 error: "PAY_REQUEST_ERROR_NO_REQUEST_PARAMETER" |
|
278 }); |
|
279 |
|
280 run_next_test(); |
|
281 }); |
|
282 |
|
283 add_test(function test_jwt_decoding_error() { |
|
284 let wrongJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.^eyJhdWQiOiAibW9" + |
|
285 "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + |
|
286 "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + |
|
287 "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + |
|
288 "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + |
|
289 "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + |
|
290 "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + |
|
291 "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + |
|
292 "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + |
|
293 "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; |
|
294 |
|
295 testGetPaymentRequest(null, { |
|
296 jwt: wrongJwt, |
|
297 ret: true, |
|
298 error: "PAY_REQUEST_ERROR_ERROR_DECODING_JWT" |
|
299 }); |
|
300 |
|
301 run_next_test(); |
|
302 }); |
|
303 |
|
304 add_test(function test_non_https_provider() { |
|
305 let providers = {}; |
|
306 let type = "mock/payments/inapp/v1"; |
|
307 providers[type] = { |
|
308 name: "mockprovider", |
|
309 description: "Mock Payment Provider", |
|
310 uri: "http://mockpayprovider.phpfogapp.com/?req=", |
|
311 requestMethod: "GET" |
|
312 }; |
|
313 |
|
314 // Payload |
|
315 // { |
|
316 // "aud": "mockpayprovider.phpfogapp.com", |
|
317 // "iss": "Enter you app key here!", |
|
318 // "request": { |
|
319 // "name": "Piece of Cake", |
|
320 // "price": "10.50", |
|
321 // "priceTier": 1, |
|
322 // "productdata": "transaction_id=86", |
|
323 // "currencyCode": "USD", |
|
324 // "description": "Virtual chocolate cake to fill your virtual tummy" |
|
325 // }, |
|
326 // "exp": 1352232792, |
|
327 // "iat": 1352229192, |
|
328 // "typ": "mock/payments/inapp/v1" |
|
329 // } |
|
330 let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" + |
|
331 "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + |
|
332 "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + |
|
333 "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + |
|
334 "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + |
|
335 "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + |
|
336 "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + |
|
337 "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + |
|
338 "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + |
|
339 "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; |
|
340 |
|
341 testGetPaymentRequest(providers, { |
|
342 jwt: jwt, |
|
343 ret: true, |
|
344 error: "INTERNAL_ERROR_NON_HTTPS_PROVIDER_URI" |
|
345 }); |
|
346 |
|
347 run_next_test(); |
|
348 }); |