@wmfs/tymly-cloudstorage-plugin
Version:
Defines the cloudstorage service interface and provides state-resources around the service. Specific cloudstorage implementations provided by additional Tymly plugins.
171 lines (144 loc) • 5.9 kB
JavaScript
/* eslint-env mocha */
const chai = require('chai')
chai.use(require('dirty-chai'))
const expect = chai.expect
const tymly = require('@wmfs/tymly')
const path = require('path')
const EnsureCloudStorageFolder = require('../lib/components/state-resources/ensure-cloud-storage-folder')
const GetCloudStorageContents = require('../lib/components/state-resources/get-cloud-storage-contents')
const CopyFileToRemoteFolder = require('../lib/components/state-resources/copy-file-to-remote-folder')
const CopyFileToLocalFolder = require('../lib/components/state-resources/copy-file-to-local-folder')
const TestProvider = require('./test-provider')
describe('State Resource Tests', function () {
this.timeout(process.env.TIMEOUT || 5000)
let tymlyService, storage, env
const defaultProvider = new TestProvider()
const namedProvider = new TestProvider()
const parameterProvider = new TestProvider()
before('boot Tymly', async () => {
const services = await tymly.boot(
{
pluginPaths: [
path.resolve(__dirname, './../lib')
]
}
)
tymlyService = services.tymly
storage = services.storage
env = { bootedServices: services }
services.cloudstorage.registerProvider(defaultProvider)
services.cloudstorage.registerProvider(namedProvider, 'chosen')
services.cloudstorage.registerProvider(parameterProvider, 'parameter-override')
})
const identity = p => p
function parameterOverride (p) {
p.provider = 'parameter-override'
return p
}
const providers = [
['default provider', {}, defaultProvider, identity],
['named provider', { provider: 'chosen' }, namedProvider, identity],
['unknown so revert to default provider', { provider: 'unknown' }, defaultProvider, identity],
['default but parameter overrides provider', {}, parameterProvider, parameterOverride],
['named but parameter overrides provider', { provider: 'chosen' }, parameterProvider, parameterOverride],
['remote root', { remoteFolderRoot: '/config/' }, defaultProvider, identity, '/config/']
]
for (const [t, config, provider, event, root = ''] of providers) {
describe(`Configured with ${t}`, () => {
const context = {
sendTaskSuccess: result => {
context.result = result
},
sendTaskFailure: err => {
throw err
},
stateMachineMeta: {
name: 'test'
}
}
it('ensureFolderPath', async () => {
const ensureCloudStorageFolder = new EnsureCloudStorageFolder()
ensureCloudStorageFolder.init(config, env)
await ensureCloudStorageFolder.run(
event({ remoteFolderPath: 'remote/path1' }),
context
)
expect(provider.folderPath).to.eql(`${root}remote/path1`)
})
it('listFolderContentsFromPath', async () => {
const getCloudStorageContents = new GetCloudStorageContents()
getCloudStorageContents.init(config, env)
await getCloudStorageContents.run(
event({ remoteFolderPath: 'remote/path2' }),
context
)
expect(provider.folderPath).to.eql(`${root}remote/path2`)
expect(context.result).to.eql(['dummy'])
})
it('copyFileToRemotePath', async () => {
const copyFileToRemoteFolder = new CopyFileToRemoteFolder()
copyFileToRemoteFolder.init(config, env)
await copyFileToRemoteFolder.run(
event({
localFilePath: 'local.file',
remoteFolderPath: 'remote'
}),
context
)
expect(provider.filePath).to.eql('local.file')
expect(provider.folderPath).to.eql(`${root}remote`)
expect(provider.remoteFileName).to.eql(null)
expect(context.result).to.eql(`${root}remote/local.file`)
})
it('copyFileToRemotePath with filename', async () => {
const copyFileToRemoteFolder = new CopyFileToRemoteFolder()
copyFileToRemoteFolder.init(config, env)
await copyFileToRemoteFolder.run(
event({
localFilePath: 'local.file',
remoteFolderPath: 'remote',
remoteFileName: 'new.name'
}),
context
)
expect(provider.filePath).to.eql('local.file')
expect(provider.folderPath).to.eql(`${root}remote`)
expect(provider.remoteFileName).to.eql('new.name')
expect(context.result).to.eql(`${root}remote/new.name`)
})
it('copyFileToLocalPath', async () => {
const copyFileToLocalFolder = new CopyFileToLocalFolder()
copyFileToLocalFolder.init(config, env)
await copyFileToLocalFolder.run(
event({
remoteFilePath: 'file.name',
localFolderPath: 'local'
}),
context
)
expect(provider.folderPath).to.eql('local')
expect(provider.filePath).to.eql(`${root}file.name`)
expect(context.result).to.eql('local/file.name')
})
})
} // for ...
describe('Upload meta', () => {
it('check upload meta', async () => {
const data = await storage.models.cloudstorage_uploadMeta.find({})
expect(data.length).to.eql(12)
expect(data[0].remoteFolderPath).to.eql('remote')
expect(data[0].remoteFolderRoot).to.eql('')
expect(data[0].localFilePath).to.eql('local.file')
expect(data[0].remoteFileName).to.eql(undefined)
expect(data[0].provider).to.eql('default')
expect(data[data.length - 1].remoteFolderPath).to.eql('remote')
expect(data[data.length - 1].remoteFolderRoot).to.eql('/config/')
expect(data[data.length - 1].localFilePath).to.eql('local.file')
expect(data[data.length - 1].remoteFileName).to.eql('new.name')
expect(data[data.length - 1].provider).to.eql('default')
})
})
after('shut down Tymly', async () => {
await tymlyService.shutdown()
})
})