diff --git a/README.md b/README.md index 0419052..03df6fc 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Omise.config('pkey_test_596un7xggnyo73nm7an', '2015-11-17'); ``` ## Usage - +### Create a token ``` const data = await Omise.createToken({ 'card': { @@ -30,7 +30,18 @@ const data = await Omise.createToken({ 'expiration_year': 2018, 'security_code': 123 } - }); +}); + +console.log("data", data); +``` + +### Create a source +``` +const data = await Omise.createSource( + 'type': 'internet_banking_bbl', + 'amount': 500000, + 'currency': 'thb' +}); - console.log("data", data); +console.log("data", data); ``` \ No newline at end of file diff --git a/index.js b/index.js index f72d9ff..e1429e1 100644 --- a/index.js +++ b/index.js @@ -1,35 +1,100 @@ const base64 = require("base-64"); const pkgConfig = require("./package.json"); -const tokenEndpoint = "https://vault.omise.co/tokens"; +const vaultEndpoint = "https://vault.omise.co/"; +const apiEndpoint = "https://api.omise.co/"; let _publicKey; let _apiVersion; + +/** + * ReactNativeOmise + */ class ReactNativeOmise { + /** + * constructor + */ + constructor() { + this.createSource = this.createSource.bind(this); + this.createToken = this.createToken.bind(this); + } + + /** + * To set a public key and API version + * @param {String} publicKey + * @param {String} apiVersion + */ config(publicKey, apiVersion = "2015-11-17") { _publicKey = publicKey; _apiVersion = apiVersion; } + /** + * Get headers + * @return {*} headers + */ + getHeaders() { + let headers = new Headers(); + headers.append('Authorization', 'Basic ' + base64.encode(_publicKey + ":")); + headers.append('User-Agent', pkgConfig.name + "/" + pkgConfig.version); + headers.append('Content-Type', 'application/json'); + + if (_apiVersion && _apiVersion !== "") { + headers.append('Omise-Version', _apiVersion); + } + + return headers; + } + + /** + * Create a token + * @param {*} data + */ createToken(data) { + const tokenEndpoint = vaultEndpoint + "tokens"; + // set headers + let headers = this.getHeaders(); + return new Promise((resolve, reject) => { // verify a public key if (!_publicKey || _publicKey === "") { reject("Please config your public key"); return; } + + return fetch(tokenEndpoint, { + method: 'POST', + cache: 'no-cache', + headers: headers, + body: JSON.stringify(data) + }).then((response) => { + if (response.ok && response.status === 200) { + resolve(response.json()); + } else { + console.log("response not ok", response); + reject(response.json()); + } + }).catch((error) => resolve(error)); + }); + } - // set headers - let headers = new Headers(); - headers.append('Authorization', 'Basic ' + base64.encode(_publicKey + ":")); - headers.append('User-Agent', pkgConfig.name + "/" + pkgConfig.version); - headers.append('Content-Type', 'application/json'); + /** + * Create a source + * @param {*} data + */ + createSource(data) { + const sourceEndpoint = apiEndpoint + "sources"; + // set headers + let headers = this.getHeaders(); - if (_apiVersion && _apiVersion !== "") { - headers.append('Omise-Version', _apiVersion); + return new Promise((resolve, reject) => { + // verify a public key + if (!_publicKey || _publicKey === "") { + reject("Please config your public key"); + return; } - fetch(tokenEndpoint, { + return fetch(sourceEndpoint, { method: 'POST', cache: 'no-cache', headers: headers, @@ -51,5 +116,6 @@ const reactNativeOmise = new ReactNativeOmise(); module.exports = { config: reactNativeOmise.config, - createToken: reactNativeOmise.createToken + createToken: reactNativeOmise.createToken, + createSource: reactNativeOmise.createSource } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c8f9ac6..87d93b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,19 @@ { "name": "omise-react-native", - "version": "0.0.1", + "version": "0.0.3", "lockfileVersion": 1, "requires": true, "dependencies": { "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", - "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "base-64": { @@ -15,120 +21,178 @@ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "chai": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-2.3.0.tgz", - "integrity": "sha1-ii9qNHSNqAEJD9cyh7Kqc5pOkJo=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.0.0", - "deep-eql": "0.1.3" + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.8" } }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, "commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "0.1.1" + "type-detect": "4.0.8" } }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "fetch-ponyfill": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-6.0.0.tgz", - "integrity": "sha512-Y67pujjJLFeUXp/vZvw7cy8p0BoZvrZo9psB70tbgcDKtMs7cpjU+oIO2e4IVvPDeMbSFOXip3IFtPko78La4g==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-6.0.2.tgz", + "integrity": "sha512-hBWVb6Z0chjr9r0g4N5uknldAnyFstWTnX6oFxMsL9ZlSL7fa66Keis3y4SCMgpTggY4GeGbB4z3z5g5SmrgkQ==", "dev": true, "requires": { - "node-fetch": "2.0.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.0.0.tgz", - "integrity": "sha1-mCu6Q+zU8pIqKcwYamu7C7c/y6Y=", - "dev": true - } + "node-fetch": "2.1.2" } }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", "inherits": "2.0.3", - "minimatch": "0.3.0" + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "dev": true, - "requires": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "dependencies": { - "commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", - "dev": true - }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "dev": true - } - } + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", "dev": true }, "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -147,38 +211,22 @@ } }, "mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, "requires": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } + "supports-color": "5.4.0" } }, "ms": { @@ -188,79 +236,86 @@ "dev": true }, "nock": { - "version": "0.59.1", - "resolved": "https://registry.npmjs.org/nock/-/nock-0.59.1.tgz", - "integrity": "sha1-ccA2PXLSdybN6n3gBFC6JhCqPoo=", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/nock/-/nock-9.3.3.tgz", + "integrity": "sha512-FBgnx25er2ly7KBr0Est5F0z5g+lnyr6a72vZI1KMi7nTL4ojU6XpFhlrfw6CXRdnT2FA5i8exHiT1uVNUM1qA==", "dev": true, "requires": { - "chai": "1.10.0", - "debug": "1.0.5", - "lodash": "2.4.1", + "chai": "4.1.2", + "debug": "3.1.0", + "deep-equal": "1.0.1", + "json-stringify-safe": "5.0.1", + "lodash": "4.17.10", "mkdirp": "0.5.1", - "propagate": "0.3.1" - }, - "dependencies": { - "chai": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-1.10.0.tgz", - "integrity": "sha1-5AMcyHZURhp1lD5aNatG6vOcHrk=", - "dev": true, - "requires": { - "assertion-error": "1.0.0", - "deep-eql": "0.1.3" - } - }, - "debug": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.5.tgz", - "integrity": "sha1-9yQSF0MPmd7EwrRz6rkiKOh0wqw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "lodash": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", - "integrity": "sha1-W3cjA03aTSYuWkb7LFjXzCL3FCA=", - "dev": true - } + "propagate": "1.0.0", + "qs": "6.5.2", + "semver": "5.5.0" } }, "node-fetch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.1.tgz", - "integrity": "sha1-NpynC4L1DIZJYQSmx3bSdPTkotQ=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=", "dev": true }, - "propagate": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.3.1.tgz", - "integrity": "sha1-46hEBKfs6CDda76p9tkk4xNa4Jw=", - "dev": true + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, - "sigmund": { + "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "propagate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz", + "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, - "to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true } } diff --git a/package.json b/package.json index 519348d..4345a89 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "omise-react-native", - "version": "0.0.3", + "version": "0.0.4", "private": false, "description": "", "main": "index.js", @@ -23,10 +23,10 @@ "base-64": "^0.1.0" }, "devDependencies": { - "chai": "^2.0.0", - "mocha": "^2.1.0", - "nock": "^0.59.1", - "node-fetch": "^2.1.1", - "fetch-ponyfill": "^6.0.0" + "chai": "^4.1.2", + "mocha": "^5.2.0", + "nock": "^9.3.3", + "node-fetch": "^2.1.2", + "fetch-ponyfill": "^6.0.2" } } diff --git a/test/mocks/sources_create.js b/test/mocks/sources_create.js new file mode 100644 index 0000000..6cf2281 --- /dev/null +++ b/test/mocks/sources_create.js @@ -0,0 +1,21 @@ +const nock = require("nock"); +nock("https://api.omise.co") + .persist() + .post("/sources") + .reply( + 200, + { + object: "source", + id: "src_test_5cd1vt51zdjrmy2leyg", + livemode: false, + location: "/sources/src_test_5cd1vt51zdjrmy2leyg", + type: "internet_banking_bbl", + flow: "redirect", + amount: 500000, + currency: "thb" + }, + { + server: "nginx/1.1", + "content-type": "application/json" + } + ); diff --git a/test/mocks/sources_create_error_api_version.js b/test/mocks/sources_create_error_api_version.js new file mode 100644 index 0000000..c85cdbb --- /dev/null +++ b/test/mocks/sources_create_error_api_version.js @@ -0,0 +1,17 @@ +const nock = require("nock"); +nock("https://api.omise.co") + .persist() + .post("/sources") + .reply( + 200, + { + object: "error", + location: "https://www.omise.co/api-errors#service-not-found", + code: "service_not_found", + message: "you are using api version which does not support this operation" + }, + { + server: "nginx/1.1", + "content-type": "application/json" + } + ); diff --git a/test/mocks/tokens_create.js b/test/mocks/tokens_create.js index 2e824c1..7c753ca 100644 --- a/test/mocks/tokens_create.js +++ b/test/mocks/tokens_create.js @@ -1,11 +1,15 @@ -var nock = require('nock'); -nock('https://vault.omise.co') - .persist() - .post('/tokens') - .reply(200, { - 'id': 'tokn_test_4xs9408a642a1htto8z', - 'card': { 'id': 'card_test_4xs94086bpvq56tghuo' }, - }, { - 'server': 'nginx/1.1', - 'content-type': 'application/json', - }); \ No newline at end of file +const nock = require("nock"); +nock("https://vault.omise.co") + .persist() + .post("/tokens") + .reply( + 200, + { + id: "tokn_test_4xs9408a642a1htto8z", + card: { id: "card_test_4xs94086bpvq56tghuo" } + }, + { + server: "nginx/1.1", + "content-type": "application/json" + } + ); diff --git a/test/testHelper.js b/test/testHelper.js index 4f036c6..93293d6 100644 --- a/test/testHelper.js +++ b/test/testHelper.js @@ -7,4 +7,10 @@ module.exports = { require(['./mocks', name].join('/')); } }, + cleanAll: function() { + if (process.env.NOCK_OFF !== 'true') { + const nock = require("nock"); + nock.cleanAll(); + } + } }; \ No newline at end of file diff --git a/test/test_omise_sources.js b/test/test_omise_sources.js new file mode 100644 index 0000000..6544e27 --- /dev/null +++ b/test/test_omise_sources.js @@ -0,0 +1,66 @@ +const chai = require('chai'); +const expect = chai.expect; +const should = chai.should(); + +// const config = require('./config'); +const reactNativeOmise = require('../index'); +const testHelper = require('./testHelper'); + +describe('Omise', function () { + describe('#Sources', function () { + + beforeEach(function () { + global.fetch = require('node-fetch'); + global.Headers = require('fetch-ponyfill')().Headers; + }); + + + let sourceId = ''; + it('should be able to create a source', function (done) { + testHelper.cleanAll(); + testHelper.setupMock('sources_create'); + + let sourceDetails = { + 'type': 'internet_banking_bbl', + 'amount': 500000, + 'currency': 'thb' + }; + + reactNativeOmise.config('pkey_test_xxxxxxx', '2017-11-02'); + reactNativeOmise.createSource(sourceDetails) + .then(function (resp) { + should.exist(resp.id); + sourceId = resp.id; + expect(sourceId).to.contains('src_test'); + should.exist(resp.type); + expect(resp.type).to.contains('internet_banking_bbl'); + done(); + }).catch(error => { + done(error); + }); + }); + + it('should not be able to create a source', function (done) { + testHelper.cleanAll(); + testHelper.setupMock('sources_create_error_api_version'); + + let sourceDetails = { + 'type': 'internet_banking_bbl', + 'amount': 500000, + 'currency': 'thb' + }; + + reactNativeOmise.config('pkey_test_xxxxxxx'); + reactNativeOmise.createSource(sourceDetails) + .then(function (resp) { + should.exist(resp.object); + expect(resp.object).to.contains('error'); + should.exist(resp.code); + expect(resp.code).to.contains('service_not_found'); + done(); + }).catch(error => { + done(error); + }); + }); + }); +}); \ No newline at end of file