diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2014-05-21 11:38:25 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2014-05-21 11:38:25 +0200 |
commit | d25ba7d760b017b038e5aa6c0a605b4a330eb68d (patch) | |
tree | 16ec27edc7d5f83986f16236d3a36a2682a0f37e /dom/payment/tests | |
parent | a942906574671868daf122284a9c4689e6924f74 (diff) | |
download | palemoon-gre-d25ba7d760b017b038e5aa6c0a605b4a330eb68d.tar.gz |
Recommit working copy to repo with proper line endings.
Diffstat (limited to 'dom/payment/tests')
-rw-r--r-- | dom/payment/tests/moz.build | 9 | ||||
-rw-r--r-- | dom/payment/tests/unit/header_helper.js | 38 | ||||
-rw-r--r-- | dom/payment/tests/unit/test_paymanager_get_payment_request.js | 348 | ||||
-rw-r--r-- | dom/payment/tests/unit/xpcshell.ini | 5 |
4 files changed, 400 insertions, 0 deletions
diff --git a/dom/payment/tests/moz.build b/dom/payment/tests/moz.build new file mode 100644 index 000000000..c74b89b19 --- /dev/null +++ b/dom/payment/tests/moz.build @@ -0,0 +1,9 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +MODULE = 'test_dom_payment' + +XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini'] diff --git a/dom/payment/tests/unit/header_helper.js b/dom/payment/tests/unit/header_helper.js new file mode 100644 index 000000000..4b19b07da --- /dev/null +++ b/dom/payment/tests/unit/header_helper.js @@ -0,0 +1,38 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; + +let subscriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"] + .getService(Ci.mozIJSSubScriptLoader); + +/** + * Start a new payment module. + * + * @param custom_ns + * Namespace with symbols to be injected into the new payment module + * namespace. + * + * @return an object that represents the payment module's namespace. + */ +function newPaymentModule(custom_ns) { + let payment_ns = { + importScripts: function fakeImportScripts() { + Array.slice(arguments).forEach(function (script) { + subscriptLoader.loadSubScript("resource://gre/modules/" + script, this); + }, this); + }, + }; + + // Copy the custom definitions over. + for (let key in custom_ns) { + payment_ns[key] = custom_ns[key]; + } + + // Load the payment module itself. + payment_ns.importScripts("Payment.jsm"); + + return payment_ns; +} diff --git a/dom/payment/tests/unit/test_paymanager_get_payment_request.js b/dom/payment/tests/unit/test_paymanager_get_payment_request.js new file mode 100644 index 000000000..751e87120 --- /dev/null +++ b/dom/payment/tests/unit/test_paymanager_get_payment_request.js @@ -0,0 +1,348 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +function getPaymentHelper() { + let error; + let paym = newPaymentModule(); + + paym.PaymentManager.paymentFailed = function paymentFailed(aRequestId, + errorMsg) { + error = errorMsg; + }; + + return { + get paymentModule() { + return paym; + }, + get error() { + return error; + } + }; +} + +function run_test() { + run_next_test(); +} + +function testGetPaymentRequest(paymentProviders, test) { + let helper = getPaymentHelper(); + let paym = helper.paymentModule; + + paym.PaymentManager.registeredProviders = paymentProviders; + + let ret = paym.PaymentManager.getPaymentRequestInfo("", test.jwt); + if (!test.result) { + test.ret ? do_check_true(ret) : do_check_false(ret); + } + if (test.error !== null) { + do_check_eq(helper.error, test.error); + } else { + do_check_eq(typeof ret, "object"); + do_check_eq(ret.jwt, test.jwt); + do_check_eq(ret.type, test.result.type); + do_check_eq(ret.providerName, test.result.providerName); + } +} + +add_test(function test_successfull_request() { + let providers = {}; + let type = "mock/payments/inapp/v1"; + providers[type] = { + name: "mockprovider", + description: "Mock Payment Provider", + uri: "https://mockpayprovider.phpfogapp.com/?req=", + requestMethod: "GET" + }; + + // Payload + // { + // "aud": "mockpayprovider.phpfogapp.com", + // "iss": "Enter you app key here!", + // "request": { + // "name": "Piece of Cake", + // "price": "10.50", + // "priceTier": 1, + // "productdata": "transaction_id=86", + // "currencyCode": "USD", + // "description": "Virtual chocolate cake to fill your virtual tummy" + // }, + // "exp": 1352232792, + // "iat": 1352229192, + // "typ": "mock/payments/inapp/v1" + // } + let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" + + "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + + "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + + "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + + "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + + "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + + "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + + "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + + "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + + "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; + + testGetPaymentRequest(providers, { + jwt: jwt, + ret: true, + error: null, + result: { + type: type, + providerName: providers[type].name + } + }); + + run_next_test(); +}); + +add_test(function test_successfull_request_html_description() { + let providers = {}; + let type = "mozilla/payments/pay/v1"; + providers[type] = { + name: "webpay", + description: "Mozilla Payment Provider", + uri: "https://marketplace.firefox.com/mozpay/?req=", + requestMethod: "GET" + }; + + // Payload + // { + // "aud": "marketplace.firefox.com", + // "iss": "marketplace-dev.allizom.org", + // "request": { + // "name": "Krupa's paid app 1", + // "chargebackURL": "http://localhost:8002/telefonica/services/webpay/" + // "chargeback", + // "postbackURL": "http://localhost:8002/telefonica/services/webpay/" + // "postback", + // "productData": "addon_id=85&seller_uuid=d4855df9-6ce0-45cd-81cb-" + // "cf8737e1e7aa&contrib_uuid=201868b7ac2cda410a99b3" + // "ed4c11a8ea", + // "pricePoint": 1, + // "id": "maude:85", + // "description": "This app has been automatically generated by <a href=" + // "\"http://outgoing.mozilla.org/v1/ba7f373ae16789eff3ab" + // "fd95ca8d3c15d18dc9009afa204dc43f85a55b1f6ef1/http%3A/" + // "/testmanifest.com\" rel=\"nofollow\">testmanifest.com" + // "</a>" + // }, + // "exp": 1358379147, + // "iat": 1358375547, + // "typ": "mozilla/payments/pay/v1" + // } + let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibWFya2V0cGx" + + "hY2UuZmlyZWZveC5jb20iLCAiaXNzIjogIm1hcmtldHBsYWNlLWRldi5hbGxpem9" + + "tLm9yZyIsICJyZXF1ZXN0IjogeyJuYW1lIjogIktydXBhJ3MgcGFpZCBhcHAgMSI" + + "sICJjaGFyZ2ViYWNrVVJMIjogImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi90ZWxlZm9" + + "uaWNhL3NlcnZpY2VzL3dlYnBheS9jaGFyZ2ViYWNrIiwgInBvc3RiYWNrVVJMIjo" + + "gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi90ZWxlZm9uaWNhL3NlcnZpY2VzL3dlYnB" + + "heS9wb3N0YmFjayIsICJwcm9kdWN0RGF0YSI6ICJhZGRvbl9pZD04NSZzZWxsZXJ" + + "fdXVpZD1kNDg1NWRmOS02Y2UwLTQ1Y2QtODFjYi1jZjg3MzdlMWU3YWEmY29udHJ" + + "pYl91dWlkPTIwMTg2OGI3YWMyY2RhNDEwYTk5YjNlZDRjMTFhOGVhIiwgInByaWN" + + "lUG9pbnQiOiAxLCAiaWQiOiAibWF1ZGU6ODUiLCAiZGVzY3JpcHRpb24iOiAiVGh" + + "pcyBhcHAgaGFzIGJlZW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgPGEgaHJ" + + "lZj1cImh0dHA6Ly9vdXRnb2luZy5tb3ppbGxhLm9yZy92MS9iYTdmMzczYWUxNjc" + + "4OWVmZjNhYmZkOTVjYThkM2MxNWQxOGRjOTAwOWFmYTIwNGRjNDNmODVhNTViMWY" + + "2ZWYxL2h0dHAlM0EvL3Rlc3RtYW5pZmVzdC5jb21cIiByZWw9XCJub2ZvbGxvd1w" + + "iPnRlc3RtYW5pZmVzdC5jb208L2E-In0sICJleHAiOiAxMzU4Mzc5MTQ3LCAiaWF" + + "0IjogMTM1ODM3NTU0NywgInR5cCI6ICJtb3ppbGxhL3BheW1lbnRzL3BheS92MSJ" + + "9.kgSt636OSRBezMGtm9QLeDxlEOevL4xcOoDj8VRJyD8"; + + testGetPaymentRequest(providers, { + jwt: jwt, + ret: true, + error: null, + result: { + type: type, + providerName: providers[type].name + } + }); + + run_next_test(); +}); + +add_test(function test_empty_jwt() { + testGetPaymentRequest(null, { + jwt: "", + ret: true, + error: "INTERNAL_ERROR_CALL_WITH_MISSING_JWT" + }); + + run_next_test(); +}); + +add_test(function test_wrong_segments_count() { + // 1 segment JWT + let OneSegJwt = "eyJhbGciOiJIUzI1NiJ9"; + testGetPaymentRequest(null, { + jwt: OneSegJwt, + ret: true, + error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT" + }); + + // 2 segments JWT + let TwoSegJwt = "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIwNTg2NDkwMTM2NTY2N" + + "zU1ODY2MSIsImF1ZCI6Ikdvb2dsZSIsInR5cCI6Imdvb2dsZS9" + + "wYXltZW50cy9pbmFwcC9pdGVtL3YxIiwiaWF0IjoxMzUyMjIwM" + + "jEyLCJleHAiOjEzNTIzMDY2MTIsInJlcXVlc3QiOnsiY3VycmV" + + "uY3lDb2RlIjoiVVNEIiwicHJpY2UiOiIzLjAwIiwibmFtZSI6I" + + "kdvbGQgU3RhciIsInNlbGxlckRhdGEiOiJzb21lIG9wYXF1ZSB" + + "kYXRhIiwiZGVzY3JpcHRpb24iOiJBIHNoaW5pbmcgYmFkZ2Ugb" + + "2YgZGlzdGluY3Rpb24ifX0"; + + testGetPaymentRequest(null, { + jwt: TwoSegJwt, + ret: true, + error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT" + }); + + run_next_test(); +}); + +add_test(function test_empty_payload() { + let EmptyPayloadJwt = "eyJhbGciOiJIUzI1NiJ9..eyJpc3MiOiIwNTg2NDkwMTM2NTY2N"; + + testGetPaymentRequest(null, { + jwt: EmptyPayloadJwt, + ret: true, + error: "PAY_REQUEST_ERROR_EMPTY_PAYLOAD" + }); + + run_next_test(); +}); + +add_test(function test_missing_typ_parameter() { + // Payload + // { + // "iss": "640ae477-df33-45cd-83b8-6f1f910a6494", + // "iat": 1361203745, + // "request": { + // "description": "detailed description", + // "id": "799db970-7afa-4028-bdb7-8b045eb8babc", + // "postbackURL": "http://inapp-pay-test.farmdev.com/postback", + // "productData": "transaction_id=58", + // "pricePoint": 1, + // "chargebackURL": "http://inapp-pay-test.farmdev.com/chargeback", + // "name": "The Product" + // }, + // "aud": "marketplace-dev.allizom.org", + // "exp": 1361207345 + // } + let missingTypJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9." + + "eyJpc3MiOiAiNjQwYWU0NzctZGYzMy00NWNkLTgzY" + + "jgtNmYxZjkxMGE2NDk0IiwgImlhdCI6IDEzNjEyMD" + + "M3NDUsICJyZXF1ZXN0IjogeyJkZXNjcmlwdGlvbiI" + + "6ICJkZXRhaWxlZCBkZXNjcmlwdGlvbiIsICJpZCI6" + + "ICI3OTlkYjk3MC03YWZhLTQwMjgtYmRiNy04YjA0N" + + "WViOGJhYmMiLCAicG9zdGJhY2tVUkwiOiAiaHR0cD" + + "ovL2luYXBwLXBheS10ZXN0LmZhcm1kZXYuY29tL3B" + + "vc3RiYWNrIiwgInByb2R1Y3REYXRhIjogInRyYW5z" + + "YWN0aW9uX2lkPTU4IiwgInByaWNlUG9pbnQiOiAxL" + + "CAiY2hhcmdlYmFja1VSTCI6ICJodHRwOi8vaW5hcH" + + "AtcGF5LXRlc3QuZmFybWRldi5jb20vY2hhcmdlYmF" + + "jayIsICJuYW1lIjogIlRoZSBQcm9kdWN0In0sICJh" + + "dWQiOiAibWFya2V0cGxhY2UtZGV2LmFsbGl6b20ub" + + "3JnIiwgImV4cCI6IDEzNjEyMDczNDV9.KAHsJX1Hy" + + "fmwNvAckdVUqlpPvdHggpx9yX276TWacRg"; + testGetPaymentRequest(null, { + jwt: missingTypJwt, + ret: true, + error: "PAY_REQUEST_ERROR_NO_TYP_PARAMETER" + }); + + run_next_test(); +}); + +add_test(function test_missing_request_parameter() { + // Payload + // { + // "iss": "Enter you app key here!", + // "iat": 1352225299, + // "typ": "mock/payments/inapp/v1", + // "aud": "mockpayprovider.phpfogapp.com", + // "exp": 1352228899 + // } + let missingRequestJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9." + + "eyJpc3MiOiAiRW50ZXIgeW91IGFwcCBrZXkgaGVyZ" + + "SEiLCAiaWF0IjogMTM1MjIyNTI5OSwgInR5cCI6IC" + + "Jtb2NrL3BheW1lbnRzL2luYXBwL3YxIiwgImF1ZCI" + + "6ICJtb2NrcGF5cHJvdmlkZXIucGhwZm9nYXBwLmNv" + + "bSIsICJleHAiOiAxMzUyMjI4ODk5fQ.yXGinvZiUs" + + "v9JWvdfM6zPD0iOX9DgCPcIwIbCrL4tcs"; + + testGetPaymentRequest(null, { + jwt: missingRequestJwt, + ret: true, + error: "PAY_REQUEST_ERROR_NO_REQUEST_PARAMETER" + }); + + run_next_test(); +}); + +add_test(function test_jwt_decoding_error() { + let wrongJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.^eyJhdWQiOiAibW9" + + "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + + "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + + "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + + "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + + "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + + "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + + "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + + "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + + "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; + + testGetPaymentRequest(null, { + jwt: wrongJwt, + ret: true, + error: "PAY_REQUEST_ERROR_ERROR_DECODING_JWT" + }); + + run_next_test(); +}); + +add_test(function test_non_https_provider() { + let providers = {}; + let type = "mock/payments/inapp/v1"; + providers[type] = { + name: "mockprovider", + description: "Mock Payment Provider", + uri: "http://mockpayprovider.phpfogapp.com/?req=", + requestMethod: "GET" + }; + + // Payload + // { + // "aud": "mockpayprovider.phpfogapp.com", + // "iss": "Enter you app key here!", + // "request": { + // "name": "Piece of Cake", + // "price": "10.50", + // "priceTier": 1, + // "productdata": "transaction_id=86", + // "currencyCode": "USD", + // "description": "Virtual chocolate cake to fill your virtual tummy" + // }, + // "exp": 1352232792, + // "iat": 1352229192, + // "typ": "mock/payments/inapp/v1" + // } + let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" + + "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + + "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + + "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + + "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + + "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + + "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + + "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + + "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + + "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; + + testGetPaymentRequest(providers, { + jwt: jwt, + ret: true, + error: "INTERNAL_ERROR_NON_HTTPS_PROVIDER_URI" + }); + + run_next_test(); +}); diff --git a/dom/payment/tests/unit/xpcshell.ini b/dom/payment/tests/unit/xpcshell.ini new file mode 100644 index 000000000..0d3a52ed3 --- /dev/null +++ b/dom/payment/tests/unit/xpcshell.ini @@ -0,0 +1,5 @@ +[DEFAULT] +head = header_helper.js +tail = + +[test_paymanager_get_payment_request.js] |