From 547f41db066433c79d5225934f33932d1e010cbc Mon Sep 17 00:00:00 2001 From: scott-wyatt Date: Sun, 5 Aug 2018 14:00:36 -0400 Subject: [PATCH] [chore] base classes for generics [fix] config conflicts --- lib/GenericsSpool.ts | 2 +- lib/defaults/DataStoreDefault.ts | 28 +++++- lib/defaults/EmailDefault.ts | 10 +- lib/defaults/FulfillmentDefault.ts | 33 ++++++- lib/defaults/GeolocationDefault.ts | 10 ++ lib/defaults/ImageDefault.ts | 5 + lib/defaults/PaymentDefault.ts | 152 ++++++++++++++++++++++++++++- lib/defaults/RenderDefault.ts | 10 ++ lib/defaults/ShippingDefault.ts | 14 ++- lib/defaults/TaxDefault.ts | 34 ++++++- lib/defaults/index.ts | 9 ++ package-lock.json | 8 +- package.json | 6 +- test/fixtures/FakeDataStore.js | 28 +----- test/fixtures/FakeEmail.js | 10 +- test/fixtures/FakeFulfillment.js | 35 +------ test/fixtures/FakeGeolocation.js | 9 +- test/fixtures/FakeImage.js | 2 +- test/fixtures/FakePayment.js | 137 +------------------------- test/fixtures/FakeRender.js | 9 +- test/fixtures/FakeShipping.js | 12 +-- test/fixtures/FakeTax.js | 33 +------ test/unit/generics/config.test.js | 2 +- 23 files changed, 326 insertions(+), 272 deletions(-) create mode 100644 lib/defaults/GeolocationDefault.ts create mode 100644 lib/defaults/ImageDefault.ts create mode 100644 lib/defaults/RenderDefault.ts create mode 100644 lib/defaults/index.ts diff --git a/lib/GenericsSpool.ts b/lib/GenericsSpool.ts index 8a63ac4..6033285 100755 --- a/lib/GenericsSpool.ts +++ b/lib/GenericsSpool.ts @@ -23,7 +23,7 @@ export class GenericsSpool extends Spool { defaultsDeep(this.api, generics[generic].api) } if (generics[generic].hasOwnProperty('config')) { - this.config = Object.assign(this.config, generics[generic].config) + this.app.config.set(generic, generics[generic].config) } }) } diff --git a/lib/defaults/DataStoreDefault.ts b/lib/defaults/DataStoreDefault.ts index 7f03bf7..4779067 100755 --- a/lib/defaults/DataStoreDefault.ts +++ b/lib/defaults/DataStoreDefault.ts @@ -1,3 +1,29 @@ -export class DataStoreDefault { +import { Generic } from '../Generic' +export class DataStoreDefault extends Generic { + upload(buffer) { + const res = { + status: 'success', + url: 'https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150' + } + return Promise.resolve(res) + } + + uploadFile(file) { + const res = { + status: 'success', + url: file.url + } + return Promise.resolve(res) + } + + uploadFiles(files) { + const res = files.map(file => { + return { + status: 'success', + url: file.url + } + }) + return Promise.resolve(res) + } } diff --git a/lib/defaults/EmailDefault.ts b/lib/defaults/EmailDefault.ts index 955ae64..da92ac8 100755 --- a/lib/defaults/EmailDefault.ts +++ b/lib/defaults/EmailDefault.ts @@ -1,3 +1,11 @@ -export class EmailDefault { +import { Generic } from '../Generic' +export class EmailDefault extends Generic { + send(data) { + return Promise.resolve([]) + } + + sendTemplate(data) { + return Promise.resolve([]) + } } diff --git a/lib/defaults/FulfillmentDefault.ts b/lib/defaults/FulfillmentDefault.ts index f878809..841f089 100755 --- a/lib/defaults/FulfillmentDefault.ts +++ b/lib/defaults/FulfillmentDefault.ts @@ -1,3 +1,34 @@ -export class FulfillmentDefault { +import { Generic } from '../Generic' +export class FulfillmentDefault extends Generic { + createOrder(data) { + return Promise.resolve({}) + } + createOrders(data) { + return Promise.resolve([]) + } + updateOrder(data) { + return Promise.resolve({}) + } + updateOrders(data) { + return Promise.resolve([]) + } + destroyOrder(data) { + return Promise.resolve({}) + } + destroyOrders(data) { + return Promise.resolve([]) + } + getOrder(data) { + return Promise.resolve({}) + } + getOrders(data) { + return Promise.resolve([]) + } + holdOrder(data) { + return Promise.resolve({}) + } + holdOrders(data) { + return Promise.resolve([]) + } } diff --git a/lib/defaults/GeolocationDefault.ts b/lib/defaults/GeolocationDefault.ts new file mode 100644 index 0000000..faa0456 --- /dev/null +++ b/lib/defaults/GeolocationDefault.ts @@ -0,0 +1,10 @@ +import { Generic } from '../Generic' + +export class GeolocationDefault extends Generic { + locate(data) { + return Promise.resolve({ + latitude: 0.000000, + longitude: 0.000000 + }) + } +} diff --git a/lib/defaults/ImageDefault.ts b/lib/defaults/ImageDefault.ts new file mode 100644 index 0000000..602ee94 --- /dev/null +++ b/lib/defaults/ImageDefault.ts @@ -0,0 +1,5 @@ +import { Generic } from '../Generic' + +export class ImageDefault extends Generic { + +} diff --git a/lib/defaults/PaymentDefault.ts b/lib/defaults/PaymentDefault.ts index 90492fd..b2873da 100755 --- a/lib/defaults/PaymentDefault.ts +++ b/lib/defaults/PaymentDefault.ts @@ -1,3 +1,153 @@ -export class PaymentDefault { +import { Generic } from '../Generic' +import * as shortid from 'shortid' +export class PaymentDefault extends Generic { + authorize(transaction) { + + transaction.kind = 'authorize' + transaction.authorization = 'abc123' + + if (transaction.payment_details.length === 0) { + transaction.error_code = 'processing_error' + transaction.status = 'failure' + } + else { + transaction.status = 'success' + transaction.payment_details.avs_result_code = '123' + transaction.payment_details.credit_card_iin = '123' + transaction.payment_details.credit_card_company = 'visa' + transaction.payment_details.credit_card_number = '**** **** **** 1234' + transaction.payment_details.cvv_result_code = 'Y' + } + return Promise.resolve(transaction) + } + + capture(transaction) { + transaction.status = 'success' + transaction.kind = 'capture' + return Promise.resolve(transaction) + } + + sale(transaction) { + transaction.authorization = 'abc123' + transaction.status = 'success' + transaction.kind = 'sale' + transaction.payment_details.avs_result_code = '123' + transaction.payment_details.credit_card_iin = '123' + transaction.payment_details.credit_card_company = 'visa' + transaction.payment_details.credit_card_number = '**** **** **** 1234' + transaction.payment_details.cvv_result_code = 'Y' + + return Promise.resolve(transaction) + } + + void(transaction) { + transaction.kind = 'void' + transaction.status = 'success' + return Promise.resolve(transaction) + } + + refund(transaction) { + transaction.kind = 'refund' + transaction.status = 'success' + return Promise.resolve(transaction) + } + + createCustomer(customer) { + const res = { + gateway: 'payment_processor', + foreign_key: 'customer', + foreign_id: 'customer_' + shortid.generate(), + data: customer + } + return Promise.resolve(res) + } + + createCustomerSource(source) { + const res = { + gateway: 'payment_processor', + account_foreign_key: 'customer', + account_foreign_id: source.account_foreign_id, + foreign_key: 'customer', + foreign_id: 'source_' + shortid.generate(), + payment_details: source + } + return Promise.resolve(res) + } + + findCustomer(customer) { + const res = { + gateway: 'payment_processor', + foreign_key: 'customer', + foreign_id: customer.foreign_id, + data: customer + } + return Promise.resolve(res) + } + + findCustomerSource(source) { + const res = { + gateway: 'payment_processor', + account_foreign_key: 'customer', + account_foreign_id: source.account_foreign_id, + foreign_key: 'source', + foreign_id: source.foreign_key, + payment_details: source + } + return Promise.resolve(res) + } + + getCustomerSources(customer) { + const res = { + gateway: 'payment_processor', + foreign_key: 'customer', + foreign_id: customer.foreign_id, + data: customer, + sources: [ + { + gateway: 'payment_processor', + account_foreign_key: 'customer', + account_foreign_id: customer.foreign_id, + foreign_key: 'source', + foreign_id: 'source_' + shortid.generate(), + payment_details: {} + } + ] + } + return Promise.resolve(res) + } + + updateCustomer(customer) { + const res = { + gateway: 'payment_processor', + foreign_key: 'customer', + foreign_id: customer.id, + data: customer + } + return Promise.resolve(res) + } + + updateCustomerSource(source) { + const res = { + gateway: 'payment_processor', + account_foreign_id: source.account_foreign_id, + account_foreign_key: 'customer', + foreign_key: 'source', + foreign_id: source.foreign_id, + payment_details: source + } + return Promise.resolve(res) + } + + removeCustomerSource(source) { + const res = { + gateway: 'payment_processor', + account_foreign_id: source.account_foreign_id, + account_foreign_key: 'customer', + foreign_key: 'source', + foreign_id: source.foreign_id, + payment_details: source + } + return Promise.resolve(res) + } } diff --git a/lib/defaults/RenderDefault.ts b/lib/defaults/RenderDefault.ts new file mode 100644 index 0000000..f790934 --- /dev/null +++ b/lib/defaults/RenderDefault.ts @@ -0,0 +1,10 @@ +import { Generic } from '../Generic' + +export class RenderDefault extends Generic { + render(data) { + return Promise.resolve({document: data}) + } + renderSync(data) { + return { document: data } + } +} diff --git a/lib/defaults/ShippingDefault.ts b/lib/defaults/ShippingDefault.ts index 4ea4a48..750f837 100755 --- a/lib/defaults/ShippingDefault.ts +++ b/lib/defaults/ShippingDefault.ts @@ -1,3 +1,15 @@ -export class ShippingDefault { +import { Generic } from '../Generic' +export class ShippingDefault extends Generic { + validateAddress(data) { + return Promise.resolve(data) + } + + getRate(data) { + return Promise.resolve({}) + } + + getRates(data) { + return Promise.resolve([]) + } } diff --git a/lib/defaults/TaxDefault.ts b/lib/defaults/TaxDefault.ts index c612b14..6cb173b 100755 --- a/lib/defaults/TaxDefault.ts +++ b/lib/defaults/TaxDefault.ts @@ -1,3 +1,35 @@ -export class TaxDefault { +import { Generic } from '../Generic' +export class TaxDefault extends Generic { + getRate(data) { + return Promise.resolve({ + amount: 1000, + rate: 0.075, + title: 'Sales Tax', + tax_details: {} + }) + } + + taxForOrder(data) { + return Promise.resolve({ + total_taxes: 10, + tax_lines: [ + { + name: 'fake sales tax', + price: data.line_items.length * 5 + } + ], + line_items: data.line_items.map(item => { + return Object.assign({}, item, { + total_taxes: 5, + tax_lines: [ + { + name: 'fake sales tax', + price: 5 + } + ] + }) + }) + }) + } } diff --git a/lib/defaults/index.ts b/lib/defaults/index.ts new file mode 100644 index 0000000..5e49ed5 --- /dev/null +++ b/lib/defaults/index.ts @@ -0,0 +1,9 @@ +export { DataStoreDefault } from './DataStoreDefault' +export { EmailDefault } from './EmailDefault' +export { FulfillmentDefault } from './FulfillmentDefault' +export { GeolocationDefault } from './GeolocationDefault' +export { ImageDefault } from './ImageDefault' +export { PaymentDefault } from './PaymentDefault' +export { RenderDefault } from './RenderDefault' +export { ShippingDefault } from './ShippingDefault' +export { TaxDefault } from './TaxDefault' diff --git a/package-lock.json b/package-lock.json index 5339a1d..68dcba8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@fabrix/spool-generics", - "version": "1.1.1", + "version": "1.1.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -114,9 +114,9 @@ } }, "@fabrix/fabrix": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@fabrix/fabrix/-/fabrix-1.1.3.tgz", - "integrity": "sha512-B5KpWcrhLQybEmlaYqRxUE8+rli62+BrlupqA/siJePAjRYs98UmrTmoJaUMVqI4IkJgtwe2TMlXFng1mthhwg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@fabrix/fabrix/-/fabrix-1.1.4.tgz", + "integrity": "sha512-2bvYZGmtXjPZhNZvoqhxmHR/dU92hcvbwU6aEs6hA9uRFYqdWe8Ar6prWc6y7Q2Lvf/pbtY9/mTYSsJpHXlQow==", "dev": true, "requires": { "lodash": "4.17.10", diff --git a/package.json b/package.json index 77e3ba3..713d2a2 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@fabrix/spool-generics", - "version": "1.1.1", + "version": "1.1.2", "description": "Spool - Generic API", "homepage": "https://fabrix.app", "author": { @@ -40,7 +40,7 @@ "joi": "^13.4.0" }, "devDependencies": { - "@fabrix/fabrix": "^1.1.3", + "@fabrix/fabrix": "^1.1.4", "@fabrix/lint": "^1.0.0-alpha.3", "@fabrix/spool-router": "^1.1.3", "@types/lodash": "^4.14.109", @@ -57,7 +57,7 @@ "typescript": "~2.8.1" }, "peerDependencies": { - "@fabrix/fabrix": "^1.1.3", + "@fabrix/fabrix": "^1.1.4", "@fabrix/spool-router": "^1.1.3" }, "engines": { diff --git a/test/fixtures/FakeDataStore.js b/test/fixtures/FakeDataStore.js index b6a57a8..1e0a357 100755 --- a/test/fixtures/FakeDataStore.js +++ b/test/fixtures/FakeDataStore.js @@ -1,28 +1,6 @@ 'use strict' -const _ = require('lodash') -const Generic = require('../../dist/Generic').Generic + +const Generic = require('../../dist/defaults').DataStoreDefault module.exports = class FakeDataStoreProvider extends Generic { - upload(buffer) { - const res = { - status: 'success', - url: 'https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150' - } - return Promise.resolve(res) - } - uploadFile(file) { - const res = { - status: 'success', - url: file.url - } - return Promise.resolve(res) - } - uploadFiles(files) { - const res = _.map(files, file => { - return { - status: 'success', - url: file.url - } - }) - return Promise.resolve(res) - } + } diff --git a/test/fixtures/FakeEmail.js b/test/fixtures/FakeEmail.js index 0c01abc..8d8b09c 100755 --- a/test/fixtures/FakeEmail.js +++ b/test/fixtures/FakeEmail.js @@ -1,12 +1,6 @@ 'use strict' -// const _ = require('lodash') -const Generic = require('../../dist/Generic').Generic + +const Generic = require('../../dist/defaults').EmailDefault module.exports = class FakeEmailProvider extends Generic { - send(data) { - return Promise.resolve([]) - } - sendTemplate(data) { - return Promise.resolve([]) - } } diff --git a/test/fixtures/FakeFulfillment.js b/test/fixtures/FakeFulfillment.js index 1e6e3d8..ed02d36 100755 --- a/test/fixtures/FakeFulfillment.js +++ b/test/fixtures/FakeFulfillment.js @@ -1,35 +1,6 @@ 'use strict' -// const _ = require('lodash') -const Generic = require('../../dist/Generic').Generic +const Generic = require('../../dist/defaults').FulfillmentDefault + module.exports = class FakeFulfillmentProvider extends Generic { - createOrder(data, adapter){ - return Promise.resolve({}) - } - createOrders(data, adapter){ - return Promise.resolve([]) - } - updateOrder(data){ - return Promise.resolve({}) - } - updateOrders(data){ - return Promise.resolve([]) - } - destroyOrder(data){ - return Promise.resolve({}) - } - destroyOrders(data){ - return Promise.resolve([]) - } - getOrder(data){ - return Promise.resolve({}) - } - getOrders(data){ - return Promise.resolve([]) - } - holdOrder(data){ - return Promise.resolve({}) - } - holdOrders(data){ - return Promise.resolve([]) - } + } diff --git a/test/fixtures/FakeGeolocation.js b/test/fixtures/FakeGeolocation.js index 0f195ba..b63e660 100755 --- a/test/fixtures/FakeGeolocation.js +++ b/test/fixtures/FakeGeolocation.js @@ -1,11 +1,6 @@ 'use strict' // const _ = require('lodash') -const Generic = require('../../dist/Generic').Generic +const Generic = require('../../dist/defaults').GeolocationDefault module.exports = class FakeGeolocationProvider extends Generic { - locate(data) { - return Promise.resolve({ - latitude: 0.000000, - longitude: 0.000000 - }) - } + } diff --git a/test/fixtures/FakeImage.js b/test/fixtures/FakeImage.js index a38b03b..2f03c17 100755 --- a/test/fixtures/FakeImage.js +++ b/test/fixtures/FakeImage.js @@ -1,6 +1,6 @@ 'use strict' // const _ = require('lodash') -const Generic = require('../../dist/Generic').Generic +const Generic = require('../../dist/defaults').ImageDefault module.exports = class FakeImageProcessor extends Generic { } diff --git a/test/fixtures/FakePayment.js b/test/fixtures/FakePayment.js index 95e3360..40beab9 100755 --- a/test/fixtures/FakePayment.js +++ b/test/fixtures/FakePayment.js @@ -1,141 +1,6 @@ 'use strict' const shortid = require('shortid') -const Generic = require('../../dist/Generic').Generic +const Generic = require('../../dist/defaults').PaymentDefault module.exports = class FakePaymentProcessor extends Generic { - authorize(transaction) { - transaction.kind = 'authorize' - transaction.authorization = 'abc123' - - if (transaction.payment_details.length == 0) { - transaction.error_code = 'processing_error' - transaction.status = 'failure' - } - else { - transaction.status = 'success' - transaction.payment_details.avs_result_code = '123' - transaction.payment_details.credit_card_iin = '123' - transaction.payment_details.credit_card_company = 'visa' - transaction.payment_details.credit_card_number = '**** **** **** 1234' - transaction.payment_details.cvv_result_code = 'Y' - } - return Promise.resolve(transaction) - } - capture(transaction) { - transaction.status = 'success' - transaction.kind = 'capture' - return Promise.resolve(transaction) - } - sale(transaction) { - transaction.authorization = 'abc123' - transaction.status = 'success' - transaction.kind = 'sale' - transaction.payment_details.avs_result_code = '123' - transaction.payment_details.credit_card_iin = '123' - transaction.payment_details.credit_card_company = 'visa' - transaction.payment_details.credit_card_number = '**** **** **** 1234' - transaction.payment_details.cvv_result_code = 'Y' - - return Promise.resolve(transaction) - } - void(transaction) { - transaction.kind = 'void' - transaction.status = 'success' - return Promise.resolve(transaction) - } - refund(transaction) { - transaction.kind = 'refund' - transaction.status = 'success' - return Promise.resolve(transaction) - } - createCustomer(customer) { - const res = { - gateway: 'payment_processor', - foreign_key: 'customer', - foreign_id: 'customer_' + shortid.generate(), - data: customer - } - return Promise.resolve(res) - } - createCustomerSource(source) { - const res = { - gateway: 'payment_processor', - account_foreign_key: 'customer', - account_foreign_id: source.account_foreign_id, - foreign_key: 'customer', - foreign_id: 'source_' + shortid.generate(), - payment_details: source - } - return Promise.resolve(res) - } - findCustomer(customer) { - const res = { - gateway: 'payment_processor', - foreign_key: 'customer', - foreign_id: customer.foreign_id, - data: customer - } - return Promise.resolve(res) - } - findCustomerSource(source) { - const res = { - gateway: 'payment_processor', - account_foreign_key: 'customer', - account_foreign_id: source.account_foreign_id, - foreign_key: 'source', - foreign_id: source.foreign_key, - payment_details: source - } - return Promise.resolve(res) - } - getCustomerSources(customer) { - const res = { - gateway: 'payment_processor', - foreign_key: 'customer', - foreign_id: customer.foreign_id, - data: customer, - sources: [ - { - gateway: 'payment_processor', - account_foreign_key: 'customer', - account_foreign_id: customer.foreign_id, - foreign_key: 'source', - foreign_id: 'source_' + shortid.generate(), - payment_details: {} - } - ] - } - return Promise.resolve(res) - } - updateCustomer(customer) { - const res = { - gateway: 'payment_processor', - foreign_key: 'customer', - foreign_id: customer.id, - data: customer - } - return Promise.resolve(res) - } - updateCustomerSource(source) { - const res = { - gateway: 'payment_processor', - account_foreign_id: source.account_foreign_id, - account_foreign_key: 'customer', - foreign_key: 'source', - foreign_id: source.foreign_id, - payment_details: source - } - return Promise.resolve(res) - } - removeCustomerSource(source) { - const res = { - gateway: 'payment_processor', - account_foreign_id: source.account_foreign_id, - account_foreign_key: 'customer', - foreign_key: 'source', - foreign_id: source.foreign_id, - payment_details: source - } - return Promise.resolve(res) - } } diff --git a/test/fixtures/FakeRender.js b/test/fixtures/FakeRender.js index 351fc45..af22d53 100755 --- a/test/fixtures/FakeRender.js +++ b/test/fixtures/FakeRender.js @@ -1,11 +1,6 @@ 'use strict' // const _ = require('lodash') -const Generic = require('../../dist/Generic').Generic +const Generic = require('../../dist/defaults').RenderDefault module.exports = class FakeRenderService extends Generic { - render(data) { - return Promise.resolve({document: data}) - } - renderSync(data) { - return { document: data } - } + } diff --git a/test/fixtures/FakeShipping.js b/test/fixtures/FakeShipping.js index 46f2440..5a51d87 100755 --- a/test/fixtures/FakeShipping.js +++ b/test/fixtures/FakeShipping.js @@ -1,14 +1,6 @@ 'use strict' // const _ = require('lodash') -const Generic = require('../../dist/Generic').Generic +const Generic = require('../../dist/defaults').ShippingDefault module.exports = class FakeShippingProvider extends Generic { - validateAddress(data) { - return Promise.resolve(data) - } - getRate(data) { - return Promise.resolve({}) - } - getRates(data) { - return Promise.resolve([]) - } + } diff --git a/test/fixtures/FakeTax.js b/test/fixtures/FakeTax.js index b54f1a5..ba3af5b 100755 --- a/test/fixtures/FakeTax.js +++ b/test/fixtures/FakeTax.js @@ -1,35 +1,6 @@ 'use strict' // const _ = require('lodash') -const Generic = require('../../dist/Generic').Generic +const Generic = require('../../dist/defaults').TaxDefault module.exports = class FakeTaxProvider extends Generic { - getRate(data) { - return Promise.resolve({ - amount: 1000, - rate: 0.075, - title: 'Sales Tax', - tax_details: {} - }) - } - taxForOrder(data) { - return Promise.resolve({ - total_taxes: 10, - tax_lines: [ - { - name: 'fake sales tax', - price: data.line_items.length * 5 - } - ], - line_items: data.line_items.map(item => { - return Object.assign({}, item, { - total_taxes: 5, - tax_lines: [ - { - name: 'fake sales tax', - price: 5 - } - ] - }) - }) - }) - } + } diff --git a/test/unit/generics/config.test.js b/test/unit/generics/config.test.js index 6e2a5a2..61d0465 100644 --- a/test/unit/generics/config.test.js +++ b/test/unit/generics/config.test.js @@ -4,6 +4,6 @@ const assert = require('assert') describe('FakeGeneric', () => { it('should exist', () => { - assert.equal(global.app.config.get('foo'), 'bar') + assert.equal(global.app.config.get('fake_generic.foo'), 'bar') }) })