@wmfs/tymly-cardscript-plugin
Version:
Plugin which handles interactions to do with Cardscript
150 lines (129 loc) • 5.93 kB
JavaScript
/* eslint-env mocha */
const tymly = require('@wmfs/tymly')
const path = require('path')
const expect = require('chai').expect
const process = require('process')
const sqlScriptRunner = require('./fixtures/sql-script-runner.js')
const GET_SETTINGS_STATE_MACHINE = 'tymly_getSettings_1_0'
const APPLY_SETTINGS_STATE_MACHINE = 'tymly_applySettings_1_0'
describe('settings tymly-cardscript-plugin tests', function () {
this.timeout(process.env.TIMEOUT || 5000)
let statebox, tymlyService, client
const fakeCategories = {}
before(function () {
if (process.env.PG_CONNECTION_STRING && !/^postgres:\/\/[^:]+:[^@]+@(?:localhost|127\.0\.0\.1).*$/.test(process.env.PG_CONNECTION_STRING)) {
console.log(`Skipping tests due to unsafe PG_CONNECTION_STRING value (${process.env.PG_CONNECTION_STRING})`)
this.skip()
}
})
it('should create some basic tymly services', async () => {
const tymlyServices = await tymly.boot(
{
pluginPaths: [
path.resolve(__dirname, './../lib'),
require.resolve('@wmfs/tymly-pg-plugin'),
require.resolve('@wmfs/tymly-solr-plugin'),
require.resolve('@wmfs/tymly-test-helpers/plugins/allow-everything-rbac-plugin')
]
}
)
statebox = tymlyServices.statebox
tymlyServices.categories.categories_ = fakeCategories
tymlyService = tymlyServices.tymly
client = tymlyServices.storage.client
})
it('should create the test resources', () => {
return sqlScriptRunner('./db-scripts/settings/setup.sql', client)
})
it('should get test-user\'s settings', async () => {
const executionDescription = await statebox.startExecution(
{},
GET_SETTINGS_STATE_MACHINE,
{
sendResponse: 'COMPLETE',
userId: 'test-user'
}
)
expect(executionDescription.currentStateName).to.eql('GetSettings')
expect(executionDescription.currentResource).to.eql('module:getSettings')
expect(executionDescription.stateMachineName).to.eql(GET_SETTINGS_STATE_MACHINE)
expect(executionDescription.status).to.eql('SUCCEEDED')
expect(executionDescription.ctx.userSettings.userId).to.eql('test-user')
expect(executionDescription.ctx.userSettings.categoryRelevance.length).to.eql(5)
expect(executionDescription.ctx.userSettings.categoryRelevance.includes('gazetteer')).to.eql(true)
expect(executionDescription.ctx.userSettings.categoryRelevance.includes('hr')).to.eql(true)
expect(executionDescription.ctx.userSettings.categoryRelevance.includes('hydrants')).to.eql(true)
expect(executionDescription.ctx.userSettings.categoryRelevance.includes('incidents')).to.eql(true)
expect(executionDescription.ctx.userSettings.categoryRelevance.includes('expenses')).to.eql(true)
})
it('should update test-user\'s settings', async () => {
const executionDescription = await statebox.startExecution(
{
categoryRelevance: '["incidents", "hr", "hydrants", "gazetteer", "expenses"]'
},
APPLY_SETTINGS_STATE_MACHINE,
{
sendResponse: 'COMPLETE',
userId: 'test-user'
}
)
expect(executionDescription.currentStateName).to.eql('ApplySettings')
expect(executionDescription.currentResource).to.eql('module:applySettings')
expect(executionDescription.stateMachineName).to.eql(APPLY_SETTINGS_STATE_MACHINE)
expect(executionDescription.status).to.eql('SUCCEEDED')
})
it('should ensure test-user\'s applied settings are present in DB', async () => {
const executionDescription = await statebox.startExecution(
{},
GET_SETTINGS_STATE_MACHINE,
{
sendResponse: 'COMPLETE',
userId: 'test-user'
}
)
expect(executionDescription.currentStateName).to.eql('GetSettings')
expect(executionDescription.currentResource).to.eql('module:getSettings')
expect(executionDescription.stateMachineName).to.eql(GET_SETTINGS_STATE_MACHINE)
expect(executionDescription.status).to.eql('SUCCEEDED')
expect(executionDescription.ctx.userSettings.userId).to.eql('test-user')
expect(executionDescription.ctx.userSettings.categoryRelevance.length).to.eql(5)
expect(executionDescription.ctx.userSettings.categoryRelevance.includes('incidents')).to.eql(true)
expect(executionDescription.ctx.userSettings.categoryRelevance.includes('hr')).to.eql(true)
expect(executionDescription.ctx.userSettings.categoryRelevance.includes('hydrants')).to.eql(true)
expect(executionDescription.ctx.userSettings.categoryRelevance.includes('gazetteer')).to.eql(true)
expect(executionDescription.ctx.userSettings.categoryRelevance.includes('expenses')).to.eql(true)
})
it('get default values for new-user\'s settings', async () => {
const executionDescription = await statebox.startExecution(
{},
GET_SETTINGS_STATE_MACHINE,
{
sendResponse: 'COMPLETE',
userId: 'new-user'
}
)
expect(executionDescription.currentStateName).to.eql('GetSettings')
expect(executionDescription.currentResource).to.eql('module:getSettings')
expect(executionDescription.stateMachineName).to.eql(GET_SETTINGS_STATE_MACHINE)
expect(executionDescription.status).to.eql('SUCCEEDED')
expect(executionDescription.ctx.userSettings.userId).to.eql('new-user')
expect(executionDescription.ctx.userSettings.categoryRelevance).to.eql([])
})
it('should attempt to apply settings without passing anything in', async () => {
const executionDescription = await statebox.startExecution(
{},
APPLY_SETTINGS_STATE_MACHINE,
{
sendResponse: 'COMPLETE'
}
)
expect(executionDescription.status).to.eql('FAILED')
})
it('should tear down the test resources', () => {
return sqlScriptRunner('./db-scripts/cleanup.sql', client)
})
it('should shut down Tymly nicely', async () => {
await tymlyService.shutdown()
})
})