dom/payment/tests/unit/test_paymanager_get_payment_request.js

changeset 0
6474c204b198
     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 +});

mercurial