kopi.js
Version:
API for ordering Singaporean Coffee
330 lines (281 loc) • 8.38 kB
JavaScript
var Kopi = require('../dist/kopi');
describe('Kopi', () => {
describe('#parse', () => {
it('returns Kopi contents if pass in "Kopi"', () => {
var content = Kopi.parse('Kopi');
expect(content).to.deep.equal({
water: .4,
coffee: .4,
sugar: 1,
condensed_milk: .2,
evaporated_milk: 0,
state: 'warm'
});
});
it('returns Kopi O contents if pass in "Kopi O"', () => {
var content = Kopi.parse('Kopi O');
expect(content).to.deep.equal({
water: .5,
coffee: .5,
sugar: 1,
condensed_milk: 0,
evaporated_milk: 0,
state: 'warm'
});
});
it('returns Kopi C contents if pass in "Kopi C"', () => {
var content = Kopi.parse('Kopi C');
expect(content).to.deep.equal({
water: .4,
coffee: .4,
sugar: 1,
condensed_milk: 0,
evaporated_milk: .2,
state: 'warm'
});
});
it('returns no sugar if pass in "Kosong"', () => {
var content = Kopi.parse('Kopi O Kosong');
expect(content.sugar).to.equal(0);
});
it('returns more condensed milk if pass in "Gah Dai"', () => {
var content = Kopi.parse('Kopi');
var contentGahDai = Kopi.parse('Kopi Gah Dai');
expect(contentGahDai.condensed_milk).to.be.gt(content.condensed_milk);
});
it('returns less sugar if pass in "Siu Dai"', () => {
var content = Kopi.parse('Kopi Siu Dai');
expect(content.sugar).to.be.equal(.5);
});
it('returns more water, less coffee if pass in "Po"', () => {
var content = Kopi.parse('Kopi Po');
expect(content.water).to.be.gt(content.coffee);
});
it('returns more coffee, less water if pass in "Gao"', () => {
var content = Kopi.parse('Kopi Gao');
expect(content.coffee).to.be.gt(content.water);
});
it('returns more coffee, no water if pass in "Di Lo"', () => {
var content = Kopi.parse('Kopi Di Lo');
expect(content.coffee).to.be.gt(content.water);
expect(content.water).to.be.equal(0);
});
it('returns ice if pass in "Peng"', () => {
var content = Kopi.parse('Kopi Peng');
expect(content.state).to.be.equal('iced');
});
it('returns lukewarm if pass in "Pua Sio"', () => {
var content = Kopi.parse('Kopi Pua Sio');
expect(content.state).to.be.equal('lukewarm');
});
it('returns water if pass in "Water"', () => {
var content = Kopi.parse('Water');
expect(content.water).to.be.equal(1);
});
it('throws an error if pass in "Kopi Kosong"', () => {
expect(function(){
Kopi.parse('Kopi Kosong')
}).to.throw(/invalid kopi/i);
});
});
return describe('#stringify', () => {
it('returns "Kopi" if pass in Kopi ingredients', () => {
var name = Kopi.stringify({
condensed_milk: .2,
water: .4,
coffee: .4,
sugar: 1
});
expect(name).to.equal('Kopi');
});
it('returns "Kopi Gao" if more coffee is added', () => {
var name = Kopi.stringify({
condensed_milk: .2,
water: .2,
coffee: .6,
sugar: 1
});
expect(name).to.equal('Kopi Gao');
});
it('returns "Kopi Po" if less coffee is added', () => {
var name = Kopi.stringify({
condensed_milk: .2,
water: .6,
coffee: .2,
sugar: 1
});
expect(name).to.equal('Kopi Po');
});
it('returns "Kopi Siew Dai" if less sugar is added', () => {
var name = Kopi.stringify({
condensed_milk: .2,
water: .4,
coffee: .4,
sugar: 0.5
});
expect(name).to.equal('Kopi Siew Dai');
});
it('returns "Kopi Siew Dai" and not "Kopi Kosong" if no sugar is added', () => {
var name = Kopi.stringify({
condensed_milk: .2,
water: .4,
coffee: .4,
sugar: 0
});
expect(name).to.equal('Kopi Siew Dai');
});
it('returns "Kopi Gah Dai" if more milk is added', () => {
var name = Kopi.stringify({
condensed_milk: .4,
water: .2,
coffee: .4,
sugar: 1
});
expect(name).to.equal('Kopi Gah Dai');
});
it('returns "Kopi Di Lo" if no water is added', () => {
var name = Kopi.stringify({
condensed_milk: .2,
water: 0,
coffee: .4,
sugar: 1
});
expect(name).to.equal('Kopi Di Lo');
});
it('returns Kopi name includes "Peng" if ice is added', () => {
var name = Kopi.stringify({
condensed_milk: .2,
water: .4,
coffee: .4,
sugar: 1,
state: 'iced'
});
expect(name).to.equal('Kopi Peng');
name = Kopi.stringify({
condensed_milk: .2,
water: .2,
coffee: .6,
sugar: 1,
state: 'iced'
});
expect(name).to.equal('Kopi Peng Gao');
});
it('returns Kopi name includes "Pua Sio" if it\'s lukewarm', () => {
var name = Kopi.stringify({
condensed_milk: .2,
water: .4,
coffee: .4,
sugar: 1,
state: 'lukewarm'
});
expect(name).to.equal('Kopi Pua Sio');
name = Kopi.stringify({
condensed_milk: .2,
water: .2,
coffee: .6,
sugar: 1,
state: 'lukewarm'
});
expect(name).to.equal('Kopi Pua Sio Gao');
});
context('when no milk is added', () => {
it('returns "Kopi O" if equal amounts of water and coffee is added', () => {
var name = Kopi.stringify({
condensed_milk: 0,
water: .5,
coffee: .5,
sugar: 1
});
expect(name).to.equal('Kopi O');
});
it('returns "Kopi O Gao" if more coffee is added', () => {
var name = Kopi.stringify({
condensed_milk: 0,
water: .3,
coffee: .7,
sugar: 1
});
expect(name).to.equal('Kopi O Gao');
});
it('returns "Kopi O Po" if less coffee is added', () => {
var name = Kopi.stringify({
condensed_milk: 0,
water: .7,
coffee: .3,
sugar: 1
});
expect(name).to.equal('Kopi O Po');
});
it('returns "Kopi O Siew Dai" if less sugar is added', () => {
var name = Kopi.stringify({
condensed_milk: 0,
water: .5,
coffee: .5,
sugar: 0.5
});
expect(name).to.equal('Kopi O Siew Dai');
});
it('returns "Kopi O Kosong" if no sugar is added', () => {
var name = Kopi.stringify({
condensed_milk: 0,
water: .5,
coffee: .5,
sugar: 0
});
expect(name).to.equal('Kopi O Kosong');
});
});
context('when evaporated milk is used', () => {
it('returns "Kopi C" if equal amounts of water and coffee is added', () => {
var name = Kopi.stringify({
condensed_milk: 0,
evaporated_milk: .2,
water: .4,
coffee: .4,
sugar: 1
});
expect(name).to.equal('Kopi C');
});
it('returns "Kopi C Gao" if more coffee is added', () => {
var name = Kopi.stringify({
condensed_milk: 0,
evaporated_milk: .2,
water: .2,
coffee: .6,
sugar: 1
});
expect(name).to.equal('Kopi C Gao');
});
it('returns "Kopi C Po" if less coffee is added', () => {
var name = Kopi.stringify({
condensed_milk: 0,
evaporated_milk: .2,
water: .7,
coffee: .3,
sugar: 1
});
expect(name).to.equal('Kopi C Po');
});
it('returns "Kopi C Siew Dai" if less sugar is added', () => {
var name = Kopi.stringify({
condensed_milk: 0,
evaporated_milk: .2,
water: .5,
coffee: .5,
sugar: 0.5
});
expect(name).to.equal('Kopi C Siew Dai');
});
return it('returns "Kopi C Kosong" if no sugar is added', () => {
var name = Kopi.stringify({
condensed_milk: 0,
evaporated_milk: .2,
water: .5,
coffee: .5,
sugar: 0
});
expect(name).to.equal('Kopi C Kosong');
});
});
});
});