Skip to content
Snippets Groups Projects
Commit 207453a3 authored by David Baumgold's avatar David Baumgold
Browse files

Further basic tests for Backbone models

parent 001cd5d0
No related branches found
No related tags found
No related merge requests found
beforeEach ->
@addMatchers
toBeInstanceOf: (expected) ->
return @actual instanceof expected
describe "CMS.Models.Textbook", ->
beforeEach ->
@model = new CMS.Models.Textbook()
......@@ -9,4 +15,55 @@ describe "CMS.Models.Textbook", ->
expect(@model.get("showChapters")).toBeFalsy()
it "should have a ChapterSet with one chapter by default", ->
expect(@model.get("chapters").length).toEqual(1)
chapters = @model.get("chapters")
expect(chapters).toBeInstanceOf(CMS.Collections.ChapterSet)
expect(chapters.length).toEqual(1)
it "should be empty by default", ->
expect(@model.isEmpty()).toBeTruthy()
describe "CMS.Models.Textbook input/output", ->
# replace with Backbone.Assocations.deepAttributes when
# https://github.com/dhruvaray/backbone-associations/pull/43 is merged
deepAttributes = (obj) ->
if obj instanceof Backbone.Model
deepAttributes(obj.attributes)
else if obj instanceof Backbone.Collection
obj.map(deepAttributes);
else if _.isArray(obj)
_.map(obj, deepAttributes);
else if _.isObject(obj)
attributes = {};
for own prop, val of obj
attributes[prop] = deepAttributes(val)
attributes
else
obj
it "should match server model to client model", ->
serverModelSpec = {
"tab_title": "My Textbook",
"chapters": [
{"title": "Chapter 1", "url": "/ch1.pdf"},
{"title": "Chapter 2", "url": "/ch2.pdf"},
]
}
clientModelSpec = {
"name": "My Textbook",
"showChapters": false,
"chapters": [{
"name": "Chapter 1",
"asset_path": "/ch1.pdf",
"order": 1
}, {
"name": "Chapter 2",
"asset_path": "/ch2.pdf",
"order": 2
}
]
}
model = new CMS.Models.Textbook(serverModelSpec, {parse: true})
expect(deepAttributes(model)).toEqual(clientModelSpec)
expect(model.toJSON()).toEqual(serverModelSpec)
......@@ -16,18 +16,19 @@ CMS.Models.Textbook = Backbone.AssociatedModel.extend({
return !this.get('name') && this.get('chapters').isEmpty();
},
parse: function(response) {
if("tab_title" in response && !("name" in response)) {
response.name = response.tab_title;
delete response.tab_title;
var ret = $.extend(true, {}, response);
if("tab_title" in ret && !("name" in ret)) {
ret.name = ret.tab_title;
delete ret.tab_title;
}
if("url" in response && !("chapters" in response)) {
response.chapters = {"url": response.url};
delete response.url;
if("url" in ret && !("chapters" in ret)) {
ret.chapters = {"url": ret.url};
delete ret.url;
}
_.each(response.chapters, function(chapter, i) {
_.each(ret.chapters, function(chapter, i) {
chapter.order = chapter.order || i+1;
});
return response;
return ret;
},
toJSON: function() {
return {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment