不要怂,就是干,撸起袖子干!

model-factory.spec.js 3.59 KB
var config    = require("../config/config")
  , Sequelize = require("../../index")
  , sequelize = new Sequelize(config.database, config.username, config.password, { logging: false, dialect: 'sqlite' })
  , Helpers   = new (require("../config/helpers"))(sequelize)

describe('ModelFactory', function() {
  var User = null

  beforeEach(function() {
    User = sequelize.define('User', {
      age: Sequelize.INTEGER,
      name: Sequelize.STRING,
      bio: Sequelize.TEXT
    })
    Helpers.sync()
  })
  afterEach(function() {
    Helpers.dropAllTables()
  })

  describe('create', function() {
    it('creates a table entry', function() {
      Helpers.async(function(done) {
        User
          .create({ age: 21, name: 'John Wayne', bio: 'noot noot' })
          .success(done)
          .error(function(err) { console.log(err) })
      })

      Helpers.async(function(done) {
        User.all().success(function(users) {
          var usernames = users.map(function(user) {
            return user.name
          })
          expect(usernames).toEqual(['John Wayne'])
          done()
        }).error(function(err){ console.log(err) })
      })
    })

    it('should allow the creation of an object with options as attribute', function() {
      var Person = sequelize.define('Person', {
        name: Sequelize.STRING,
        options: Sequelize.TEXT
      })

      Helpers.async(function(done) {
        Person.sync({force: true}).success(done)
      })

      Helpers.async(function(done) {
        var options = JSON.stringify({ foo: 'bar', bar: 'foo' })
        Helpers.Factories.Model('Person', {
          name: 'John Doe',
          options: options
        }, function(people) {
          expect(people[0].options).toEqual(options)
          done()
        })
      })
    })
  })


  ////////// find //////////////

  describe('.find', function() {
    beforeEach(function() {
      Helpers.Factories.User({name: 'user', bio: 'foobar'}, null, 2)
    })

    it("finds normal lookups", function() {
      Helpers.async(function(done) {
        User.find({ where: { name:'user' } }).success(function(user) {
          expect(user.name).toEqual('user')
          done()
        })
      })
    })

    it("should make aliased attributes available", function() {
      Helpers.async(function(done) {
        User.find({ where: { name:'user' }, attributes: ['id', ['name', 'username']] }).success(function(user) {
          expect(user.username).toEqual('user')
          done()
        })
      })
    })
  })

  ////////// all //////////////

  describe('.all', function() {
    beforeEach(function() {
      Helpers.Factories.User({name: 'user', bio: 'foobar'}, null, 2)
    })

    it("should return all users", function() {
      Helpers.async(function(done) {
        User.all().on('success', function(users) {
          done()
          expect(users.length).toEqual(2)
        }).on('failure', function(err) { console.log(err) })
      })
    })
  })

  ////////// min //////////////

  describe('.min', function() {
    it("should return the min value", function() {
      for(var i = 2; i < 5; i++) Helpers.Factories.User({ age: i })

      Helpers.async(function(done) {
        User.min('age').on('success', function(min) {
          expect(min).toEqual(2); done()
        })
      })
    })
  })

  ////////// max //////////////

  describe('.max', function() {
    it("should return the max value", function() {
      for(var i = 2; i <= 5; i++) Helpers.Factories.User({ age: i })

      Helpers.async(function(done) {
        User.max('age').on('success', function(min) {
          expect(min).toEqual(5); done()
        })
      })
    })
  })
})