feat(test): new protocol (#2)

Plugins are now testable.
This commit is contained in:
Julien Fontanet 2016-11-15 11:01:50 +01:00 committed by GitHub
commit 5b8cdf06b3
2 changed files with 64 additions and 1 deletions

View File

@ -13,3 +13,45 @@ Or globally:
```
> npm i -g vatesfr/xo-server-test-plugin
```
## Documentation
### Plugin life cyle
#### Initialization
When xo-server starts, it initializes plugins.
#### Loading plugins
After initializing the plugins, the xo-server load them.
#### Test
XO clients send data to xo-server for testing the configuration and saving it if successful.
### Principal Methods
#### The default export
It is just a factory function which will create an instance of the plugin. Usually it will be called only once, at startup.
Its only parameter is an object which currently only contains the instance of the currently running xo-server.
#### `configure(configuration) `
This method is called each time the plugin is (re-)configured.
Its only parameter is an object which contains the configuration values.
#### `load() `
This method is called to load the plugin.
#### `unload() `
This method is called to unload the plugin.
#### `test(data) `
This method is called if the test option is activated.
Its only parameter is an object which contains the test values.

View File

@ -15,6 +15,18 @@ exports.configurationSchema = {
required: ['foo']
}
// This (optional) schema is used to test the configuration
// of the plugin.
exports.testSchema = {
type: 'object',
properties: {
test: {
type: 'string'
}
},
required: ['test']
}
// The default export is just a factory function which will create an
// instance of the plugin.
// Usually it will be called only once, at startup.
@ -22,7 +34,6 @@ exports.configurationSchema = {
// Its only parameter is an object which currently only contains a
// `xo` property: the instance of the currently running xo-server.
exports.default = function (opts) {
// For simplicity's sake, this plugin returns a plain object, but
// usually it returns a new instance of an existing class.
return {
@ -52,6 +63,16 @@ exports.default = function (opts) {
// Note: will only be called if the plugin is currently loaded.
unload: function () {
console.log('stub unloaded')
},
// This (optional) method is called to test the configuration of the plugin.
// Note 1: will only be called if the plugin has been successfully configured and is loaded.
// Note 2: before being called, the test configuration is validated
// against the provided test data.
// Note 3: will only be called if the test option is activated.
test: function (data) {
console.log('the configuration is about to be tested')
// TODO: test the configuration, i.e, use the main feature of the plugin and throws any errors.
}
}
}