openrowingmonitor/app/ble/common/AdvertisingDataBuilder.test.js

118 lines
3.4 KiB
JavaScript

'use strict'
/*
Open Rowing Monitor, https://github.com/laberning/openrowingmonitor
*/
import { test } from 'uvu'
import * as assert from 'uvu/assert'
import log from 'loglevel'
import AdvertisingDataBuilder from './AdvertisingDataBuilder.js'
log.setLevel(log.levels.SILENT)
test('empty constructor should create default values', () => {
// arrange
const advertisementDataBuilder = new AdvertisingDataBuilder()
// act
// assert
assert.type(advertisementDataBuilder.appearance, 'undefined')
assert.equal(advertisementDataBuilder.longName, 'OpenRowingMonitor')
assert.equal(advertisementDataBuilder.shortName, 'ORM', 'if longName is not defined short name should be ORM')
assert.equal(advertisementDataBuilder.serviceUuids.length, 0)
})
test('should use long name as short name if latter is not set', () => {
// arrange
const advertisementDataBuilder = new AdvertisingDataBuilder([], undefined, 'testLongName')
// act
// assert
assert.equal(advertisementDataBuilder.shortName, advertisementDataBuilder.longName)
})
test('should be able to set long name', () => {
// arrange
const advertisementDataBuilder = new AdvertisingDataBuilder()
const name = 'longNameTest'
// act
advertisementDataBuilder.setLongName(name)
// assert
assert.equal(advertisementDataBuilder.longName, name)
})
test('should be able to set short name', () => {
// arrange
const advertisementDataBuilder = new AdvertisingDataBuilder()
const name = 'shortNameTest'
// act
advertisementDataBuilder.setShortName(name)
// assert
assert.equal(advertisementDataBuilder.shortName, name)
})
test('should be able to set appearance field', () => {
// arrange
const advertisementDataBuilder = new AdvertisingDataBuilder()
const appearance = 1157
// act
advertisementDataBuilder.setAppearance(appearance)
// assert
assert.equal(advertisementDataBuilder.appearance, appearance)
})
test('should be able to add service UUID', () => {
// arrange
const advertisementDataBuilder = new AdvertisingDataBuilder()
// act
advertisementDataBuilder.addServiceUuid('1800')
advertisementDataBuilder.addServiceUuid('1801')
// assert
assert.equal(advertisementDataBuilder.serviceUuids.length, 2)
})
test('should add long name to scan data', () => {
// arrange
const name = 'testLongName'
const advertisementDataBuilder = new AdvertisingDataBuilder(['1800'], undefined, name, 'short')
// act
const scanData = advertisementDataBuilder.buildScanData()
// assert
assert.equal(scanData.length, name.length + 2)
})
test('should produce correct byte array for advertising data', () => {
// arrange
const advertisementDataBuilder = new AdvertisingDataBuilder(['1816'], 1156, 'ORM')
// act
const advertisementData = advertisementDataBuilder.buildAppearanceData()
// assert
assert.equal([...advertisementData], [2, 1, 6, 3, 25, 132, 4, 4, 8, 79, 82, 77, 3, 3, 22, 24]
)
})
test('should trim short name if advertising data is longer than 31 byte', () => {
// arrange
const advertisementDataBuilder = new AdvertisingDataBuilder(['1816'], 1156, 'OpenRowingMonitor CSC')
// act
const advertisementData = advertisementDataBuilder.buildAppearanceData()
// assert
assert.equal(advertisementData.length, 31)
assert.equal([...advertisementData], [2, 1, 6, 3, 25, 132, 4, 19, 8, 79, 112, 101, 110, 82, 111, 119, 105, 110, 103, 77, 111, 110, 105, 116, 111, 114, 32, 3, 3, 22, 24])
assert.match(advertisementData.toString(), /OpenRowingMonitor/)
})
test.run()