conf-cal
Version:
Convenient calendar for conferences
213 lines (206 loc) • 7.12 kB
JavaScript
const test = require('tap').test
const renderSlots = require('../renderSlots')
test('rendering of a single slot and a single room', async t => {
const rendered = renderSlots({}, {
rooms: ['a'],
tz: 'Asia/Tokyo',
slots: [{
start: '2017-11-25T00:00:00.000Z',
end: '2017-11-25T01:00:00.000Z',
room: 'a',
entry: { start: '2017-11-25T00:00:00.000Z', end: '2017-11-25T01:00:00.000Z', summary: 'x', person: null, rowSpan: 1 }
}]
})
t.equals(rendered, `
| | a |
| --- | --- |
| 9:00-10:00 | x |
`)
})
test('rendering of a single slot and a single multiline room', async t => {
const rendered = renderSlots({}, {
rooms: ['a'],
tz: 'Asia/Tokyo',
slots: [{
start: '2017-11-25T00:00:00.000Z',
end: '2017-11-25T01:00:00.000Z',
room: 'a',
entry: { start: '2017-11-25T00:00:00.000Z', end: '2017-11-25T01:00:00.000Z', summary: 'x\ny', person: null, rowSpan: 1 }
}]
})
t.equals(rendered, `
| | a |
| --- | --- |
| 9:00-10:00 | x<br/>y |
`)
})
test('rendering a multiline slot with a list', async t => {
const rendered = renderSlots({}, {
rooms: ['a'],
tz: 'Asia/Tokyo',
slots: [{
start: '2017-11-25T00:00:00.000Z',
end: '2017-11-25T01:00:00.000Z',
room: 'a',
entry: {
start: '2017-11-25T00:00:00.000Z',
end: '2017-11-25T01:00:00.000Z',
summary: 'x',
person: 'a',
lang: 'en',
entries: [
{ summary: 'y', person: 'b' },
{ summary: 'z', person: 'c' }
],
rowSpan: 1
}
}]
})
t.equals(rendered, `
| | a |
| --- | --- |
| 9:00-10:00 | x _by a_ in en<br/><ul><li>y _by b_</li><li>z _by c_</li></ul> |
`)
})
test('rendering with escape characters in the room, summary and person', async t => {
const rendered = renderSlots({}, {
rooms: ['|a|'],
tz: 'Asia/Tokyo',
slots: [{
start: '2017-11-25T00:00:00.000Z',
end: '2017-11-25T01:00:00.000Z',
room: '|a|',
entry: { start: '2017-11-25T00:00:00.000Z', end: '2017-11-25T01:00:00.000Z', summary: '|x|', person: '|y|', rowSpan: 1 }
}]
})
t.equals(rendered, `
| | |a| |
| --- | --- |
| 9:00-10:00 | |x| _by |y|_ |
`)
})
test('rendering of two slots and two rooms', async t => {
const rendered = renderSlots({}, {
rooms: ['a', 'b'],
tz: 'Asia/Tokyo',
slots: [{
start: '2017-11-25T00:00:00.000Z',
end: '2017-11-25T01:00:00.000Z',
entries: {
a: { start: '2017-11-25T00:00:00.000Z', end: '2017-11-25T01:00:00.000Z', summary: 'x', person: null, rowSpan: 1 },
b: { start: '2017-11-25T00:00:00.000Z', end: '2017-11-25T01:00:00.000Z', summary: '1', person: null, rowSpan: 1 }
}
}, {
start: '2017-11-25T01:00:00.000Z',
end: '2017-11-25T02:00:00.000Z',
entries: {
a: { start: '2017-11-25T01:00:00.000Z', end: '2017-11-25T02:00:00.000Z', summary: 'y', person: null, rowSpan: 1 },
b: { start: '2017-11-25T01:00:00.000Z', end: '2017-11-25T02:00:00.000Z', summary: '2', person: null, rowSpan: 1 }
}
}]
})
t.equals(rendered, `
| | a | b |
| --- | --- | --- |
| 9:00-10:00 | x | 1 |
| 10:00-11:00 | y | 2 |
`)
})
test('rendering of two slots with breaks and spaces', async t => {
const rendered = renderSlots({}, {
rooms: ['a', 'b'],
tz: 'Asia/Tokyo',
slots: [{
start: '2017-11-25T00:00:00.000Z',
end: '2017-11-25T01:00:00.000Z',
room: 'a',
entry:
{ start: '2017-11-25T00:00:00.000Z', end: '2017-11-25T01:00:00.000Z', summary: 'x', person: null, rowSpan: 1 }
}, {
start: '2017-11-25T01:00:00.000Z',
end: '2017-11-25T02:00:00.000Z',
entry:
{ start: '2017-11-25T01:00:00.000Z', end: '2017-11-25T02:00:00.000Z', summary: null, person: null, rowSpan: 1 }
}, {
start: '2017-11-25T02:00:00.000Z',
end: '2017-11-25T03:00:00.000Z',
room: 'a',
entry:
{ start: '2017-11-25T02:00:00.000Z', end: '2017-11-25T03:00:00.000Z', summary: 'y', person: null, rowSpan: 1 }
}, {
start: '2017-11-25T03:00:00.000Z',
end: '2017-11-25T04:00:00.000Z',
entries: {
a: { start: '2017-11-25T03:00:00.000Z', end: '2017-11-25T06:00:00.000Z', summary: 'y', person: null, rowSpan: 3 },
b: { start: '2017-11-25T03:00:00.000Z', end: '2017-11-25T04:00:00.000Z', summary: '1', person: null, rowSpan: 1 }
}
}, {
start: '2017-11-25T04:00:00.000Z',
end: '2017-11-25T05:00:00.000Z',
entries: {
b: { start: '2017-11-25T04:00:00.000Z', end: '2017-11-25T05:00:00.000Z', summary: null, person: null, rowSpan: 1 }
}
}, {
start: '2017-11-25T05:00:00.000Z',
end: '2017-11-25T06:00:00.000Z',
entries: {
b: { start: '2017-11-25T05:00:00.000Z', end: '2017-11-25T06:00:00.000Z', summary: '2', person: null, rowSpan: 1 }
}
}, {
start: '2017-11-25T06:00:00.000Z',
end: '2017-11-25T07:00:00.000Z',
room: null,
entry:
{ start: '2017-11-25T06:00:00.000Z', end: '2017-11-25T07:00:00.000Z', summary: null, person: null, rowSpan: 1 }
}, {
start: '2017-11-25T07:00:00.000Z',
end: '2017-11-25T08:00:00.000Z',
entries: {
a: { start: '2017-11-25T07:00:00.000Z', end: '2017-11-25T08:00:00.000Z', summary: 'z', person: null, rowSpan: 1 },
b: { start: '2017-11-25T07:00:00.000Z', end: '2017-11-25T08:00:00.000Z', summary: '3', person: null, rowSpan: 1 }
}
}, {
start: '2017-11-25T08:00:00.000Z',
end: '2017-11-25T09:00:00.000Z',
entries: {
a: { start: '2017-11-25T08:00:00.000Z', end: '2017-11-25T09:00:00.000Z', summary: null, person: null, rowSpan: 1 },
b: { start: '2017-11-25T08:00:00.000Z', end: '2017-11-25T09:00:00.000Z', summary: '4', person: null, rowSpan: 1 }
}
}, {
start: '2017-11-25T09:00:00.000Z',
end: '2017-11-25T10:00:00.000Z',
entries: {
a: { start: '2017-11-25T09:00:00.000Z', end: '2017-11-25T10:00:00.000Z', summary: 'z\'', person: null, rowSpan: 1 },
b: { start: '2017-11-25T09:00:00.000Z', end: '2017-11-25T10:00:00.000Z', summary: '5', person: null, rowSpan: 1 }
}
}, {
start: '2017-11-25T10:00:00.000Z',
end: '2017-11-25T11:00:00.000Z',
entry:
{ start: '2017-11-25T10:00:00.000Z', end: '2017-11-25T11:00:00.000Z', summary: '6', person: null, rowSpan: 1 },
room: 'b'
}, {
start: '2017-11-25T11:00:00.000Z',
end: '2017-11-25T12:00:00.000Z',
entry:
{ start: '2017-11-25T11:00:00.000Z', end: '2017-11-25T12:00:00.000Z', summary: '7', person: null, rowSpan: 1 },
room: 'b'
}]
})
t.equals(rendered, `
| | a | b |
| --- | --- | --- |
| 9:00-10:00 | x | ← |
| 10:00-11:00 | [Break] | [Break] |
| 11:00-12:00 | y | ← |
| 12:00-13:00 | y | 1 |
| 13:00-14:00 | ⤓ | [Break] |
| 14:00-15:00 | ⤓ | 2 |
| 15:00-16:00 | [Break] | [Break] |
| 16:00-17:00 | z | 3 |
| 17:00-18:00 | [Break] | 4 |
| 18:00-19:00 | z' | 5 |
| 19:00-20:00 | → | 6 |
| 20:00-21:00 | → | 7 |
`)
})