0.1.7 • Published 8 years ago

node-fit-model v0.1.7

Weekly downloads
4
License
ISC
Repository
github
Last release
8 years ago

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
0.1.7

8 years ago

0.1.6

8 years ago

0.1.5

8 years ago

0.1.4

8 years ago

0.1.3

8 years ago

0.1.2

8 years ago

0.1.1

8 years ago

0.1.0

8 years ago

1.0.0

8 years ago