dom/payment/tests/unit/test_paymanager_get_payment_request.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 "use strict";
     6 function getPaymentHelper() {
     7   let error;
     8   let paym = newPaymentModule();
    10   paym.PaymentManager.paymentFailed = function paymentFailed(aRequestId,
    11                                                              errorMsg) {
    12     error = errorMsg;
    13   };
    15   return {
    16     get paymentModule() {
    17       return paym;
    18     },
    19     get error() {
    20       return error;
    21     }
    22   };
    23 }
    25 function run_test() {
    26   run_next_test();
    27 }
    29 function testGetPaymentRequest(paymentProviders, test) {
    30   let helper = getPaymentHelper();
    31   let paym = helper.paymentModule;
    33   paym.PaymentManager.registeredProviders = paymentProviders;
    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 }
    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   };
    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";
    86   testGetPaymentRequest(providers, {
    87     jwt: jwt,
    88     ret: true,
    89     error: null,
    90     result: {
    91       type: type,
    92       providerName: providers[type].name
    93     }
    94   });
    96   run_next_test();
    97 });
    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   };
   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";
   152   testGetPaymentRequest(providers, {
   153     jwt: jwt,
   154     ret: true,
   155     error: null,
   156     result: {
   157       type: type,
   158       providerName: providers[type].name
   159     }
   160   });
   162   run_next_test();
   163 });
   165 add_test(function test_empty_jwt() {
   166   testGetPaymentRequest(null, {
   167     jwt: "",
   168     ret: true,
   169     error: "INTERNAL_ERROR_CALL_WITH_MISSING_JWT"
   170   });
   172   run_next_test();
   173 });
   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   });
   184   // 2 segments JWT
   185   let TwoSegJwt = "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIwNTg2NDkwMTM2NTY2N" +
   186                   "zU1ODY2MSIsImF1ZCI6Ikdvb2dsZSIsInR5cCI6Imdvb2dsZS9" +
   187                   "wYXltZW50cy9pbmFwcC9pdGVtL3YxIiwiaWF0IjoxMzUyMjIwM" +
   188                   "jEyLCJleHAiOjEzNTIzMDY2MTIsInJlcXVlc3QiOnsiY3VycmV" +
   189                   "uY3lDb2RlIjoiVVNEIiwicHJpY2UiOiIzLjAwIiwibmFtZSI6I" +
   190                   "kdvbGQgU3RhciIsInNlbGxlckRhdGEiOiJzb21lIG9wYXF1ZSB" +
   191                   "kYXRhIiwiZGVzY3JpcHRpb24iOiJBIHNoaW5pbmcgYmFkZ2Ugb" +
   192                   "2YgZGlzdGluY3Rpb24ifX0";
   194   testGetPaymentRequest(null, {
   195     jwt: TwoSegJwt,
   196     ret: true,
   197     error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT"
   198   });
   200   run_next_test();
   201 });
   203 add_test(function test_empty_payload() {
   204   let EmptyPayloadJwt = "eyJhbGciOiJIUzI1NiJ9..eyJpc3MiOiIwNTg2NDkwMTM2NTY2N";
   206   testGetPaymentRequest(null, {
   207     jwt: EmptyPayloadJwt,
   208     ret: true,
   209     error: "PAY_REQUEST_ERROR_EMPTY_PAYLOAD"
   210   });
   212   run_next_test();
   213 });
   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   });
   254   run_next_test();
   255 });
   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";
   274   testGetPaymentRequest(null, {
   275     jwt: missingRequestJwt,
   276     ret: true,
   277     error: "PAY_REQUEST_ERROR_NO_REQUEST_PARAMETER"
   278   });
   280   run_next_test();
   281 });
   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";
   295   testGetPaymentRequest(null, {
   296     jwt: wrongJwt,
   297     ret: true,
   298     error: "PAY_REQUEST_ERROR_ERROR_DECODING_JWT"
   299   });
   301   run_next_test();
   302 });
   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   };
   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";
   341   testGetPaymentRequest(providers, {
   342     jwt: jwt,
   343     ret: true,
   344     error: "INTERNAL_ERROR_NON_HTTPS_PROVIDER_URI"
   345   });
   347   run_next_test();
   348 });

mercurial