travis-web/assets/scripts/spec/unit/model_spec.coffee
2013-07-31 13:29:45 +02:00

123 lines
3.6 KiB
CoffeeScript

fullPostHash = null
Post = null
Author = null
Comment = null
module "Travis.Model",
setup: ->
fullPostHash = {
id: '1',
title: 'foo',
published_at: 'today',
author_id: '1',
comment_ids: ['1', '2']
}
Author = Travis.Model.extend(
name: Ember.attr('string')
)
Author.toString = -> return 'Author'
Comment = Travis.Model.extend(
body: Ember.attr('string')
)
Comment.toString = -> return 'Comment'
Post = Travis.Model.extend(
title: Ember.attr('string'),
publishedAt: Ember.attr('string'),
author: Ember.belongsTo(Author, { key: 'author_id' }),
comments: Ember.hasMany(Comment, { key: 'comment_ids' })
)
Post.toString = -> return 'Post'
Comment.adapter = Ember.FixtureAdapter.create()
Author.adapter = Ember.FixtureAdapter.create()
Post.adapter = Ember.FixtureAdapter.create()
Author.load([
{ id: '1', name: 'drogus' }
])
Comment.load([
{ id: '1', body: 'comment 1' },
{ id: '2', body: 'comment 2' }
])
test "new data can be merged into the record", ->
delete fullPostHash.title
delete fullPostHash.author_id
delete fullPostHash.comment_ids
post = Post.findFromCacheOrLoad(fullPostHash)
post.loadTheRest = (->)
equal(post.get('title'), null, 'title should be null')
equal(post.get('comments.length'), 0, 'comments should be empty')
equal(post.get('author'), null, 'author should be null')
Ember.run -> post.merge(title: 'teh title', comment_ids: ['1', '2'], author_id: '1')
author = null
Ember.run -> author = Author.find('1').get('name')
title = null
Ember.run -> title = post.get('title')
console.log('title', title)
equal(post.get('title'), 'teh title', 'title should be updated')
equal(post.get('comments.length'), 2, 'comments should be updated and have length of 2')
equal(post.get('comments.firstObject.body'), 'comment 1', 'comment should be loaded')
equal(author, 'drogus', 'author should be loaded')
equal(post.get('publishedAt'), 'today', 'existing attributes are not overwritten')
module "Travis.Model.loadOrMerge",
setup: ->
Post = Travis.Model.extend(
title: Ember.attr('string')
)
Post.toString = -> return 'Post'
test "it doesn't update record if skipIfExists is passed and record is already in store", ->
Post.load([{id: '1', title: 'foo'}])
post = Post.find('1')
equal(post.get('title'), 'foo', 'precondition - title of the post should be set')
Ember.run ->
Travis.loadOrMerge(Post, { id: '1', title: 'bar' }, { skipIfExists: true })
equal(post.get('title'), 'foo', 'title should stay unchanged')
test "it updates record if record is already in the store", ->
Post.load([{id: '1', title: 'foo'}])
post = Post.find('1')
equal(post.get('title'), 'foo', 'precondition - title of the post should be set')
Ember.run ->
Travis.loadOrMerge(Post, { id: '1', title: 'bar' })
equal(post.get('title'), 'bar', 'title should be updated')
test "record is not instantiated by default", ->
reference = null
Ember.run ->
reference = Travis.loadOrMerge(Post, { id: '1', title: 'bar' })
equal(reference.id, '1', 'reference should be created')
ok(Ember.isNone(reference.record), 'record should not be created')
post = null
Ember.run -> post = Post.find('1')
equal(post.get('title'), 'bar', 'record should be loaded from cached data')
equal(reference.record, post, 'record should be created')
test "data is merged to the existing data cache", ->
Post.load([{id: '1', title: 'foo'}])
Ember.run ->
Travis.loadOrMerge(Post, { id: '1', title: 'bar' })
post = Post.find('1')
equal(post.get('title'), 'bar', 'title should be updated')