michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: "use strict"; michael@0: michael@0: function getPaymentHelper() { michael@0: let error; michael@0: let paym = newPaymentModule(); michael@0: michael@0: paym.PaymentManager.paymentFailed = function paymentFailed(aRequestId, michael@0: errorMsg) { michael@0: error = errorMsg; michael@0: }; michael@0: michael@0: return { michael@0: get paymentModule() { michael@0: return paym; michael@0: }, michael@0: get error() { michael@0: return error; michael@0: } michael@0: }; michael@0: } michael@0: michael@0: function run_test() { michael@0: run_next_test(); michael@0: } michael@0: michael@0: function testGetPaymentRequest(paymentProviders, test) { michael@0: let helper = getPaymentHelper(); michael@0: let paym = helper.paymentModule; michael@0: michael@0: paym.PaymentManager.registeredProviders = paymentProviders; michael@0: michael@0: let ret = paym.PaymentManager.getPaymentRequestInfo("", test.jwt); michael@0: if (!test.result) { michael@0: test.ret ? do_check_true(ret) : do_check_false(ret); michael@0: } michael@0: if (test.error !== null) { michael@0: do_check_eq(helper.error, test.error); michael@0: } else { michael@0: do_check_eq(typeof ret, "object"); michael@0: do_check_eq(ret.jwt, test.jwt); michael@0: do_check_eq(ret.type, test.result.type); michael@0: do_check_eq(ret.providerName, test.result.providerName); michael@0: } michael@0: } michael@0: michael@0: add_test(function test_successfull_request() { michael@0: let providers = {}; michael@0: let type = "mock/payments/inapp/v1"; michael@0: providers[type] = { michael@0: name: "mockprovider", michael@0: description: "Mock Payment Provider", michael@0: uri: "https://mockpayprovider.phpfogapp.com/?req=", michael@0: requestMethod: "GET" michael@0: }; michael@0: michael@0: // Payload michael@0: // { michael@0: // "aud": "mockpayprovider.phpfogapp.com", michael@0: // "iss": "Enter you app key here!", michael@0: // "request": { michael@0: // "name": "Piece of Cake", michael@0: // "price": "10.50", michael@0: // "priceTier": 1, michael@0: // "productdata": "transaction_id=86", michael@0: // "currencyCode": "USD", michael@0: // "description": "Virtual chocolate cake to fill your virtual tummy" michael@0: // }, michael@0: // "exp": 1352232792, michael@0: // "iat": 1352229192, michael@0: // "typ": "mock/payments/inapp/v1" michael@0: // } michael@0: let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" + michael@0: "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + michael@0: "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + michael@0: "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + michael@0: "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + michael@0: "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + michael@0: "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + michael@0: "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + michael@0: "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + michael@0: "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; michael@0: michael@0: testGetPaymentRequest(providers, { michael@0: jwt: jwt, michael@0: ret: true, michael@0: error: null, michael@0: result: { michael@0: type: type, michael@0: providerName: providers[type].name michael@0: } michael@0: }); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_successfull_request_html_description() { michael@0: let providers = {}; michael@0: let type = "mozilla/payments/pay/v1"; michael@0: providers[type] = { michael@0: name: "webpay", michael@0: description: "Mozilla Payment Provider", michael@0: uri: "https://marketplace.firefox.com/mozpay/?req=", michael@0: requestMethod: "GET" michael@0: }; michael@0: michael@0: // Payload michael@0: // { michael@0: // "aud": "marketplace.firefox.com", michael@0: // "iss": "marketplace-dev.allizom.org", michael@0: // "request": { michael@0: // "name": "Krupa's paid app 1", michael@0: // "chargebackURL": "http://localhost:8002/telefonica/services/webpay/" michael@0: // "chargeback", michael@0: // "postbackURL": "http://localhost:8002/telefonica/services/webpay/" michael@0: // "postback", michael@0: // "productData": "addon_id=85&seller_uuid=d4855df9-6ce0-45cd-81cb-" michael@0: // "cf8737e1e7aa&contrib_uuid=201868b7ac2cda410a99b3" michael@0: // "ed4c11a8ea", michael@0: // "pricePoint": 1, michael@0: // "id": "maude:85", michael@0: // "description": "This app has been automatically generated by testmanifest.com" michael@0: // "" michael@0: // }, michael@0: // "exp": 1358379147, michael@0: // "iat": 1358375547, michael@0: // "typ": "mozilla/payments/pay/v1" michael@0: // } michael@0: let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibWFya2V0cGx" + michael@0: "hY2UuZmlyZWZveC5jb20iLCAiaXNzIjogIm1hcmtldHBsYWNlLWRldi5hbGxpem9" + michael@0: "tLm9yZyIsICJyZXF1ZXN0IjogeyJuYW1lIjogIktydXBhJ3MgcGFpZCBhcHAgMSI" + michael@0: "sICJjaGFyZ2ViYWNrVVJMIjogImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi90ZWxlZm9" + michael@0: "uaWNhL3NlcnZpY2VzL3dlYnBheS9jaGFyZ2ViYWNrIiwgInBvc3RiYWNrVVJMIjo" + michael@0: "gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi90ZWxlZm9uaWNhL3NlcnZpY2VzL3dlYnB" + michael@0: "heS9wb3N0YmFjayIsICJwcm9kdWN0RGF0YSI6ICJhZGRvbl9pZD04NSZzZWxsZXJ" + michael@0: "fdXVpZD1kNDg1NWRmOS02Y2UwLTQ1Y2QtODFjYi1jZjg3MzdlMWU3YWEmY29udHJ" + michael@0: "pYl91dWlkPTIwMTg2OGI3YWMyY2RhNDEwYTk5YjNlZDRjMTFhOGVhIiwgInByaWN" + michael@0: "lUG9pbnQiOiAxLCAiaWQiOiAibWF1ZGU6ODUiLCAiZGVzY3JpcHRpb24iOiAiVGh" + michael@0: "pcyBhcHAgaGFzIGJlZW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgPGEgaHJ" + michael@0: "lZj1cImh0dHA6Ly9vdXRnb2luZy5tb3ppbGxhLm9yZy92MS9iYTdmMzczYWUxNjc" + michael@0: "4OWVmZjNhYmZkOTVjYThkM2MxNWQxOGRjOTAwOWFmYTIwNGRjNDNmODVhNTViMWY" + michael@0: "2ZWYxL2h0dHAlM0EvL3Rlc3RtYW5pZmVzdC5jb21cIiByZWw9XCJub2ZvbGxvd1w" + michael@0: "iPnRlc3RtYW5pZmVzdC5jb208L2E-In0sICJleHAiOiAxMzU4Mzc5MTQ3LCAiaWF" + michael@0: "0IjogMTM1ODM3NTU0NywgInR5cCI6ICJtb3ppbGxhL3BheW1lbnRzL3BheS92MSJ" + michael@0: "9.kgSt636OSRBezMGtm9QLeDxlEOevL4xcOoDj8VRJyD8"; michael@0: michael@0: testGetPaymentRequest(providers, { michael@0: jwt: jwt, michael@0: ret: true, michael@0: error: null, michael@0: result: { michael@0: type: type, michael@0: providerName: providers[type].name michael@0: } michael@0: }); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_empty_jwt() { michael@0: testGetPaymentRequest(null, { michael@0: jwt: "", michael@0: ret: true, michael@0: error: "INTERNAL_ERROR_CALL_WITH_MISSING_JWT" michael@0: }); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_wrong_segments_count() { michael@0: // 1 segment JWT michael@0: let OneSegJwt = "eyJhbGciOiJIUzI1NiJ9"; michael@0: testGetPaymentRequest(null, { michael@0: jwt: OneSegJwt, michael@0: ret: true, michael@0: error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT" michael@0: }); michael@0: michael@0: // 2 segments JWT michael@0: let TwoSegJwt = "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIwNTg2NDkwMTM2NTY2N" + michael@0: "zU1ODY2MSIsImF1ZCI6Ikdvb2dsZSIsInR5cCI6Imdvb2dsZS9" + michael@0: "wYXltZW50cy9pbmFwcC9pdGVtL3YxIiwiaWF0IjoxMzUyMjIwM" + michael@0: "jEyLCJleHAiOjEzNTIzMDY2MTIsInJlcXVlc3QiOnsiY3VycmV" + michael@0: "uY3lDb2RlIjoiVVNEIiwicHJpY2UiOiIzLjAwIiwibmFtZSI6I" + michael@0: "kdvbGQgU3RhciIsInNlbGxlckRhdGEiOiJzb21lIG9wYXF1ZSB" + michael@0: "kYXRhIiwiZGVzY3JpcHRpb24iOiJBIHNoaW5pbmcgYmFkZ2Ugb" + michael@0: "2YgZGlzdGluY3Rpb24ifX0"; michael@0: michael@0: testGetPaymentRequest(null, { michael@0: jwt: TwoSegJwt, michael@0: ret: true, michael@0: error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT" michael@0: }); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_empty_payload() { michael@0: let EmptyPayloadJwt = "eyJhbGciOiJIUzI1NiJ9..eyJpc3MiOiIwNTg2NDkwMTM2NTY2N"; michael@0: michael@0: testGetPaymentRequest(null, { michael@0: jwt: EmptyPayloadJwt, michael@0: ret: true, michael@0: error: "PAY_REQUEST_ERROR_EMPTY_PAYLOAD" michael@0: }); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_missing_typ_parameter() { michael@0: // Payload michael@0: // { michael@0: // "iss": "640ae477-df33-45cd-83b8-6f1f910a6494", michael@0: // "iat": 1361203745, michael@0: // "request": { michael@0: // "description": "detailed description", michael@0: // "id": "799db970-7afa-4028-bdb7-8b045eb8babc", michael@0: // "postbackURL": "http://inapp-pay-test.farmdev.com/postback", michael@0: // "productData": "transaction_id=58", michael@0: // "pricePoint": 1, michael@0: // "chargebackURL": "http://inapp-pay-test.farmdev.com/chargeback", michael@0: // "name": "The Product" michael@0: // }, michael@0: // "aud": "marketplace-dev.allizom.org", michael@0: // "exp": 1361207345 michael@0: // } michael@0: let missingTypJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9." + michael@0: "eyJpc3MiOiAiNjQwYWU0NzctZGYzMy00NWNkLTgzY" + michael@0: "jgtNmYxZjkxMGE2NDk0IiwgImlhdCI6IDEzNjEyMD" + michael@0: "M3NDUsICJyZXF1ZXN0IjogeyJkZXNjcmlwdGlvbiI" + michael@0: "6ICJkZXRhaWxlZCBkZXNjcmlwdGlvbiIsICJpZCI6" + michael@0: "ICI3OTlkYjk3MC03YWZhLTQwMjgtYmRiNy04YjA0N" + michael@0: "WViOGJhYmMiLCAicG9zdGJhY2tVUkwiOiAiaHR0cD" + michael@0: "ovL2luYXBwLXBheS10ZXN0LmZhcm1kZXYuY29tL3B" + michael@0: "vc3RiYWNrIiwgInByb2R1Y3REYXRhIjogInRyYW5z" + michael@0: "YWN0aW9uX2lkPTU4IiwgInByaWNlUG9pbnQiOiAxL" + michael@0: "CAiY2hhcmdlYmFja1VSTCI6ICJodHRwOi8vaW5hcH" + michael@0: "AtcGF5LXRlc3QuZmFybWRldi5jb20vY2hhcmdlYmF" + michael@0: "jayIsICJuYW1lIjogIlRoZSBQcm9kdWN0In0sICJh" + michael@0: "dWQiOiAibWFya2V0cGxhY2UtZGV2LmFsbGl6b20ub" + michael@0: "3JnIiwgImV4cCI6IDEzNjEyMDczNDV9.KAHsJX1Hy" + michael@0: "fmwNvAckdVUqlpPvdHggpx9yX276TWacRg"; michael@0: testGetPaymentRequest(null, { michael@0: jwt: missingTypJwt, michael@0: ret: true, michael@0: error: "PAY_REQUEST_ERROR_NO_TYP_PARAMETER" michael@0: }); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_missing_request_parameter() { michael@0: // Payload michael@0: // { michael@0: // "iss": "Enter you app key here!", michael@0: // "iat": 1352225299, michael@0: // "typ": "mock/payments/inapp/v1", michael@0: // "aud": "mockpayprovider.phpfogapp.com", michael@0: // "exp": 1352228899 michael@0: // } michael@0: let missingRequestJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9." + michael@0: "eyJpc3MiOiAiRW50ZXIgeW91IGFwcCBrZXkgaGVyZ" + michael@0: "SEiLCAiaWF0IjogMTM1MjIyNTI5OSwgInR5cCI6IC" + michael@0: "Jtb2NrL3BheW1lbnRzL2luYXBwL3YxIiwgImF1ZCI" + michael@0: "6ICJtb2NrcGF5cHJvdmlkZXIucGhwZm9nYXBwLmNv" + michael@0: "bSIsICJleHAiOiAxMzUyMjI4ODk5fQ.yXGinvZiUs" + michael@0: "v9JWvdfM6zPD0iOX9DgCPcIwIbCrL4tcs"; michael@0: michael@0: testGetPaymentRequest(null, { michael@0: jwt: missingRequestJwt, michael@0: ret: true, michael@0: error: "PAY_REQUEST_ERROR_NO_REQUEST_PARAMETER" michael@0: }); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_jwt_decoding_error() { michael@0: let wrongJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.^eyJhdWQiOiAibW9" + michael@0: "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + michael@0: "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + michael@0: "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + michael@0: "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + michael@0: "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + michael@0: "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + michael@0: "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + michael@0: "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + michael@0: "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; michael@0: michael@0: testGetPaymentRequest(null, { michael@0: jwt: wrongJwt, michael@0: ret: true, michael@0: error: "PAY_REQUEST_ERROR_ERROR_DECODING_JWT" michael@0: }); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_non_https_provider() { michael@0: let providers = {}; michael@0: let type = "mock/payments/inapp/v1"; michael@0: providers[type] = { michael@0: name: "mockprovider", michael@0: description: "Mock Payment Provider", michael@0: uri: "http://mockpayprovider.phpfogapp.com/?req=", michael@0: requestMethod: "GET" michael@0: }; michael@0: michael@0: // Payload michael@0: // { michael@0: // "aud": "mockpayprovider.phpfogapp.com", michael@0: // "iss": "Enter you app key here!", michael@0: // "request": { michael@0: // "name": "Piece of Cake", michael@0: // "price": "10.50", michael@0: // "priceTier": 1, michael@0: // "productdata": "transaction_id=86", michael@0: // "currencyCode": "USD", michael@0: // "description": "Virtual chocolate cake to fill your virtual tummy" michael@0: // }, michael@0: // "exp": 1352232792, michael@0: // "iat": 1352229192, michael@0: // "typ": "mock/payments/inapp/v1" michael@0: // } michael@0: let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" + michael@0: "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + michael@0: "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + michael@0: "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + michael@0: "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + michael@0: "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + michael@0: "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + michael@0: "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + michael@0: "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + michael@0: "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; michael@0: michael@0: testGetPaymentRequest(providers, { michael@0: jwt: jwt, michael@0: ret: true, michael@0: error: "INTERNAL_ERROR_NON_HTTPS_PROVIDER_URI" michael@0: }); michael@0: michael@0: run_next_test(); michael@0: });