Created
January 26, 2015 09:20
-
-
Save dbousamra/dbe4bee8033a5bfa7cb6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /// <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