node-fit-model

0.1.7 • Public • Published

node-fit-model

Checks whether an object is fits into a model.

Motivation

When writing an E2E test regarding REST API, it is annoying to keep specifying that some parameters exist. This library makes that easy by writing the model requirements first then making objects fit into it.

Usage

/*
 *
 * File: test/SomeTest.js
 * Using mocha and chai for BDD
 *
 */
 
var expect = require('chai').expect, // Expect for BDD
    fitModel = require('node-fit-model'),
    Modelling = new fitModel({
        modelDir: __dirname + '/test/models', // locate the models directory
        postFix: 'Model.js' // attach pattern in the model directory files
    });
 
describe('Some test', function(){
    it('should have user data conform to User model', function(done)
    {
        request('/user/me', function(err, res, body)
        {
            /**
             * response looks like this:
             *  {
             *    profile_id: '1234',
             *    name: 'Taku',
             *    gender: 'Male',
             *    locale: 'en_US',
             *    create_time: 1234211549,
             *    timezone_offset: 3600 * -8,
             *    latitude: -118.34,
             *    longitude: 37.311324,
             *    weight: 185,
             *    review: { average: 4.35, count: 58, last_updated: 1448216256},
             *    activities: [
             *       { activity_id: 2384762, create_time: 1448219070, activity_type: 'StatusUpdate'},
             *       { activity_id: 927614,  create_time: 1448132672, activity_type: 'RanActivity'},
             *       { activity_id: 927614,  create_time: 1448046272, activity_type: 'WalkActivity'}
             *     ]
             *   }
             **/
            var response = JSON.parse(body); // if stringified object
            // Otherwise, it would throw an error.
            expect(Modelling.fitModel('User', response)).to.equal(true);
            done();
 
        });
    });
});
 
/*
 *
 * File: test/data/UserModel.js
 * Represents a User Model
 *
 **/
var prototype = [
 
    { name: 'profile_id',           type: 'integer',            required: true, canBeNull: false },
    { name: 'name',                 type: 'string',             required: true, canBeNull: false },
    { name: 'gender',               type: 'enum',               required: true, canBeNull: false, options: ['Male', 'Female'] },
    { name: 'locale',               type: 'string',             required: true, canBeNull: false, maxLength: 5 },
    { name: 'create_time',          type: 'timestamp',          required: true, canBeNull: false },
    { name: 'timezone_offset',      type: 'integer',            required: true, canBeNull: true  },
    { name: 'latitude',             type: 'float',              required: true, canBeNull: false },
    { name: 'longitude',            type: 'float',              required: true, canBeNull: false },
    { name: 'weight',               type: 'number',             required: true, canBeNull: false },
    { name: 'review',               type: 'object(Stats)',      required: true, canBeNull: false },
    { name: 'activities',           type: 'array(Activity)',    required: true, canBeNull: false },
 
 
];
 
module.exports = prototype;
 

Installation

 
npm install node-fit-model
 

Testing

 
npm test
 

Coverage:

  • Data type tests
  • Required value and 'canBeNull' tests

Contribute

  • Submit a Pull Request

Package Sidebar

Install

npm i node-fit-model

Weekly Downloads

1

Version

0.1.7

License

ISC

Last publish

Collaborators

  • taku