bridge-node-server/node_server/schemas/RegistrationCommands.spec.js
Martin Donnelly 57bd6c8e6a init
2018-06-24 21:15:03 +01:00

1125 lines
33 KiB
JavaScript

/**
* @fileOverview Unit tests for the schemas for the Registration commands
* @see {@url http://10.0.10.242/w/tricore_architecture/server_interface/registration_commands/}
*/
'use strict';
var _ = require('lodash');
var testHelper = require('./testHelpers.js');
/**
* Test data
*/
const VALID_SESSION_TOKEN = '01234567890abcdefghijklmnopqrstuvwxyzABCDE';
const VALID_DEVICE_TOKEN = '01234567890abcdefghijklmnopqrstuvwxyzABCDE';
const VALID_SHA256 = '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef';
const VALID_UUID = '0123456789abcdef01234567';
const VALID_NUMBER = '+4407700000000';
/**
* Test suite that defines the test command body and expected outcomes for
* a range of different bodies across different commands.
*/
const TEST_SUITE = {
AddDevice: [
{
name: '',
valid: true,
data: {
ClientName: 'a@example.com',
Password: VALID_SHA256,
DeviceNumber: VALID_NUMBER,
DeviceUuid: _.repeat('a', 30),
DeviceHardware: 'Chai test',
DeviceSoftware: 'Chai test',
Latitude: 0,
Longitude: 0,
Mode: 'Test'
}
},
{
name: 'no optional, and pseudo-optional (null, "", etc.) values',
valid: true,
data: {
ClientName: 'a@example.com',
Password: VALID_SHA256,
DeviceNumber: VALID_NUMBER,
DeviceUuid: _.repeat('a', 150),
DeviceHardware: '',
DeviceSoftware: '',
Latitude: null,
Longitude: null
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 8,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'Untrimmed device ID',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceUuid',
keyword: 'ensureTrim'
}
]
},
data: {
ClientName: 'a@example.com',
Password: VALID_SHA256,
DeviceNumber: VALID_NUMBER,
DeviceUuid: ' not trimmed' + _.repeat('a', 30) + ' ',
DeviceHardware: 'Chai test',
DeviceSoftware: 'Chai test',
Latitude: 0,
Longitude: 0,
Mode: 'Test'
}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.ClientName',
keyword: 'pattern'
},
{
dataPath: '.Password',
keyword: 'minLength'
},
{
dataPath: '.Password',
keyword: 'pattern'
},
{
dataPath: '.DeviceNumber',
keyword: 'pattern'
},
{
dataPath: '.DeviceUuid',
keyword: 'minLength'
},
{
dataPath: '.DeviceHardware',
keyword: 'maxLength'
},
{
dataPath: '.DeviceSoftware',
keyword: 'maxLength'
},
{
dataPath: '.Latitude',
keyword: 'maximum'
},
{
dataPath: '.Longitude',
keyword: 'maximum'
},
{
dataPath: '.Mode',
keyword: 'const'
}
]
},
data: {
ClientName: 'John Smith',
Password: 'Not a SHA 256',
DeviceNumber: '07700000000',
DeviceUuid: _.repeat('a', 29),
DeviceHardware: _.repeat('a', 76),
DeviceSoftware: _.repeat('a', 76),
Latitude: 91,
Longitude: 181,
Mode: 'test'
}
}
],
DeleteDevice: [
{
name: '',
valid: true,
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN,
Password: VALID_SHA256,
DeviceIndex: VALID_UUID
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 4,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceToken',
keyword: 'minLength'
},
{
dataPath: '.DeviceToken',
keyword: 'pattern'
},
{
dataPath: '.SessionToken',
keyword: 'minLength'
},
{
dataPath: '.SessionToken',
keyword: 'pattern'
},
{
dataPath: '.Password',
keyword: 'minLength'
},
{
dataPath: '.Password',
keyword: 'pattern'
},
{
dataPath: '.DeviceIndex',
keyword: 'minLength'
},
{
dataPath: '.DeviceIndex',
keyword: 'pattern'
}
]
},
data: {
DeviceToken: 'Not a device token',
SessionToken: 'Not a session token',
Password: 'Not a sha 256',
DeviceIndex: 'Not a UUID'
}
}
],
GetClientDetails: [
{
name: '',
valid: true,
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 2,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceToken',
keyword: 'minLength'
},
{
dataPath: '.DeviceToken',
keyword: 'pattern'
},
{
dataPath: '.SessionToken',
keyword: 'minLength'
},
{
dataPath: '.SessionToken',
keyword: 'pattern'
}
]
},
data: {
DeviceToken: 'Not a device token',
SessionToken: 'Not a session token'
}
}
],
ListDevices: [
{
name: '',
valid: true,
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 2,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceToken',
keyword: 'minLength'
},
{
dataPath: '.DeviceToken',
keyword: 'pattern'
},
{
dataPath: '.SessionToken',
keyword: 'minLength'
},
{
dataPath: '.SessionToken',
keyword: 'pattern'
}
]
},
data: {
DeviceToken: 'Not a device token',
SessionToken: 'Not a session token'
}
}
],
Register1: [
{
name: '',
valid: true,
data: {
Method: 'Bridge',
ClientName: 'a@example.com',
Password: VALID_SHA256,
DeviceNumber: VALID_NUMBER,
OperatorName: 'Comcarde',
DeviceUuid: _.repeat('a', 30),
DeviceHardware: 'Chai test',
DeviceSoftware: 'Chai test',
Mode: 'Test'
}
},
{
name: 'no optional, and pseudo-optional (null, "", etc.) values',
valid: true,
data: {
Method: 'Bridge',
ClientName: 'a@example.com',
Password: VALID_SHA256,
DeviceNumber: VALID_NUMBER,
OperatorName: 'Comcarde',
DeviceUuid: _.repeat('a', 150),
DeviceHardware: '',
DeviceSoftware: ''
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 8,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.Method',
keyword: 'const'
},
{
dataPath: '.ClientName',
keyword: 'pattern'
},
{
dataPath: '.Password',
keyword: 'minLength'
},
{
dataPath: '.Password',
keyword: 'pattern'
},
{
dataPath: '.DeviceNumber',
keyword: 'pattern'
},
{
dataPath: '.OperatorName',
keyword: 'const'
},
{
dataPath: '.DeviceUuid',
keyword: 'minLength'
},
{
dataPath: '.DeviceHardware',
keyword: 'maxLength'
},
{
dataPath: '.DeviceSoftware',
keyword: 'maxLength'
},
{
dataPath: '.Mode',
keyword: 'const'
}
]
},
data: {
Method: 'Google',
ClientName: 'John Smith',
Password: 'Not a SHA 256',
DeviceNumber: '07700000000',
OperatorName: 'A bank',
DeviceUuid: _.repeat('a', 29),
DeviceHardware: _.repeat('a', 76),
DeviceSoftware: _.repeat('a', 76),
Mode: 'Normal'
}
}
],
Register2: [
{
name: '',
valid: true,
data: {
DeviceNumber: VALID_NUMBER,
DeviceToken: VALID_DEVICE_TOKEN,
RegistrationToken: '123456'
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 3,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceNumber',
keyword: 'pattern'
},
{
dataPath: '.DeviceToken',
keyword: 'minLength'
},
{
dataPath: '.DeviceToken',
keyword: 'pattern'
},
{
dataPath: '.RegistrationToken',
keyword: 'pattern'
}
]
},
data: {
DeviceNumber: 'Not a device number',
DeviceToken: 'Not a device token',
RegistrationToken: '123abc'
}
}
],
Register3: [
{
name: '',
valid: true,
data: {
ClientName: 'a@example.com',
DeviceToken: VALID_DEVICE_TOKEN,
Longitude: 0,
Latitude: 0,
DeviceAuthorisation: VALID_SHA256
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 5,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.ClientName',
keyword: 'maxLength'
},
{
dataPath: '.DeviceToken',
keyword: 'minLength'
},
{
dataPath: '.DeviceToken',
keyword: 'pattern'
},
{
dataPath: '.Latitude',
keyword: 'maximum'
},
{
dataPath: '.Longitude',
keyword: 'minimum'
},
{
dataPath: '.DeviceAuthorisation',
keyword: 'minLength'
},
{
dataPath: '.DeviceAuthorisation',
keyword: 'pattern'
}
]
},
data: {
ClientName: _.repeat('a', 53) + '@example.com',
DeviceToken: 'Not a device token',
Longitude: -181,
Latitude: 181,
DeviceAuthorisation: 'Not a sha 256'
}
}
],
Register4: [
{
name: '',
valid: true,
data: {
DeviceNumber: VALID_NUMBER,
DeviceUuid: _.repeat('a', 150),
DeviceToken: VALID_DEVICE_TOKEN
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 3,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceNumber',
keyword: 'type'
},
{
dataPath: '.DeviceUuid',
keyword: 'maxLength'
},
{
dataPath: '.DeviceToken',
keyword: 'minLength'
}
]
},
data: {
DeviceNumber: 447700000000,
DeviceUuid: _.repeat('a', 151),
DeviceToken: ''
}
}
],
Register6: [
{
name: '',
valid: true,
data: {
ClientName: 'a@example.com',
DeviceNumber: VALID_NUMBER,
DeviceUuid: _.repeat('a', 150)
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 3,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.ClientName',
keyword: 'minLength'
},
{
dataPath: '.ClientName',
keyword: 'pattern'
},
{
dataPath: '.DeviceNumber',
keyword: 'pattern'
},
{
dataPath: '.DeviceUuid',
keyword: 'minLength'
}
]
},
data: {
ClientName: '',
DeviceNumber: '447700000000',
DeviceUuid: _.repeat('a', 29)
}
}
],
'Register7': [
{
name: '',
valid: true,
data: {}
},
{
name: 'unexpected param',
valid: false,
expect: {
missingRequiredCount: 0,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
}
],
'Register7.params': [
{
name: '',
valid: true,
data: {
Command: 'Register7',
ClientName: 'a@example.com',
DeviceNumber: VALID_NUMBER,
Mode: 'ForceDelete'
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 3,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.Command',
keyword: 'const'
},
{
dataPath: '.ClientName',
keyword: 'minLength'
},
{
dataPath: '.ClientName',
keyword: 'pattern'
},
{
dataPath: '.DeviceNumber',
keyword: 'pattern'
},
{
dataPath: '.Mode',
keyword: 'const'
}
]
},
data: {
Command: 'Not register 7!',
ClientName: '',
DeviceNumber: '447700000000',
Mode: 'Test'
}
}
],
Register8: [
{
name: '',
valid: true,
data: {
ClientName: 'a@example.com',
DeviceNumber: VALID_NUMBER,
Mode: 'ForceDelete'
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 2,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.ClientName',
keyword: 'minLength'
},
{
dataPath: '.ClientName',
keyword: 'pattern'
},
{
dataPath: '.DeviceNumber',
keyword: 'pattern'
},
{
dataPath: '.Mode',
keyword: 'const'
}
]
},
data: {
ClientName: '',
DeviceNumber: '447700000000',
Mode: 'Test'
}
}
],
ResumeDevice: [
{
name: '',
valid: true,
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN,
Password: VALID_SHA256,
DeviceIndex: VALID_UUID
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 4,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceToken',
keyword: 'minLength'
},
{
dataPath: '.DeviceToken',
keyword: 'pattern'
},
{
dataPath: '.SessionToken',
keyword: 'minLength'
},
{
dataPath: '.SessionToken',
keyword: 'pattern'
},
{
dataPath: '.Password',
keyword: 'minLength'
},
{
dataPath: '.Password',
keyword: 'pattern'
},
{
dataPath: '.DeviceIndex',
keyword: 'minLength'
},
{
dataPath: '.DeviceIndex',
keyword: 'pattern'
}
]
},
data: {
DeviceToken: 'Not a device token',
SessionToken: 'Not a session token',
Password: 'Not a sha 256',
DeviceIndex: 'Not a UUID'
}
}
],
SetClientDetails: [
{
name: '',
valid: true,
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN,
Title: 'Mr',
FirstName: 'John',
MiddleNames: 'James Michael',
LastName: 'Smith',
DateOfBirth: '1970-01-01',
ResidentialAddressID: VALID_UUID,
Gender: 'M'
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 8,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceToken',
keyword: 'minLength'
},
{
dataPath: '.DeviceToken',
keyword: 'pattern'
},
{
dataPath: '.SessionToken',
keyword: 'minLength'
},
{
dataPath: '.SessionToken',
keyword: 'pattern'
},
{
dataPath: '.Title',
keyword: 'minLength'
},
{
dataPath: '.FirstName',
keyword: 'maxLength'
},
{
dataPath: '.MiddleNames',
keyword: 'maxLength'
},
{
dataPath: '.LastName',
keyword: 'minLength'
},
{
dataPath: '.DateOfBirth',
keyword: 'format'
},
{
dataPath: '.ResidentialAddressID',
keyword: 'minLength'
},
{
dataPath: '.ResidentialAddressID',
keyword: 'pattern'
},
{
dataPath: '.Gender',
keyword: 'enum'
}
]
},
data: {
DeviceToken: 'Not a device token',
SessionToken: 'Not a session token',
Title: 'M',
FirstName: _.repeat('a', 51),
MiddleNames: _.repeat('a', 51),
LastName: _.repeat('a', 1),
DateOfBirth: '1970-13-32',
ResidentialAddressID: 'NOT A UUID',
Gender: 'N'
}
},
{
name: 'different mistakes in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.Title',
keyword: 'maxLength'
},
{
dataPath: '.FirstName',
keyword: 'minLength'
},
{
dataPath: '.LastName',
keyword: 'maxLength'
},
{
dataPath: '.DateOfBirth',
keyword: 'pattern'
},
{
dataPath: '.DateOfBirth',
keyword: 'format'
},
{
dataPath: '.ResidentialAddressID',
keyword: 'maxLength'
},
{
dataPath: '.ResidentialAddressID',
keyword: 'pattern'
},
{
dataPath: '.Gender',
keyword: 'enum'
}
]
},
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN,
Title: _.repeat('M', 21),
FirstName: _.repeat('a', 1),
MiddleNames: '',
LastName: _.repeat('a', 51),
DateOfBirth: '1st Jan, 1970',
ResidentialAddressID: _.repeat('a', 25),
Gender: 'MM'
}
},
{
name: 'untrimmed name params',
valid: false,
expect: {
errors: [
{
dataPath: '.Title',
keyword: 'ensureTrim'
},
{
dataPath: '.FirstName',
keyword: 'ensureTrim'
},
{
dataPath: '.MiddleNames',
keyword: 'ensureTrim'
},
{
dataPath: '.LastName',
keyword: 'ensureTrim'
}
]
},
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN,
Title: ' Mr ',
FirstName: ' Un',
MiddleNames: 'Trimmed ',
LastName: ' Example ',
DateOfBirth: '1970-01-01',
ResidentialAddressID: VALID_UUID,
Gender: 'F'
}
}
],
SetDeviceName: [
{
name: '',
valid: true,
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN,
DeviceName: 'A phone',
DeviceIndex: VALID_UUID
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 4,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceName',
keyword: 'ensureTrim'
},
{
dataPath: '.DeviceIndex',
keyword: 'minLength'
},
{
dataPath: '.DeviceIndex',
keyword: 'pattern'
}
]
},
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN,
DeviceName: ' Oops ',
DeviceIndex: 'Not a UUID'
}
},
{
name: 'name too short',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceName',
keyword: 'minLength'
}
]
},
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN,
DeviceName: 'A',
DeviceIndex: VALID_UUID
}
},
{
name: 'name too long',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceName',
keyword: 'maxLength'
}
]
},
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN,
DeviceName: _.repeat('a', 76),
DeviceIndex: VALID_UUID
}
}
],
SuspendDevice: [
{
name: '',
valid: true,
data: {
DeviceToken: VALID_DEVICE_TOKEN,
SessionToken: VALID_SESSION_TOKEN,
DeviceIndex: VALID_UUID
}
},
{
name: 'less than required params',
valid: false,
expect: {
missingRequiredCount: 3,
additionalPropsCount: 1
},
data: {invalidAdditionalProp: 'a'}
},
{
name: 'mistake in every param',
valid: false,
expect: {
errors: [
{
dataPath: '.DeviceToken',
keyword: 'minLength'
},
{
dataPath: '.DeviceToken',
keyword: 'pattern'
},
{
dataPath: '.SessionToken',
keyword: 'minLength'
},
{
dataPath: '.SessionToken',
keyword: 'pattern'
},
{
dataPath: '.DeviceIndex',
keyword: 'minLength'
},
{
dataPath: '.DeviceIndex',
keyword: 'pattern'
}
]
},
data: {
DeviceToken: 'Not a device token',
SessionToken: 'Not a session token',
DeviceIndex: 'Not a UUID'
}
}
]
};
/**
* Run the test suite through the test runner
*/
testHelper.runTestSuite('Schemas: Registration Commands', TEST_SUITE);