All files associate-current-user.js

94.74% Statements 18/19
92.86% Branches 13/14
100% Functions 2/2
94.74% Lines 18/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 451x 1x   1x         9x 9x 9x 1x     8x 2x 1x     1x     6x   5x   5x         6x       5x 1x       4x        
import get from 'lodash.get';
import set from 'lodash.set';
 
const defaults = {
  idField: '_id',
  as: 'userId'
};
 
export default function (options = {}) {
  return function (hook) {
    if (hook.type !== 'before') {
      throw new Error(`The 'associateCurrentUser' hook should only be used as a 'before' hook.`);
    }
 
    if (!hook.params.user) {
      if (!hook.params.provider) {
        return hook;
      }
 
      throw new Error('There is no current user to associate.');
    }
 
    options = Object.assign({}, defaults, hook.app.get('authentication'), options);
 
    const id = get(hook.params.user, options.idField);
 
    Iif (id === undefined) {
      throw new Error(`Current user is missing '${options.idField}' field.`);
    }
 
    function setId (obj) {
      set(obj, options.as, id);
    }
 
    // Handle arrays.
    if (Array.isArray(hook.data)) {
      hook.data.forEach(setId);
 
    // Handle single objects.
    } else {
      setId(hook.data);
    }
  };
}