|
| 1 | + |
| 2 | +const { assert } = require('chai'); |
| 3 | +const { discard } = require('../../lib/services'); |
| 4 | + |
| 5 | +describe('common hook discard', () => { |
| 6 | + describe('removes fields', () => { |
| 7 | + /* eslint-disable */ |
| 8 | + const beforeJohn = () => ({ type: 'before', data: { first: 'John', last: 'Doe' } }); |
| 9 | + const beforeUndef = () => ({ type: 'before', data: { first: undefined, last: 'Doe' } }); |
| 10 | + const beforeNull = () => ({ type: 'before', data: { first: null, last: 'Doe' } }); |
| 11 | + const afterJane = () => ({ type: 'after', result: { first: 'Jane', last: 'Doe' } }); |
| 12 | + const afterBoth = () => ({ type: 'after', result: [{ first: 'John', last: 'Doe' }, { first: 'Jane', last: 'Doe' }] }); |
| 13 | + const afterPage = () => ({ type: 'after', result: { total: 2, skip: 0, data: [{ first: 'John', last: 'Doe' }, { first: 'Jane', last: 'Doe' }] } }); |
| 14 | + |
| 15 | + const decisionTable = [ |
| 16 | + // desc, context, method, provider, args, result |
| 17 | + ['before::create', beforeJohn(), 'create', undefined, ['first'], { last: 'Doe' } ], |
| 18 | + ['before::create', beforeJohn(), 'create', 'rest', ['first'], { last: 'Doe' } ], |
| 19 | + ['before::create', beforeJohn(), 'create', 'socketio',['first'], { last: 'Doe' } ], |
| 20 | + ['before::create', beforeJohn(), 'create', 'primus', ['first'], { last: 'Doe' } ], |
| 21 | + ['after::find with paginate', afterPage(), 'find', undefined, ['last'], [{ first: 'John' }, { first: 'Jane' }] ], |
| 22 | + ['after::find with paginate', afterPage(), 'find', 'rest', ['last'], [{ first: 'John' }, { first: 'Jane' }] ], |
| 23 | + ['after::find with paginate', afterPage(), 'find', 'socketio',['last'], [{ first: 'John' }, { first: 'Jane' }] ], |
| 24 | + ['after::find with paginate', afterPage(), 'find', 'primus', ['last'], [{ first: 'John' }, { first: 'Jane' }] ], |
| 25 | + ['after::find no paginate', afterBoth(), 'find', undefined, ['last'], [{ first: 'John' }, { first: 'Jane' }] ], |
| 26 | + ['after::find no paginate', afterBoth(), 'find', 'rest', ['last'], [{ first: 'John' }, { first: 'Jane' }] ], |
| 27 | + ['after::find no paginate', afterBoth(), 'find', 'socketio',['last'], [{ first: 'John' }, { first: 'Jane' }] ], |
| 28 | + ['after::find no paginate', afterBoth(), 'find', 'primus', ['last'], [{ first: 'John' }, { first: 'Jane' }] ], |
| 29 | + ['after', afterJane(), 'create', undefined, ['last'], { first: 'Jane'} ], |
| 30 | + ['after', afterJane(), 'create', 'rest', ['last'], { first: 'Jane'} ], |
| 31 | + ['after', afterJane(), 'create', 'socketio',['last'], { first: 'Jane'} ], |
| 32 | + ['after', afterJane(), 'create', 'primus', ['last'], { first: 'Jane'} ], |
| 33 | + ['call internally on server', afterJane(), 'create', undefined, ['last'], { first: 'Jane'} ], |
| 34 | + ['not throw field missing', beforeJohn(), 'create', undefined, ['first', 'xx'], { last: 'Doe' } ], |
| 35 | + ['not throw field missing', beforeJohn(), 'create', 'rest', ['first', 'xx'], { last: 'Doe' } ], |
| 36 | + ['not throw field missing', beforeJohn(), 'create', 'socketio',['first', 'xx'], { last: 'Doe' } ], |
| 37 | + ['not throw field missing', beforeJohn(), 'create', 'primus', ['first', 'xx'], { last: 'Doe' } ], |
| 38 | + ['not throw field undefined', beforeUndef(), 'create', undefined, ['first'], { first: undefined, last: 'Doe' } ], // ??? |
| 39 | + ['not throw field undefined', beforeUndef(), 'create', 'rest', ['first'], { first: undefined, last: 'Doe' } ], // ??? |
| 40 | + ['not throw field undefined', beforeUndef(), 'create', 'socketio',['first'], { first: undefined, last: 'Doe' } ], // ??? |
| 41 | + ['not throw field undefined', beforeUndef(), 'create', 'primus', ['first'], { first: undefined, last: 'Doe' } ], // ??? |
| 42 | + ['not throw field null', beforeNull(), 'create', undefined, ['first'], { last: 'Doe' } ], |
| 43 | + ['not throw field null', beforeNull(), 'create', 'rest', ['first'], { last: 'Doe' } ], |
| 44 | + ['not throw field null', beforeNull(), 'create', 'socketio',['first'], { last: 'Doe' } ], |
| 45 | + ['not throw field null', beforeNull(), 'create', 'promus', ['first'], { last: 'Doe' } ], |
| 46 | + ]; |
| 47 | + /* eslint-enable */ |
| 48 | + |
| 49 | + decisionTable.forEach(([desc, context, method, provider, args, result]) => { |
| 50 | + it(desc, () => { |
| 51 | + context.method = method; |
| 52 | + if (provider !== null) { |
| 53 | + context.params = context.params || {}; |
| 54 | + context.params.provider = provider; |
| 55 | + } |
| 56 | + |
| 57 | + discard(...args)(context); |
| 58 | + assert.deepEqual(context.data ? context.data : context.result.data || context.result, result); |
| 59 | + }); |
| 60 | + }); |
| 61 | + }); |
| 62 | + |
| 63 | + describe('handles dot notation', () => { |
| 64 | + /* eslint-disable */ |
| 65 | + const ctx = () => ({ type: 'before', method: 'create', data: { empl: { name: { first: 'John', last: 'Doe' }, status: 'AA' }, dept: 'Acct' } }); |
| 66 | + const ctx2 = () => ({ type: 'after', method: 'get', result: { property: null, foo: 'bar' } }); |
| 67 | + |
| 68 | + const decisionTable = [ |
| 69 | + // desc, context, args, result |
| 70 | + ['handles dots', ctx(), ['dept'], { empl: { name: { first: 'John', last: 'Doe' }, status: 'AA' } } ], |
| 71 | + ['handle 1 dot', ctx(), ['empl.status'], { empl: { name: { first: 'John', last: 'Doe' } }, dept: 'Acct' } ], |
| 72 | + ['handle 2 dot', ctx(), ['empl.name.first'], { empl: { name: { last: 'Doe' }, status: 'AA' }, dept: 'Acct' } ], |
| 73 | + ['missing path', ctx(), ['empl.xx.first'], { empl: { name: { first: 'John', last: 'Doe' }, status: 'AA' }, dept: 'Acct' } ], |
| 74 | + ['missing no dot', ctx(), ['xx'], { empl: { name: { first: 'John', last: 'Doe' }, status: 'AA' }, dept: 'Acct' } ], |
| 75 | + ['2 fields', ctx(), ['empl.status', 'dept'], { empl: { name: { first: 'John', last: 'Doe' } } } ], |
| 76 | + ['path not obj', ctx2(), ['property.secret'], { property: null, foo: 'bar' } ], |
| 77 | + ]; |
| 78 | + /* eslint-enable */ |
| 79 | + |
| 80 | + decisionTable.forEach(([desc, context, args, result]) => { |
| 81 | + it(desc, () => { |
| 82 | + discard(...args)(context); |
| 83 | + assert.deepEqual(context.data ? context.data : context.result.data || context.result, result); |
| 84 | + }); |
| 85 | + }); |
| 86 | + }); |
| 87 | +}); |
0 commit comments