tikal-tech-radar-generator
Version:
A library that generates an interactive radar, inspired by http://thoughtworks.com/radar/
209 lines (161 loc) • 6.24 kB
JavaScript
const Radar = require('../../src/models/radar')
const Quadrant = require('../../src/models/quadrant')
const Ring = require('../../src/models/ring')
const Blip = require('../../src/models/blip')
const MalformedDataError = require('../../src/exceptions/malformedDataError')
const ExceptionMessages = require('../../src/util/exceptionMessages')
describe('Radar', function () {
it('has no quadrants by default', function () {
var radar = new Radar()
expect(radar.quadrants()[0].quadrant).not.toBeDefined()
expect(radar.quadrants()[1].quadrant).not.toBeDefined()
expect(radar.quadrants()[2].quadrant).not.toBeDefined()
expect(radar.quadrants()[3].quadrant).not.toBeDefined()
})
it('sets the first quadrant', function () {
var quadrant, radar, blip
blip = new Blip('A', new Ring('First'))
quadrant = new Quadrant('First')
quadrant.add([blip])
radar = new Radar()
radar.addQuadrant(quadrant)
expect(radar.quadrants()[0].quadrant).toEqual(quadrant)
expect(radar.quadrants()[0].quadrant.blips()[0].number()).toEqual(1)
})
it('sets the second quadrant', function () {
var quadrant, radar, blip
blip = new Blip('A', new Ring('First'))
quadrant = new Quadrant('Second')
quadrant.add([blip])
radar = new Radar()
radar.addQuadrant(quadrant)
expect(radar.quadrants()[0].quadrant).toEqual(quadrant)
expect(radar.quadrants()[0].quadrant.blips()[0].number()).toEqual(1)
})
it('sets the third quadrant', function () {
var quadrant, radar, blip
blip = new Blip('A', new Ring('First'))
quadrant = new Quadrant('Third')
quadrant.add([blip])
radar = new Radar()
radar.addQuadrant(quadrant)
expect(radar.quadrants()[0].quadrant).toEqual(quadrant)
expect(radar.quadrants()[0].quadrant.blips()[0].number()).toEqual(1)
})
it('sets the fourth quadrant', function () {
var quadrant, radar, blip
blip = new Blip('A', new Ring('First'))
quadrant = new Quadrant('Fourth')
quadrant.add([blip])
radar = new Radar()
radar.addQuadrant(quadrant)
expect(radar.quadrants()[0].quadrant).toEqual(quadrant)
expect(radar.quadrants()[0].quadrant.blips()[0].number()).toEqual(1)
})
it('throws an error if too many quadrants are added', function () {
var quadrant, radar, blip
blip = new Blip('A', new Ring('First'))
quadrant = new Quadrant('First')
quadrant.add([blip])
radar = new Radar()
radar.addQuadrant(quadrant)
radar.addQuadrant(new Quadrant('Second'))
radar.addQuadrant(new Quadrant('Third'))
radar.addQuadrant(new Quadrant('Fourth'))
expect(function () { radar.addQuadrant(new Quadrant('Fifth')) }).toThrow(new MalformedDataError(ExceptionMessages.TOO_MANY_QUADRANTS))
})
it('throws an error if less than 4 quadrants are added', function () {
var quadrant, radar, blip
blip = new Blip('A', new Ring('First'))
quadrant = new Quadrant('First')
quadrant.add([blip])
radar = new Radar()
radar.addQuadrant(quadrant)
radar.addQuadrant(new Quadrant('Second'))
radar.addQuadrant(new Quadrant('Third'))
expect(function () { radar.rings() }).toThrow(new MalformedDataError(ExceptionMessages.LESS_THAN_FOUR_QUADRANTS))
})
describe('blip numbers', function () {
var firstQuadrant, secondQuadrant, radar, firstRing
beforeEach(function () {
firstRing = new Ring('Adopt', 0)
firstQuadrant = new Quadrant('First')
secondQuadrant = new Quadrant('Second')
firstQuadrant.add([
new Blip('A', firstRing),
new Blip('B', firstRing)
])
secondQuadrant.add([
new Blip('C', firstRing),
new Blip('D', firstRing)
])
radar = new Radar()
})
it('sets blip numbers starting on the first quadrant', function () {
radar.addQuadrant(firstQuadrant)
expect(radar.quadrants()[0].quadrant.blips()[0].number()).toEqual(1)
expect(radar.quadrants()[0].quadrant.blips()[1].number()).toEqual(2)
})
it('continues the number from the previous quadrant set', function () {
radar.addQuadrant(firstQuadrant)
radar.addQuadrant(secondQuadrant)
expect(radar.quadrants()[1].quadrant.blips()[0].number()).toEqual(3)
expect(radar.quadrants()[1].quadrant.blips()[1].number()).toEqual(4)
})
})
describe('alternatives', function () {
it('returns a provided alternatives', function () {
var radar = new Radar()
var alternative1 = 'alternative1'
var alternative2 = 'alternative2'
radar.addAlternative(alternative1)
radar.addAlternative(alternative2)
expect(radar.getAlternatives()).toEqual([alternative1, alternative2])
})
})
describe('rings', function () {
var quadrant, radar, firstRing, secondRing, otherQuadrant
beforeEach(function () {
firstRing = new Ring('Adopt', 0)
secondRing = new Ring('Hold', 1)
quadrant = new Quadrant('Fourth')
otherQuadrant = new Quadrant('Other')
radar = new Radar()
})
it('returns an array for a given set of blips', function () {
quadrant.add([
new Blip('A', firstRing),
new Blip('B', secondRing)
])
radar.addQuadrant(quadrant)
radar.addQuadrant(otherQuadrant)
radar.addQuadrant(otherQuadrant)
radar.addQuadrant(otherQuadrant)
expect(radar.rings()).toEqual([firstRing, secondRing])
})
it('has unique rings', function () {
quadrant.add([
new Blip('A', firstRing),
new Blip('B', firstRing),
new Blip('C', secondRing)
])
radar.addQuadrant(quadrant)
radar.addQuadrant(otherQuadrant)
radar.addQuadrant(otherQuadrant)
radar.addQuadrant(otherQuadrant)
expect(radar.rings()).toEqual([firstRing, secondRing])
})
it('has sorts by the ring order', function () {
quadrant.add([
new Blip('C', secondRing),
new Blip('A', firstRing),
new Blip('B', firstRing)
])
radar.addQuadrant(quadrant)
radar.addQuadrant(otherQuadrant)
radar.addQuadrant(otherQuadrant)
radar.addQuadrant(otherQuadrant)
expect(radar.rings()).toEqual([firstRing, secondRing])
})
})
})