edubkendo
8/28/2012 - 4:34 AM

Changed the pre-generated tests to these passing ones

Changed the pre-generated tests to these passing ones

describe 'UsersController', ->
  controller = undefined
  user = undefined
  url = undefined
  agent = agent or {}

  beforeEach (done) ->
    controller = App.UsersController.create()
    agent.controller = controller
    Tower.start(done)

  afterEach ->
    Tower.stop()
    delete agent.controller

  describe 'routes', ->
    test 'index', ->
      assert.equal urlFor(App.User), "/users"

    test 'new', ->
      user = App.User.build()
      assert.equal urlFor(user, action: 'new'), "/users/new"

    test 'show', ->
      user = App.User.build(id: 1)
      user.save()
      assert.equal urlFor(user), "/users/#{user.get('id')}"

    test 'edit', ->
      user = App.User.build(id: 1)
      user.save()
      assert.equal urlFor(user, action: 'edit'), "/users/#{user.get('id')}/edit"

  describe '#index', ->
    beforeEach (done) ->
      factory 'user', (error, record) =>
        user = record
        done()

    test 'render json', (done) ->
      get urlFor(App.User), format: "json", (request) ->
        assert.equal request.headers["content-type"], 'application/json'

        done()

  describe '#new', ->

  describe '#create', ->
    beforeEach ->
      url = urlFor(App.User)

    test 'params', (done) ->
      params = {}

      post url, format: "json", params: params, (response) ->
        App.User.count (error, count) =>
          assert.equal count, 1
          done()

  describe "#show", ->

  describe "#edit", ->

  describe "#update", ->

  describe "#destroy", ->
user = null

describe "App.User", ->
  describe "fields", ->
    beforeEach (done) ->
      user = App.User.build
        email: "A email"
        firstName: "A firstName"
        lastName: "A lastName"

      done()

    test "email", ->
      assert.ok user.get("email")

    test "firstName", ->
      assert.ok user.get("firstName")

    test "lastName", ->
      assert.ok user.get("lastName")

  describe "relations", ->
require 'tower'

global.chai     = require "chai"
global.assert   = chai.assert
global.expect   = chai.expect
global.sinon    = require 'sinon'
global.async    = require 'async'
global.test     = it
global.cb       = true # some library has a global leak...
global.Faker    = require 'Faker'
global.factory  = -> Tower.Factory.create(arguments...)
global.urlFor   = Tower.urlFor
global.get      = _.get
global.post     = _.post
global.put      = _.put
global.destroy  = _.destroy

global.app      = Tower.Application.instance()

# Initialize the app before everything.
before (done) ->
  app.initialize done

  Tower.Factory.define 'post', ->
    title: Faker.Lorem.words()
    body: Faker.Lorem.sentence()

  Tower.Factory.define 'user', ->
    email: Faker.Internet.email()
    firstName: Faker.Name.firstName()
    lastName: Faker.Name.lastName()    

# Run this before each action
beforeEach (done) ->
  if Tower.client
    Tower.StoreMemory.clean(done)
  else
    Tower.StoreMongodb.clean(done)
describe 'PostsController', ->
  controller = undefined
  post = undefined
  url = undefined
  agent = agent or {}

  beforeEach (done) ->
    controller = App.PostsController.create()
    agent.controller = controller
    Tower.start(done)    

  afterEach ->
    Tower.stop()
    delete agent.controller

  describe 'routes', ->
    test 'index', ->
      assert.equal urlFor(App.Post), "/posts"

    test 'new', ->
      post = App.Post.build()
      assert.equal urlFor(post, action: 'new'), "/posts/new"

    test 'show', ->
      post = App.Post.build(id: 1)
      post.save()
      assert.equal urlFor(post), "/posts/#{post.get('id')}"

    test 'edit', ->
      post = App.Post.build(id: 1)
      post.save()
      assert.equal urlFor(post, action: 'edit'), "/posts/#{post.get('id')}/edit"

  describe '#index', ->
    beforeEach (done) ->
      factory 'post', (error, record) =>
        post = record
        post.save()
        done()

    test 'render json', (done) ->
      get urlFor(App.Post), format: "json", (req) ->
        assert.equal req.headers["content-type"], 'application/json'

        done()

  describe '#new', ->

  describe '#create', ->
    beforeEach ->
      url = urlFor(App.Post)

    test 'params', (done) ->
      params = {}

      _.post url, format: "json", params: params, (response) ->
        App.Post.count (error, count) =>
          assert.equal count, 1
          done()

  describe "#show", ->

  describe "#edit", ->

  describe "#update", ->

  describe "#destroy", ->
post = null

describe "App.Post", ->
  describe "fields", ->
    beforeEach (done) ->
      post = App.Post.build
        title: "A title"
        body: "A body"
        userId: "A user id"
      done()

    test "title", ->
      assert.ok post.get("title")

    test "body", ->
      assert.ok post.get("body")

    test "userId", ->
      assert.ok post.get("userId")

  describe "relations", ->
--require coffee-script ./test/server.coffee
--growl
--reporter spec
--ui bdd
--timeout 2000
--globals r
* change line in mocha.opts to server.coffee, add --globals r (because something in Faker.js causes a leak)

* Add "global.Faker" to server.coffee

* Add factory definitions to server.coffee

* Add *.save() to controller tests show, edit and index

* Change to request.headers['content-type']

* Changed post to _.post in post controller's create test because the 'post' variable overrides the global alias

* changed new App.Post to App.Post.build.