1. All tests have been converted into regular command-line mocha tests (instead of running in the browser), and the deployment script has been changed to automatically fail any `--new` deployment which doesn't pass. 2. Several small class (e.g., `Logger`) have been moved into a common module, `crafting-guide-common` so that they may be shared between the client and server.
137 lines
4.5 KiB
CoffeeScript
137 lines
4.5 KiB
CoffeeScript
###
|
|
Crafting Guide - item_slug.coffee
|
|
|
|
Copyright (c) 2015 by Redwood Labs
|
|
All rights reserved.
|
|
###
|
|
|
|
ItemSlug = require '../src/coffee/models/item_slug'
|
|
|
|
########################################################################################################################
|
|
|
|
describe 'item_slug.coffee', ->
|
|
|
|
describe 'constructor', ->
|
|
|
|
it 'can handle one argument', ->
|
|
slug = new ItemSlug 'alpha'
|
|
slug.item.should.equal 'alpha'
|
|
expect(slug.mod).to.be.null
|
|
slug.qualified.should.equal 'alpha'
|
|
|
|
it 'can handle two arguments', ->
|
|
slug = new ItemSlug 'alpha', 'bravo'
|
|
slug.mod.should.equal 'alpha'
|
|
slug.item.should.equal 'bravo'
|
|
slug.qualified.should.equal 'alpha__bravo'
|
|
|
|
it 'throws with zero arguments', ->
|
|
f = -> new ItemSlug
|
|
expect(f).to.throw Error, 'expected arguments to be "modSlug, itemSlug" or just "itemSlug"'
|
|
|
|
it 'throws with more arguments', ->
|
|
f = -> new ItemSlug 'alpha', 'bravo', 'charlie'
|
|
expect(f).to.throw Error, 'expected arguments to be "modSlug, itemSlug" or just "itemSlug"'
|
|
|
|
describe 'ItemSlug.compare', ->
|
|
|
|
it 'sorts qualified slugs first', ->
|
|
a = new ItemSlug 'alpha'
|
|
b = new ItemSlug 'bravo', 'charlie'
|
|
|
|
ItemSlug.compare(a, b).should.equal +1
|
|
ItemSlug.compare(b, a).should.equal -1
|
|
|
|
it 'sorts by mod when both are qualified', ->
|
|
a = new ItemSlug 'alpha', 'bravo'
|
|
b = new ItemSlug 'charlie', 'delta'
|
|
|
|
ItemSlug.compare(a, b).should.equal -1
|
|
ItemSlug.compare(b, a).should.equal +1
|
|
|
|
it 'sorts by item when both are qualified in the same mod', ->
|
|
a = new ItemSlug 'alpha', 'bravo'
|
|
b = new ItemSlug 'charlie', 'bravo'
|
|
|
|
ItemSlug.compare(a, b).should.equal -1
|
|
ItemSlug.compare(b, a).should.equal +1
|
|
|
|
it 'sorts by item when not qualified', ->
|
|
a = new ItemSlug 'alpha'
|
|
b = new ItemSlug 'bravo'
|
|
|
|
ItemSlug.compare(a, b).should.equal -1
|
|
ItemSlug.compare(b, a).should.equal +1
|
|
|
|
describe 'ItemSlug.equal', ->
|
|
|
|
it 'requires both to have the same mod', ->
|
|
a = new ItemSlug 'alpha', 'bravo'
|
|
b = new ItemSlug 'alpha', 'charlie'
|
|
c = new ItemSlug 'alpha', 'bravo'
|
|
|
|
ItemSlug.equal(a, b).should.be.false
|
|
ItemSlug.equal(a, c).should.be.true
|
|
|
|
it 'requires both to have the same item', ->
|
|
a = new ItemSlug 'alpha', 'bravo'
|
|
b = new ItemSlug 'alpha', 'charlie'
|
|
c = new ItemSlug 'alpha', 'bravo'
|
|
|
|
ItemSlug.equal(a, b).should.be.false
|
|
ItemSlug.equal(a, c).should.be.true
|
|
|
|
describe 'ItemSlug.slugify', ->
|
|
|
|
it 'can slugify a pure name', ->
|
|
slug = ItemSlug.slugify 'Alpha Bravo (Charlie)'
|
|
slug.item.should.equal 'alpha_bravo_charlie'
|
|
expect(slug.mod).to.be.null
|
|
|
|
it 'can slugify a simple item slug', ->
|
|
slug = ItemSlug.slugify 'alpha_bravo_charlie'
|
|
slug.item.should.equal 'alpha_bravo_charlie'
|
|
expect(slug.mod).to.be.null
|
|
|
|
it 'can slugify a fully-qualified slug', ->
|
|
slug = ItemSlug.slugify 'alpha_bravo__charlie_delta'
|
|
slug.mod.should.equal 'alpha_bravo'
|
|
slug.item.should.equal 'charlie_delta'
|
|
|
|
describe 'matches', ->
|
|
|
|
it 'ignores mod when either is unqualified', ->
|
|
a = new ItemSlug 'alpha', 'bravo'
|
|
b = new ItemSlug 'bravo'
|
|
c = new ItemSlug 'charlie'
|
|
|
|
a.matches(b).should.be.true
|
|
a.matches(c).should.be.false
|
|
|
|
it 'observes differences in mod when all are qualified', ->
|
|
a = new ItemSlug 'alpha', 'bravo'
|
|
b = new ItemSlug 'charlie', 'bravo'
|
|
c = new ItemSlug 'delta', 'echo'
|
|
d = new ItemSlug 'alpha', 'bravo'
|
|
|
|
a.matches(b).should.be.false
|
|
a.matches(c).should.be.false
|
|
a.matches(d).should.be.true
|
|
|
|
describe 'isQualified', ->
|
|
|
|
it 'returns true only when the mod slug is set', ->
|
|
a = new ItemSlug 'alpha', 'bravo'
|
|
b = new ItemSlug 'charlie'
|
|
a.isQualified.should.be.true
|
|
b.isQualified.should.be.false
|
|
|
|
describe '[]', ->
|
|
|
|
it 'allows slugs as a key', ->
|
|
slug = new ItemSlug 'alpha', 'bravo'
|
|
data = {}
|
|
data[slug] = 'foo'
|
|
data['alpha__bravo'].should.equal 'foo'
|
|
data[slug].should.equal 'foo'
|