123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- /**
- * Module dependencies
- */
- var assert = require('assert');
- var _ = require('@sailshq/lodash');
- var Machine = require('../');
- var testMachineWithMocha = require('test-machinepack-mocha').testMachineWithMocha;
- describe('`like` and `itemOf`', function (){
- describe('using `like` in one of its exits', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: { fullName: { example: 'Roger Rabbit' } },
- exits: { success: { like: 'fullName' } },
- fn: function (inputs, exits) { return exits.success(123); }
- }))
- .use({})
- .expect({
- outcome: 'success',
- output: '123'
- });
- describe('and referenced input is configured with an invalid (and incompatible) input value', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: { fullName: { example: 'Roger Rabbit' } },
- exits: { success: { like: 'fullName' } },
- fn: function (inputs, exits) { return exits.success(123); }
- }))
- .use({ fullName: [] })
- .expect({
- outcome: 'error'
- });
- });
- it('should not .build() the machine if an input refers to another input w/ a `like` or `itemOf` instead of an example', function (){
- assert.throws(function (){
- Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: 'Roger Rabbit' },
- firstName: { like: 'fullName' },
- },
- exits: { success: { like: 'firstName' } },
- fn: function (inputs, exits) { return exits.error(); }
- });
- });
- assert.throws(function (){
- Machine.build({
- identity: 'test',
- inputs: {
- nameParts: { example: ['Roger'] },
- firstName: { itemOf: 'fullName' },
- },
- exits: { success: { like: 'firstName' } },
- fn: function (inputs, exits) { return exits.error(); }
- });
- });
- });
- });
- // No longer supported:
- // describe('using `like` in one of its inputs', function (){
- // testMachineWithMocha().machine(Machine.build({
- // identity: 'test',
- // inputs: {
- // fullName: { example: 'Roger Rabbit' },
- // firstName: { like: 'fullName' }
- // },
- // exits: { success: { example: '===' } },
- // fn: function (inputs, exits) { return exits.success(inputs.firstName); }
- // }))
- // .use({ firstName: 123 })
- // .expect({
- // outcome: 'success',
- // output: '123'
- // });
- // describe('and referenced input is configured with an invalid (and incompatible) input value', function (){
- // testMachineWithMocha().machine(Machine.build({
- // identity: 'test',
- // inputs: {
- // fullName: { example: 'Roger Rabbit' },
- // firstName: { like: 'fullName' }
- // },
- // exits: { success: { example: '===' } },
- // fn: function (inputs, exits) { return exits.success(inputs.firstName); }
- // }))
- // .use({ firstName: 123, fullName: [] })
- // .expect({
- // outcome: 'error'
- // });
- // });
- // it('should not .build() the machine if an input refers to itself', function (){
- // assert.throws(function (){
- // Machine.build({
- // identity: 'test',
- // inputs: {
- // fullName: { example: 'Roger Rabbit' },
- // firstName: { like: 'firstName' }
- // },
- // exits: { success: { example: '===' } },
- // fn: function (inputs, exits) { return exits.error(); }
- // });
- // });
- // });
- // it('should not .build() the machine if an input refers to another input w/ a `like` or `itemOf` instead of an example', function (){
- // assert.throws(function (){
- // Machine.build({
- // identity: 'test',
- // inputs: {
- // fullName: { example: 'Roger Rabbit' },
- // lastName: { like: 'firstName' },
- // firstName: { like: 'fullName' }
- // },
- // exits: { success: { example: '===' } },
- // fn: function (inputs, exits) { return exits.error(); }
- // });
- // });
- // assert.throws(function (){
- // Machine.build({
- // identity: 'test',
- // inputs: {
- // namePieces: { example: ['Roger'] },
- // lastName: { itemOf: 'namePieces' },
- // firstName: { like: 'lastName' }
- // },
- // exits: { success: { example: '===' } },
- // fn: function (inputs, exits) { return exits.error(); }
- // });
- // });
- // });
- // });
- describe('using `itemOf` in one of its exits', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: ['Roger'] }
- },
- exits: { success: { itemOf: 'fullName' } },
- fn: function (inputs, exits) { return exits.success(123); }
- }))
- .use({})
- .expect({
- outcome: 'success',
- output: '123'
- });
- });
- describe('using `itemOf` in one of its inputs', function (){
- it('should no longer work!', function(){
- try {
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: ['Roger'] },
- firstName: { itemOf: 'fullName' }
- },
- exits: { success: { example: '===' } },
- fn: function (inputs, exits) { return exits.success(inputs.firstName); }
- }))
- .use({ firstName: 123 })
- .expect({
- outcome: 'success',
- output: '123'
- });
- } catch (err) {
- if (err.name === 'ImplementationError') {
- // ok that's what we expected.
- }
- else { throw err; }
- }
- throw new Error('should not have made it here');
- });
- });
- describe('using `like` in one of its contract\'s exits', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: 'Roger' },
- getFullName: {
- example: '->',
- contract: {
- sync: true,
- exits: { success: { like: 'fullName' } }
- }
- }
- },
- exits: { success: { outputExample: '===' } },
- fn: function (inputs, exits) { return exits.success( inputs.getFullName().execSync() ); }
- }))
- .use({
- getFullName: function (unused, exits){
- exits.success(123);
- }
- })
- .expect({
- outcome: 'success',
- output: '123'
- });
- });
- describe('using `like` in one of its contract\'s inputs', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: 'Roger' },
- getFullName: {
- example: '->',
- contract: {
- sync: true,
- inputs: { name: { like: 'fullName' } },
- exits: { success: { example: '===' } }
- }
- }
- },
- exits: { success: { example: '===' } },
- fn: function (inputs, exits) { return exits.success( inputs.getFullName({ name: 123 }).execSync() ); }
- }))
- .use({
- getFullName: function (inputs, exits){
- return exits.success(inputs.name);
- }
- })
- .expect({
- outcome: 'success',
- output: '123'
- });
- });
- describe('using `itemOf` in one of its contract\'s exits', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: ['Roger'] },
- getFullName: {
- example: '->',
- contract: {
- sync: true,
- exits: { success: { itemOf: 'fullName' } }
- }
- }
- },
- exits: { success: { example: '===' } },
- fn: function (inputs, exits) { return exits.success( inputs.getFullName().execSync() ); }
- }))
- .use({
- getFullName: function (unused, exits){
- exits.success(123);
- }
- })
- .expect({
- outcome: 'success',
- output: '123'
- });
- });
- describe('using `itemOf` in one of its contract\'s inputs', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: ['Roger'] },
- getFullName: {
- example: '->',
- contract: {
- sync: true,
- inputs: { name: { itemOf: 'fullName' } },
- exits: { success: { example: '===' } }
- }
- }
- },
- exits: { success: { example: '===' } },
- fn: function (inputs, exits) { return exits.success( inputs.getFullName({ name: 123 }).execSync() ); }
- }))
- .use({
- getFullName: function (inputs, exits){
- return exits.success(inputs.name);
- }
- })
- .expect({
- outcome: 'success',
- output: '123'
- });
- });
- describe('using `like` in one of its contract\'s inputs\' contract\'s exits', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: 'Roger' },
- getFullName: {
- example: '->',
- contract: {
- sync: true,
- inputs: {
- toCompleteName: {
- example: '->',
- contract: {
- sync: true,
- exits: { success: { like: 'fullName' } }
- }
- }
- },
- exits: { success: { example: '===' } }
- }
- }
- },
- exits: { success: { example: '===' } },
- fn: function (inputs, exits) {
- return exits.success( inputs.getFullName({
- toCompleteName: function (unused, exits){
- return exits.success(123);
- }
- }).execSync() );
- }
- }))
- .use({
- getFullName: function (inputs, exits){
- return exits.success( inputs.toCompleteName().execSync() );
- }
- })
- .expect({
- outcome: 'success',
- output: '123'
- });
- });
- describe('using `like` in one of its contract\'s inputs\' contract\'s inputs', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: 'Roger' },
- getFullName: {
- example: '->',
- contract: {
- sync: true,
- inputs: {
- toCompleteName: {
- example: '->',
- contract: {
- sync: true,
- inputs: { name: { like: 'fullName' } },
- exits: { success: { example: '===' } }
- }
- }
- },
- exits: { success: { example: '===' } }
- }
- }
- },
- exits: { success: { example: '===' } },
- fn: function (inputs, exits) {
- return exits.success( inputs.getFullName({
- toCompleteName: function (inputs, exits){
- return exits.success(inputs.name);
- }
- }).execSync() );
- }
- }))
- .use({
- getFullName: function (inputs, exits){
- return exits.success( inputs.toCompleteName({name:123}).execSync() );
- }
- })
- .expect({
- outcome: 'success',
- output: '123'
- });
- });
- describe('using `itemOf` in one of its contract\'s inputs\' contract\'s exits', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: ['Roger'] },
- getFullName: {
- example: '->',
- contract: {
- sync: true,
- inputs: {
- toCompleteName: {
- example: '->',
- contract: {
- sync: true,
- exits: { success: { itemOf: 'fullName' } }
- }
- }
- },
- exits: { success: { example: '===' } }
- }
- }
- },
- exits: { success: { example: '===' } },
- fn: function (inputs, exits) {
- return exits.success( inputs.getFullName({
- toCompleteName: function (unused, exits){
- return exits.success(123);
- }
- }).execSync() );
- }
- }))
- .use({
- getFullName: function (inputs, exits){
- return exits.success( inputs.toCompleteName().execSync() );
- }
- })
- .expect({
- outcome: 'success',
- output: '123'
- });
- });
- describe('using `itemOf` in one of its contract\'s inputs\' contract\'s inputs', function (){
- testMachineWithMocha().machine(Machine.build({
- identity: 'test',
- inputs: {
- fullName: { example: ['Roger'] },
- getFullName: {
- example: '->',
- contract: {
- sync: true,
- inputs: {
- toCompleteName: {
- example: '->',
- contract: {
- sync: true,
- inputs: { name: { itemOf: 'fullName' } },
- exits: { success: { example: '===' } }
- }
- }
- },
- exits: { success: { example: '===' } }
- }
- }
- },
- exits: { success: { example: '===' } },
- fn: function (inputs, exits) {
- return exits.success( inputs.getFullName({
- toCompleteName: function (inputs, exits){
- return exits.success(inputs.name);
- }
- }).execSync() );
- }
- }))
- .use({
- getFullName: function (inputs, exits){
- return exits.success( inputs.toCompleteName({ name: 123 }).execSync() );
- }
- })
- .expect({
- outcome: 'success',
- output: '123'
- });
- });
- });
|