neotoma/sync-server

View on GitHub
tests/controllers/item/storeFile.js

Summary

Maintainability
A
1 hr
Test Coverage
require('park-ranger')();

var assertFunctionCallbacksError = require('app/lib/assertions/functionCallbacksError'),
  assertFunctionCallbacksResult = require('app/lib/assertions/functionCallbacksResult'),
  mongoose = require('app/lib/mongoose'),
  nock = require('app/lib/nock'),
  storeFile = require('app/controllers/item/storeFile'),
  wh = require('app/lib/warehouse');

var before = function(path) {
  return function(done) {
    wh.oneSaved('userStorageAuth', {
      user: this.params[0],
      storage: this.params[1]
    }, (error, userStorageAuth) => {
      nock.postStorage(this.params[1], userStorageAuth, 200, path);
      done();
    });
  };
};

describe('itemController storeFile method', function() {
  beforeEach(mongoose.removeAllCollections);
  beforeEach(nock.cleanAll);
  
  assertFunctionCallbacksError(storeFile, [{
    when: 'no user parameter provided',
    params: [undefined, wh.one('storage'), wh.jsonPath, wh.jsonData()],
    error: 'Parameter user undefined or null'
  }, {
    when: 'user parameter has no id property',
    params: [{ foo: 'bar' }, wh.one('storage'), wh.jsonPath, wh.jsonData()],
    error: 'Parameter user has no id property'
  }, {
    when: 'no storage parameter provided',
    params: [wh.one('user'), undefined, wh.jsonPath, wh.jsonData()],
    error: 'Parameter storage undefined or null'
  }, {
    when: 'storage parameter has no id property',
    params: [wh.one('user'), { foo: 'bar' }, wh.jsonPath, wh.jsonData()],
    error: 'Parameter storage has no id property'
  }, {
    when: 'storage parameter has no host property',
    params: [wh.one('user'), { id: 'bar' }, wh.jsonPath, wh.jsonData()],
    error: 'Parameter storage has no host property'
  }, {
    when: 'no path parameter provided',
    params: [wh.one('user'), wh.one('storage'), undefined, wh.jsonData()],
    error: 'Parameter path undefined or null'
  }, {
    when: 'path parameter not string',
    params: [wh.one('user'), wh.one('storage'), 3, wh.jsonData()],
    error: 'Parameter path is not a string'
  }, {
    when: 'path parameter lacks supported extension',
    params: [wh.one('user'), wh.one('storage'), '/hello.bar', wh.jsonData()],
    error: 'Parameter path extension indicates unsupported media type'
  }, {
    when: 'no data parameter provided',
    params: [wh.one('user'), wh.one('storage'), wh.jsonPath, undefined],
    error: 'Parameter data undefined or null'
  }, {
    when: 'data parameter not object or buffer',
    params: [wh.one('user'), wh.one('storage'), wh.jsonPath, 3],
    error: 'Parameter data is not one of the supported types: buffer, object'
  }, {
    when: 'jpg path matched with json data',
    params: [wh.one('user'), wh.one('storage'), wh.jpegPath, wh.jsonData()],
    error: 'Path parameter with jpg extension not provided with binary data'
  }, {
    when: 'json path matched with buffer data',
    params: [wh.one('user'), wh.one('storage'), wh.jsonPath, wh.jpegData],
    error: 'Path parameter with json extension not provided with parseable data'
  }, {
    when: 'userStorageAuth.storageToken invalid',
    params: [wh.one('user'), wh.one('storage'), wh.jsonPath, wh.jsonData()],
    error: 'Failed to make successful request. HTTP status code: 401',
    before: function(done) {
      wh.oneSaved('userStorageAuth', {
        user: this.params[0],
        storage: this.params[1]
      }, (error, userStorageAuth) => {
        nock.postStorage(this.params[1], userStorageAuth, 401);
        done();
      });
    }
  }]);

  assertFunctionCallbacksResult(storeFile, [{
    when: 'provided JSON data',
    params: [wh.one('user'), wh.one('storage'), wh.jsonPath, wh.jsonData()],
    result: { size: wh.bytes, path_lower: wh.jsonPath },
    before: before(wh.jsonPath)
  }, {
    when: 'provided buffer data',
    params: [wh.one('user'), wh.one('storage'), wh.jpegPath, wh.jpegData],
    result: { size: wh.bytes, path_lower: wh.jpegPath },
    before: before(wh.jpegPath)
  }]);
});