101 lines
3.6 KiB
CoffeeScript
101 lines
3.6 KiB
CoffeeScript
###
|
|
Crafting Guide - item_parser_v1.test.coffee
|
|
|
|
Copyright (c) 2015 by Redwood Labs
|
|
All rights reserved.
|
|
###
|
|
|
|
Item = require '../../src/coffee/models/item'
|
|
ItemParserV1 = require '../../src/coffee/models/parser_versions/item_parser_v1'
|
|
_ = require 'underscore'
|
|
|
|
########################################################################################################################
|
|
|
|
baseText = item = parser = null
|
|
|
|
########################################################################################################################
|
|
|
|
describe 'item_parser_v1.coffee', ->
|
|
|
|
beforeEach ->
|
|
item = new Item name:'alpha'
|
|
parser = new ItemParserV1 model:item
|
|
|
|
describe 'officialUrl', ->
|
|
|
|
it 'may be omitted', ->
|
|
parser.parse 'schema: 1\nvideo: youtubeid, Video Alpha\ndescription: Bravo, Charlie'
|
|
expect(item.officialUrl).to.be.null
|
|
|
|
it 'is assigned properly when given', ->
|
|
parser.parse 'schema: 1\nofficialUrl: http://testurl.com'
|
|
item.officialUrl.should.equal 'http://testurl.com'
|
|
|
|
it 'does not allow duplicate declarations', ->
|
|
func = -> parser.parse 'schema: 1\nofficialUrl: http://testurl.com\nofficialUrl: http://testurl2.com'
|
|
expect(func).to.throw Error, 'duplicate'
|
|
|
|
it 'does not allow an empty value if given', ->
|
|
func = -> parser.parse 'schema: 1\nofficialUrl:'
|
|
expect(func).to.throw Error, 'empty'
|
|
|
|
describe 'description', ->
|
|
|
|
it 'may be omitted', ->
|
|
parser.parse 'schema: 1\nvideo: youTubeId, Video Alpha\nofficialUrl: http://testurl.com'
|
|
expect(item.description).to.be.null
|
|
|
|
it 'is assigned properly when given', ->
|
|
parser.parse 'schema: 1\ndescription: Alpha Bravo Charlie'
|
|
item.description.should.equal 'Alpha Bravo Charlie'
|
|
|
|
it 'can be a heredoc', ->
|
|
parser.parse 'schema: 1\ndescription: <<-END\nAlpha\nBravo\nCharlie\nEND'
|
|
item.description.should.equal 'Alpha\nBravo\nCharlie'
|
|
|
|
it 'concatenates multiple declarations', ->
|
|
parser.parse 'schema: 1\ndescription: Alpha\ndescription: Bravo'
|
|
item.description.should.equal 'Alpha\nBravo'
|
|
|
|
describe 'video', ->
|
|
|
|
it 'may be omitted', ->
|
|
parser.parse 'schema: 1\nofficialUrl: http://testurl.com\ndescription: Alpha Bravo Charlie'
|
|
item.videos.should.eql []
|
|
|
|
it 'is assigned properly when given', ->
|
|
parser.parse 'schema: 1\nvideo: youtubeid, Alpha Bravo'
|
|
item.videos[0].should.eql youTubeId:'youtubeid', name:'Alpha Bravo'
|
|
item.videos.length.should.equal 1
|
|
|
|
it 'may be included multiple times', ->
|
|
parser.parse 'schema: 1\nvideo: youtubeid1, Alpha\nvideo: youtubeid2, Bravo'
|
|
item.videos[0].should.eql youTubeId:'youtubeid1', name:'Alpha'
|
|
item.videos[1].should.eql youTubeId:'youtubeid2', name:'Bravo'
|
|
item.videos.length.should.equal 2
|
|
|
|
it 'requires a YouTubeId and name', ->
|
|
func = -> parser.parse 'schema: 1\nvideo: alpha'
|
|
expect(func).to.throw Error, 'requires a name'
|
|
|
|
describe 'unparsing', ->
|
|
|
|
it 'can round-trip a fully described item', ->
|
|
text = """
|
|
schema: 1
|
|
|
|
officialUrl: http://testurl.com
|
|
|
|
description: <<-END
|
|
Alpha
|
|
Bravo
|
|
END
|
|
|
|
video: youtubeid1, Alpha Bravo
|
|
video: youtubeid2, Charlie Delta
|
|
|
|
|
|
"""
|
|
parser.parse text
|
|
parser.unparse().should.equal text
|