259 lines
4.7 KiB
JavaScript
259 lines
4.7 KiB
JavaScript
|
var test = require('ava')
|
||
|
var AssertionError = require('assert').AssertionError
|
||
|
var validate = require('./')
|
||
|
|
||
|
test('requires "anonymousId" to be a string or number', t => {
|
||
|
const event = {
|
||
|
type: 'track',
|
||
|
anonymousId: { foo: 'bar' }
|
||
|
}
|
||
|
t.throws(() => {
|
||
|
validate(event)
|
||
|
}, '"anonymousId" must be a string or number.')
|
||
|
})
|
||
|
|
||
|
test('requires "category" to be a string', t => {
|
||
|
const event = {
|
||
|
type: 'track',
|
||
|
category: true
|
||
|
}
|
||
|
t.throws(() => {
|
||
|
validate(event)
|
||
|
}, '"category" must be a string.')
|
||
|
})
|
||
|
|
||
|
test('requires "integrations" to be an object', t => {
|
||
|
const event = {
|
||
|
type: 'track',
|
||
|
integrations: true
|
||
|
}
|
||
|
t.throws(() => {
|
||
|
validate(event)
|
||
|
}, '"integrations" must be an object.')
|
||
|
})
|
||
|
|
||
|
test('requires an event type', t => {
|
||
|
t.throws(() => {
|
||
|
validate({})
|
||
|
}, AssertionError)
|
||
|
|
||
|
t.throws(() => {
|
||
|
validate({ type: '' }, null)
|
||
|
}, AssertionError)
|
||
|
})
|
||
|
|
||
|
test('requires a valid event type', t => {
|
||
|
t.throws(() => {
|
||
|
validate({ type: 'banana' })
|
||
|
}, 'Invalid event type: "banana"')
|
||
|
})
|
||
|
|
||
|
test('requires anonymousId or userId on track events', t => {
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'track',
|
||
|
event: 'Did Something'
|
||
|
})
|
||
|
}, 'You must pass either an "anonymousId" or a "userId".')
|
||
|
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'track',
|
||
|
event: 'Did Something',
|
||
|
fooId: 'banana'
|
||
|
})
|
||
|
}, 'You must pass either an "anonymousId" or a "userId".')
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
event: 'Did Something',
|
||
|
anonymousId: 'banana'
|
||
|
}, 'track')
|
||
|
})
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'track',
|
||
|
event: 'Did Something',
|
||
|
userId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('requires event on track events', t => {
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'track',
|
||
|
userId: 'banana'
|
||
|
})
|
||
|
}, 'You must pass an "event".')
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'track',
|
||
|
event: 'Did Something',
|
||
|
userId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('requires anonymousId or userId on group events', t => {
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'group',
|
||
|
groupId: 'foo'
|
||
|
})
|
||
|
}, 'You must pass either an "anonymousId" or a "userId".')
|
||
|
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'group',
|
||
|
groupId: 'foo',
|
||
|
fooId: 'banana'
|
||
|
})
|
||
|
}, 'You must pass either an "anonymousId" or a "userId".')
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'group',
|
||
|
groupId: 'foo',
|
||
|
anonymousId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'group',
|
||
|
groupId: 'foo',
|
||
|
userId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('requires groupId on group events', t => {
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'group',
|
||
|
userId: 'banana'
|
||
|
})
|
||
|
}, 'You must pass a "groupId".')
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'group',
|
||
|
groupId: 'foo',
|
||
|
userId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('requires anonymousId or userId on identify events', t => {
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'identify'
|
||
|
})
|
||
|
}, 'You must pass either an "anonymousId" or a "userId".')
|
||
|
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'identify',
|
||
|
fooId: 'banana'
|
||
|
})
|
||
|
}, 'You must pass either an "anonymousId" or a "userId".')
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'identify',
|
||
|
anonymousId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'identify',
|
||
|
userId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('requires anonymousId or userId on page events', t => {
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'page'
|
||
|
})
|
||
|
}, 'You must pass either an "anonymousId" or a "userId".')
|
||
|
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'page',
|
||
|
fooId: 'banana'
|
||
|
})
|
||
|
}, 'You must pass either an "anonymousId" or a "userId".')
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'page',
|
||
|
anonymousId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'page',
|
||
|
userId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('requires anonymousId or userId on screen events', t => {
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'screen'
|
||
|
})
|
||
|
}, 'You must pass either an "anonymousId" or a "userId".')
|
||
|
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'screen',
|
||
|
fooId: 'banana'
|
||
|
})
|
||
|
}, 'You must pass either an "anonymousId" or a "userId".')
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'screen',
|
||
|
anonymousId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'screen',
|
||
|
userId: 'banana'
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('requires userId on alias events', t => {
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'alias'
|
||
|
})
|
||
|
}, 'You must pass a "userId".')
|
||
|
|
||
|
t.throws(() => {
|
||
|
validate({
|
||
|
type: 'alias',
|
||
|
fooId: 'banana'
|
||
|
})
|
||
|
}, 'You must pass a "userId".')
|
||
|
|
||
|
t.notThrows(() => {
|
||
|
validate({
|
||
|
type: 'alias',
|
||
|
userId: 'banana',
|
||
|
previousId: 'apple'
|
||
|
})
|
||
|
})
|
||
|
})
|