Skip to content

Instantly share code, notes, and snippets.

@dbousamra
Created January 26, 2015 09:20
Show Gist options
  • Select an option

  • Save dbousamra/dbe4bee8033a5bfa7cb6 to your computer and use it in GitHub Desktop.

Select an option

Save dbousamra/dbe4bee8033a5bfa7cb6 to your computer and use it in GitHub Desktop.
/// <reference path="../../typings/tsd.d.ts" />
import testcheck = require('testcheck');
import domain = require('./dao/domain');
import CameraMapper = require('./dao/mapper/camera/index');
import should = require('should');
import _ = require('lodash')
import mt = require('mocha-testcheck')
mt.install(global);
var persist = should;
var gen = testcheck.gen
// Generator of generator T with min and max length
var genWithLength = (generator: testcheck.Generator<any>, min: number, max: number) => {
return gen.map((arr) => arr.join(""), gen.array(generator, min, max))
}
// Generator that returns a 24 char hex MongoId
var genMongoId =
gen.bind(genWithLength(gen.alphaNumChar, 6, 6), (chars) =>
gen.return(chars.toUpperCase()))
// Generator that returns a new email address.
var genEmail =
gen.bind(genWithLength(gen.alphaNumChar, 8, 8), (username) =>
gen.bind(genWithLength(gen.alphaNumChar, 8, 8), (domain) =>
gen.return(username + "@" + domain + ".com")))
// Generator that returns an IP Address
var genIpAddress =
gen.bind(gen.intWithin(1, 255), (a) =>
gen.bind(gen.intWithin(1, 255), (b) =>
gen.bind(gen.intWithin(1, 255), (c) =>
gen.bind(gen.intWithin(1, 255), (d) =>
gen.return(a + '.' + b + '.' + c + '.' + d)))))
// Generator that returns an FTP object
var genFTP = gen.object({
host: genWithLength(gen.alphaNumChar, 6, 12),
port: gen.bind(gen.intWithin(1, 65535), (port) => gen.return(port.toString())),
username: genWithLength(gen.alphaNumChar, 6, 10),
password: genWithLength(gen.alphaNumChar, 6, 10)
})
// Generator that returns a Camera
var genCamera: testcheck.Generator<domain.Camera> =
gen.bind(genMongoId, (id) =>
gen.bind(gen.string, (name) =>
gen.bind(gen.string, (model) =>
gen.bind(gen.string, (manufacturer) =>
gen.bind(gen.string, (mac_address) =>
gen.bind(genEmail, (creator) =>
gen.bind(genEmail, (owner) =>
gen.bind(genIpAddress, (local_ip) =>
gen.bind(gen.string, (local_port) =>
gen.bind(gen.posInt, (date_created) =>
gen.bind(gen.boolean, (motion_enabled) =>
gen.bind(gen.boolean, (public) =>
gen.bind(gen.boolean, (disabled) =>
gen.bind(genFTP, (ftp) =>
gen.bind(gen.object({ lat: gen.posInt, lng: gen.posInt }), (location) =>
gen.return(
new domain.Camera(id, name, model, manufacturer,
mac_address, creator, owner, local_ip, local_port,
date_created, motion_enabled, public, disabled, ftp, location)))))))))))))))))
describe("Mapper", () => {
global.check.it('accepts an int and a string', [gen.int, gen.string], (x, y) => {
x.should.be.type('number')
y.should.be.type('string')
});
global.check.it('accepts an int and a string', { times: 5 }, [genCamera], (camera) => {
// var mapper = CameraMapper.getCurrentVersion()
// var mappedBackAndForth = mapper.mapToModel(mapper.mapFromModel(camera))
// console.log(mappedBackAndForth === camera)
"DOM".should.be.type('string')
});
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment