convictional
Version:
A Node.JS client for the Convictional API
178 lines (176 loc) • 7.07 kB
JavaScript
require('dotenv').config()
var mocha = require('mocha')
var describe = mocha.describe
var it = mocha.it
var chai = require('chai')
var expect = chai.expect
var moment = require('moment')
var convictional = require('../lib/api.js')({
apiUrl: process.env.API_URL,
adminKey: process.env.ADMIN_KEY,
apiKey: process.env.API_KEY
})
var companyId = 'test'
var id
var productEntry = {
code: '12345',
active: true,
bodyHtml: '<p>Great product!</p>',
images: [
{ 'src': 'https://cdn.convictional.com/123abc' },
{ 'src': 'https://cdn.convictional.com/987zyx' }
],
tags: ['Toronto', 'Beauty', 'Mens'],
title: 'Great product',
type: 'item',
variants: [
{
'sku': '321',
'title': 'Great variant',
'inventory_quantity': '3',
'product': 19.99
}
],
vendor: 'Convictional Wholesale'
}
var newProduct = { active: false }
var anotherProductEntry = {
code: '12348',
active: true,
bodyHtml: '<p>Great product!</p>',
images: [
{ 'src': 'https://cdn.convictional.com/123abc' },
{ 'src': 'https://cdn.convictional.com/987zyx' }
],
tags: ['Toronto', 'Beauty', 'Mens'],
title: 'Greater product',
type: 'item',
variants: [
{
'sku': '123',
'title': 'Great variant',
'inventory_quantity': '8',
'product': 9.99
}
],
vendor: 'Convictional Wholesale'
}
var multiProductEntry = []
multiProductEntry.push(productEntry)
multiProductEntry.push(anotherProductEntry)
describe('/products', function () {
it('it should create ONE product', (done) => {
convictional.postProduct(productEntry).then((record) => {
id = record._id
expect(record).to.have.property('_id').equal(id)
expect(record).to.have.property('created')
expect(record).to.have.property('updated')
expect(record).to.have.property('code').equal(productEntry.code)
expect(record).to.have.property('active').equal(true)
expect(record).to.have.property('bodyHtml').equal(productEntry.bodyHtml)
expect(record).to.have.property('images').eql(productEntry.images)
expect(record).to.have.property('tags').eql(productEntry.tags)
expect(record).to.have.property('title').equal(productEntry.title)
expect(record).to.have.property('type').equal(productEntry.type)
expect(record).to.have.property('variants').eql(productEntry.variants)
expect(record).to.have.property('vendor').equal(productEntry.vendor)
expect(record).to.have.property('companyId').equal(companyId)
done()
}).catch((error) => { done(error) })
})
it('it should return products by date', (done) => {
var getProductsQuery = { 'updatedAfter': moment().subtract(30, 'days').format() }
convictional.getProducts(getProductsQuery).then((products) => {
expect(products).to.be.an('array')
done()
}).catch((error) => { done(error) })
}).timeout(10000)
it('it should list ONE product', (done) => {
convictional.getProduct(id).then((record) => {
expect(record).to.have.property('_id').equal(id)
expect(record).to.have.property('created')
expect(record).to.have.property('updated')
expect(record).to.have.property('code').equal(productEntry.code)
expect(record).to.have.property('active').equal(true)
expect(record).to.have.property('bodyHtml').equal(productEntry.bodyHtml)
expect(record).to.have.property('images').eql(productEntry.images)
expect(record).to.have.property('tags').eql(productEntry.tags)
expect(record).to.have.property('title').equal(productEntry.title)
expect(record).to.have.property('type').equal(productEntry.type)
expect(record).to.have.property('variants').eql(productEntry.variants)
expect(record).to.have.property('vendor').equal(productEntry.vendor)
expect(record).to.have.property('companyId').equal(companyId)
done()
}).catch((error) => { done(error) })
})
it('it should list ALL products', (done) => {
var query = {}
convictional.getProducts(query).then((record) => {
expect(record).to.be.an('array')
done()
}).catch((error) => { done(error) })
})
it('it should find product by SKU', (done) => {
var query = { sku: 321 }
convictional.getProducts(query).then((record) => {
expect(record).to.be.an('array')
expect(record.length).to.eql(1)
var product = record[0]
expect(product).to.be.an('object')
expect(product).to.have.property('images')
expect(product).to.have.property('tags')
expect(product).to.have.property('variants')
expect(product).to.have.property('_id')
expect(product).to.have.property('code')
expect(product).to.have.property('active')
expect(product).to.have.property('bodyHtml')
expect(product).to.have.property('title')
expect(product).to.have.property('type')
expect(product).to.have.property('vendor')
expect(product).to.have.property('created')
expect(product).to.have.property('updated')
expect(product).to.have.property('companyId')
expect(product.variants[0].sku).to.eql('321')
done()
}).catch((error) => { done(error) })
})
it('it should return single record', (done) => {
var query = { 'limit': 1 }
convictional.getProducts(query).then((record) => {
expect(record.length).to.equal(1)
done()
}).catch((error) => { done(error) })
})
it('it should count records', (done) => {
var query = { 'count': true }
convictional.getProducts(query).then((record) => {
expect(record.count).to.be.a('number')
done()
}).catch((error) => { done(error) })
})
it('it should update ONE product', (done) => {
newProduct._id = id
convictional.putProduct(newProduct).then((record) => {
expect(record).to.have.property('_id').equal(id)
expect(record).to.have.property('created')
expect(record).to.have.property('updated')
expect(record).to.have.property('code').equal(productEntry.code)
expect(record).to.have.property('active').equal(true)
expect(record).to.have.property('bodyHtml').equal(productEntry.bodyHtml)
expect(record).to.have.property('images').eql(productEntry.images)
expect(record).to.have.property('tags').eql(productEntry.tags)
expect(record).to.have.property('title').equal(productEntry.title)
expect(record).to.have.property('type').equal(productEntry.type)
expect(record).to.have.property('variants').eql(productEntry.variants)
expect(record).to.have.property('vendor').equal(productEntry.vendor)
expect(record).to.have.property('companyId').equal(companyId)
done()
}).catch((error) => { done(error) })
})
it('it should delete ONE product', (done) => {
convictional.deleteProduct(id).then((record) => {
expect(record).eql({ deleted: 1 })
done()
}).catch((error) => { done(error) })
})
})