1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/payment/tests/unit/test_paymanager_get_payment_request.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,348 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +"use strict"; 1.8 + 1.9 +function getPaymentHelper() { 1.10 + let error; 1.11 + let paym = newPaymentModule(); 1.12 + 1.13 + paym.PaymentManager.paymentFailed = function paymentFailed(aRequestId, 1.14 + errorMsg) { 1.15 + error = errorMsg; 1.16 + }; 1.17 + 1.18 + return { 1.19 + get paymentModule() { 1.20 + return paym; 1.21 + }, 1.22 + get error() { 1.23 + return error; 1.24 + } 1.25 + }; 1.26 +} 1.27 + 1.28 +function run_test() { 1.29 + run_next_test(); 1.30 +} 1.31 + 1.32 +function testGetPaymentRequest(paymentProviders, test) { 1.33 + let helper = getPaymentHelper(); 1.34 + let paym = helper.paymentModule; 1.35 + 1.36 + paym.PaymentManager.registeredProviders = paymentProviders; 1.37 + 1.38 + let ret = paym.PaymentManager.getPaymentRequestInfo("", test.jwt); 1.39 + if (!test.result) { 1.40 + test.ret ? do_check_true(ret) : do_check_false(ret); 1.41 + } 1.42 + if (test.error !== null) { 1.43 + do_check_eq(helper.error, test.error); 1.44 + } else { 1.45 + do_check_eq(typeof ret, "object"); 1.46 + do_check_eq(ret.jwt, test.jwt); 1.47 + do_check_eq(ret.type, test.result.type); 1.48 + do_check_eq(ret.providerName, test.result.providerName); 1.49 + } 1.50 +} 1.51 + 1.52 +add_test(function test_successfull_request() { 1.53 + let providers = {}; 1.54 + let type = "mock/payments/inapp/v1"; 1.55 + providers[type] = { 1.56 + name: "mockprovider", 1.57 + description: "Mock Payment Provider", 1.58 + uri: "https://mockpayprovider.phpfogapp.com/?req=", 1.59 + requestMethod: "GET" 1.60 + }; 1.61 + 1.62 + // Payload 1.63 + // { 1.64 + // "aud": "mockpayprovider.phpfogapp.com", 1.65 + // "iss": "Enter you app key here!", 1.66 + // "request": { 1.67 + // "name": "Piece of Cake", 1.68 + // "price": "10.50", 1.69 + // "priceTier": 1, 1.70 + // "productdata": "transaction_id=86", 1.71 + // "currencyCode": "USD", 1.72 + // "description": "Virtual chocolate cake to fill your virtual tummy" 1.73 + // }, 1.74 + // "exp": 1352232792, 1.75 + // "iat": 1352229192, 1.76 + // "typ": "mock/payments/inapp/v1" 1.77 + // } 1.78 + let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" + 1.79 + "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + 1.80 + "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + 1.81 + "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + 1.82 + "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + 1.83 + "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + 1.84 + "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + 1.85 + "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + 1.86 + "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + 1.87 + "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; 1.88 + 1.89 + testGetPaymentRequest(providers, { 1.90 + jwt: jwt, 1.91 + ret: true, 1.92 + error: null, 1.93 + result: { 1.94 + type: type, 1.95 + providerName: providers[type].name 1.96 + } 1.97 + }); 1.98 + 1.99 + run_next_test(); 1.100 +}); 1.101 + 1.102 +add_test(function test_successfull_request_html_description() { 1.103 + let providers = {}; 1.104 + let type = "mozilla/payments/pay/v1"; 1.105 + providers[type] = { 1.106 + name: "webpay", 1.107 + description: "Mozilla Payment Provider", 1.108 + uri: "https://marketplace.firefox.com/mozpay/?req=", 1.109 + requestMethod: "GET" 1.110 + }; 1.111 + 1.112 + // Payload 1.113 + // { 1.114 + // "aud": "marketplace.firefox.com", 1.115 + // "iss": "marketplace-dev.allizom.org", 1.116 + // "request": { 1.117 + // "name": "Krupa's paid app 1", 1.118 + // "chargebackURL": "http://localhost:8002/telefonica/services/webpay/" 1.119 + // "chargeback", 1.120 + // "postbackURL": "http://localhost:8002/telefonica/services/webpay/" 1.121 + // "postback", 1.122 + // "productData": "addon_id=85&seller_uuid=d4855df9-6ce0-45cd-81cb-" 1.123 + // "cf8737e1e7aa&contrib_uuid=201868b7ac2cda410a99b3" 1.124 + // "ed4c11a8ea", 1.125 + // "pricePoint": 1, 1.126 + // "id": "maude:85", 1.127 + // "description": "This app has been automatically generated by <a href=" 1.128 + // "\"http://outgoing.mozilla.org/v1/ba7f373ae16789eff3ab" 1.129 + // "fd95ca8d3c15d18dc9009afa204dc43f85a55b1f6ef1/http%3A/" 1.130 + // "/testmanifest.com\" rel=\"nofollow\">testmanifest.com" 1.131 + // "</a>" 1.132 + // }, 1.133 + // "exp": 1358379147, 1.134 + // "iat": 1358375547, 1.135 + // "typ": "mozilla/payments/pay/v1" 1.136 + // } 1.137 + let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibWFya2V0cGx" + 1.138 + "hY2UuZmlyZWZveC5jb20iLCAiaXNzIjogIm1hcmtldHBsYWNlLWRldi5hbGxpem9" + 1.139 + "tLm9yZyIsICJyZXF1ZXN0IjogeyJuYW1lIjogIktydXBhJ3MgcGFpZCBhcHAgMSI" + 1.140 + "sICJjaGFyZ2ViYWNrVVJMIjogImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi90ZWxlZm9" + 1.141 + "uaWNhL3NlcnZpY2VzL3dlYnBheS9jaGFyZ2ViYWNrIiwgInBvc3RiYWNrVVJMIjo" + 1.142 + "gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi90ZWxlZm9uaWNhL3NlcnZpY2VzL3dlYnB" + 1.143 + "heS9wb3N0YmFjayIsICJwcm9kdWN0RGF0YSI6ICJhZGRvbl9pZD04NSZzZWxsZXJ" + 1.144 + "fdXVpZD1kNDg1NWRmOS02Y2UwLTQ1Y2QtODFjYi1jZjg3MzdlMWU3YWEmY29udHJ" + 1.145 + "pYl91dWlkPTIwMTg2OGI3YWMyY2RhNDEwYTk5YjNlZDRjMTFhOGVhIiwgInByaWN" + 1.146 + "lUG9pbnQiOiAxLCAiaWQiOiAibWF1ZGU6ODUiLCAiZGVzY3JpcHRpb24iOiAiVGh" + 1.147 + "pcyBhcHAgaGFzIGJlZW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgPGEgaHJ" + 1.148 + "lZj1cImh0dHA6Ly9vdXRnb2luZy5tb3ppbGxhLm9yZy92MS9iYTdmMzczYWUxNjc" + 1.149 + "4OWVmZjNhYmZkOTVjYThkM2MxNWQxOGRjOTAwOWFmYTIwNGRjNDNmODVhNTViMWY" + 1.150 + "2ZWYxL2h0dHAlM0EvL3Rlc3RtYW5pZmVzdC5jb21cIiByZWw9XCJub2ZvbGxvd1w" + 1.151 + "iPnRlc3RtYW5pZmVzdC5jb208L2E-In0sICJleHAiOiAxMzU4Mzc5MTQ3LCAiaWF" + 1.152 + "0IjogMTM1ODM3NTU0NywgInR5cCI6ICJtb3ppbGxhL3BheW1lbnRzL3BheS92MSJ" + 1.153 + "9.kgSt636OSRBezMGtm9QLeDxlEOevL4xcOoDj8VRJyD8"; 1.154 + 1.155 + testGetPaymentRequest(providers, { 1.156 + jwt: jwt, 1.157 + ret: true, 1.158 + error: null, 1.159 + result: { 1.160 + type: type, 1.161 + providerName: providers[type].name 1.162 + } 1.163 + }); 1.164 + 1.165 + run_next_test(); 1.166 +}); 1.167 + 1.168 +add_test(function test_empty_jwt() { 1.169 + testGetPaymentRequest(null, { 1.170 + jwt: "", 1.171 + ret: true, 1.172 + error: "INTERNAL_ERROR_CALL_WITH_MISSING_JWT" 1.173 + }); 1.174 + 1.175 + run_next_test(); 1.176 +}); 1.177 + 1.178 +add_test(function test_wrong_segments_count() { 1.179 + // 1 segment JWT 1.180 + let OneSegJwt = "eyJhbGciOiJIUzI1NiJ9"; 1.181 + testGetPaymentRequest(null, { 1.182 + jwt: OneSegJwt, 1.183 + ret: true, 1.184 + error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT" 1.185 + }); 1.186 + 1.187 + // 2 segments JWT 1.188 + let TwoSegJwt = "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIwNTg2NDkwMTM2NTY2N" + 1.189 + "zU1ODY2MSIsImF1ZCI6Ikdvb2dsZSIsInR5cCI6Imdvb2dsZS9" + 1.190 + "wYXltZW50cy9pbmFwcC9pdGVtL3YxIiwiaWF0IjoxMzUyMjIwM" + 1.191 + "jEyLCJleHAiOjEzNTIzMDY2MTIsInJlcXVlc3QiOnsiY3VycmV" + 1.192 + "uY3lDb2RlIjoiVVNEIiwicHJpY2UiOiIzLjAwIiwibmFtZSI6I" + 1.193 + "kdvbGQgU3RhciIsInNlbGxlckRhdGEiOiJzb21lIG9wYXF1ZSB" + 1.194 + "kYXRhIiwiZGVzY3JpcHRpb24iOiJBIHNoaW5pbmcgYmFkZ2Ugb" + 1.195 + "2YgZGlzdGluY3Rpb24ifX0"; 1.196 + 1.197 + testGetPaymentRequest(null, { 1.198 + jwt: TwoSegJwt, 1.199 + ret: true, 1.200 + error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT" 1.201 + }); 1.202 + 1.203 + run_next_test(); 1.204 +}); 1.205 + 1.206 +add_test(function test_empty_payload() { 1.207 + let EmptyPayloadJwt = "eyJhbGciOiJIUzI1NiJ9..eyJpc3MiOiIwNTg2NDkwMTM2NTY2N"; 1.208 + 1.209 + testGetPaymentRequest(null, { 1.210 + jwt: EmptyPayloadJwt, 1.211 + ret: true, 1.212 + error: "PAY_REQUEST_ERROR_EMPTY_PAYLOAD" 1.213 + }); 1.214 + 1.215 + run_next_test(); 1.216 +}); 1.217 + 1.218 +add_test(function test_missing_typ_parameter() { 1.219 + // Payload 1.220 + // { 1.221 + // "iss": "640ae477-df33-45cd-83b8-6f1f910a6494", 1.222 + // "iat": 1361203745, 1.223 + // "request": { 1.224 + // "description": "detailed description", 1.225 + // "id": "799db970-7afa-4028-bdb7-8b045eb8babc", 1.226 + // "postbackURL": "http://inapp-pay-test.farmdev.com/postback", 1.227 + // "productData": "transaction_id=58", 1.228 + // "pricePoint": 1, 1.229 + // "chargebackURL": "http://inapp-pay-test.farmdev.com/chargeback", 1.230 + // "name": "The Product" 1.231 + // }, 1.232 + // "aud": "marketplace-dev.allizom.org", 1.233 + // "exp": 1361207345 1.234 + // } 1.235 + let missingTypJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9." + 1.236 + "eyJpc3MiOiAiNjQwYWU0NzctZGYzMy00NWNkLTgzY" + 1.237 + "jgtNmYxZjkxMGE2NDk0IiwgImlhdCI6IDEzNjEyMD" + 1.238 + "M3NDUsICJyZXF1ZXN0IjogeyJkZXNjcmlwdGlvbiI" + 1.239 + "6ICJkZXRhaWxlZCBkZXNjcmlwdGlvbiIsICJpZCI6" + 1.240 + "ICI3OTlkYjk3MC03YWZhLTQwMjgtYmRiNy04YjA0N" + 1.241 + "WViOGJhYmMiLCAicG9zdGJhY2tVUkwiOiAiaHR0cD" + 1.242 + "ovL2luYXBwLXBheS10ZXN0LmZhcm1kZXYuY29tL3B" + 1.243 + "vc3RiYWNrIiwgInByb2R1Y3REYXRhIjogInRyYW5z" + 1.244 + "YWN0aW9uX2lkPTU4IiwgInByaWNlUG9pbnQiOiAxL" + 1.245 + "CAiY2hhcmdlYmFja1VSTCI6ICJodHRwOi8vaW5hcH" + 1.246 + "AtcGF5LXRlc3QuZmFybWRldi5jb20vY2hhcmdlYmF" + 1.247 + "jayIsICJuYW1lIjogIlRoZSBQcm9kdWN0In0sICJh" + 1.248 + "dWQiOiAibWFya2V0cGxhY2UtZGV2LmFsbGl6b20ub" + 1.249 + "3JnIiwgImV4cCI6IDEzNjEyMDczNDV9.KAHsJX1Hy" + 1.250 + "fmwNvAckdVUqlpPvdHggpx9yX276TWacRg"; 1.251 + testGetPaymentRequest(null, { 1.252 + jwt: missingTypJwt, 1.253 + ret: true, 1.254 + error: "PAY_REQUEST_ERROR_NO_TYP_PARAMETER" 1.255 + }); 1.256 + 1.257 + run_next_test(); 1.258 +}); 1.259 + 1.260 +add_test(function test_missing_request_parameter() { 1.261 + // Payload 1.262 + // { 1.263 + // "iss": "Enter you app key here!", 1.264 + // "iat": 1352225299, 1.265 + // "typ": "mock/payments/inapp/v1", 1.266 + // "aud": "mockpayprovider.phpfogapp.com", 1.267 + // "exp": 1352228899 1.268 + // } 1.269 + let missingRequestJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9." + 1.270 + "eyJpc3MiOiAiRW50ZXIgeW91IGFwcCBrZXkgaGVyZ" + 1.271 + "SEiLCAiaWF0IjogMTM1MjIyNTI5OSwgInR5cCI6IC" + 1.272 + "Jtb2NrL3BheW1lbnRzL2luYXBwL3YxIiwgImF1ZCI" + 1.273 + "6ICJtb2NrcGF5cHJvdmlkZXIucGhwZm9nYXBwLmNv" + 1.274 + "bSIsICJleHAiOiAxMzUyMjI4ODk5fQ.yXGinvZiUs" + 1.275 + "v9JWvdfM6zPD0iOX9DgCPcIwIbCrL4tcs"; 1.276 + 1.277 + testGetPaymentRequest(null, { 1.278 + jwt: missingRequestJwt, 1.279 + ret: true, 1.280 + error: "PAY_REQUEST_ERROR_NO_REQUEST_PARAMETER" 1.281 + }); 1.282 + 1.283 + run_next_test(); 1.284 +}); 1.285 + 1.286 +add_test(function test_jwt_decoding_error() { 1.287 + let wrongJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.^eyJhdWQiOiAibW9" + 1.288 + "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + 1.289 + "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + 1.290 + "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + 1.291 + "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + 1.292 + "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + 1.293 + "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + 1.294 + "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + 1.295 + "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + 1.296 + "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; 1.297 + 1.298 + testGetPaymentRequest(null, { 1.299 + jwt: wrongJwt, 1.300 + ret: true, 1.301 + error: "PAY_REQUEST_ERROR_ERROR_DECODING_JWT" 1.302 + }); 1.303 + 1.304 + run_next_test(); 1.305 +}); 1.306 + 1.307 +add_test(function test_non_https_provider() { 1.308 + let providers = {}; 1.309 + let type = "mock/payments/inapp/v1"; 1.310 + providers[type] = { 1.311 + name: "mockprovider", 1.312 + description: "Mock Payment Provider", 1.313 + uri: "http://mockpayprovider.phpfogapp.com/?req=", 1.314 + requestMethod: "GET" 1.315 + }; 1.316 + 1.317 + // Payload 1.318 + // { 1.319 + // "aud": "mockpayprovider.phpfogapp.com", 1.320 + // "iss": "Enter you app key here!", 1.321 + // "request": { 1.322 + // "name": "Piece of Cake", 1.323 + // "price": "10.50", 1.324 + // "priceTier": 1, 1.325 + // "productdata": "transaction_id=86", 1.326 + // "currencyCode": "USD", 1.327 + // "description": "Virtual chocolate cake to fill your virtual tummy" 1.328 + // }, 1.329 + // "exp": 1352232792, 1.330 + // "iat": 1352229192, 1.331 + // "typ": "mock/payments/inapp/v1" 1.332 + // } 1.333 + let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" + 1.334 + "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + 1.335 + "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + 1.336 + "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + 1.337 + "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + 1.338 + "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + 1.339 + "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + 1.340 + "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + 1.341 + "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + 1.342 + "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; 1.343 + 1.344 + testGetPaymentRequest(providers, { 1.345 + jwt: jwt, 1.346 + ret: true, 1.347 + error: "INTERNAL_ERROR_NON_HTTPS_PROVIDER_URI" 1.348 + }); 1.349 + 1.350 + run_next_test(); 1.351 +});