fix(tracker): fix compression tests breaking workflow action

This commit is contained in:
nick-delirium 2023-05-31 13:44:40 +02:00
parent 4e3332304e
commit b94eaa2a26

View file

@ -0,0 +1,95 @@
import BatchWriter from './BatchWriter'
import * as Messages from '../common/messages.gen.js'
import { describe, expect, test, jest, beforeEach, afterEach } from '@jest/globals'
import Message from '../common/messages.gen.js'
describe('BatchWriter', () => {
let onBatchMock: (b: Uint8Array) => void
let batchWriter: BatchWriter
beforeEach(() => {
onBatchMock = jest.fn()
batchWriter = new BatchWriter(1, 123456789, 'example.com', onBatchMock)
})
afterEach(() => {
jest.clearAllMocks()
})
test('constructor initializes BatchWriter instance', () => {
expect(batchWriter['pageNo']).toBe(1)
expect(batchWriter['timestamp']).toBe(123456789)
expect(batchWriter['url']).toBe('example.com')
expect(batchWriter['onBatch']).toBe(onBatchMock)
expect(batchWriter['nextIndex']).toBe(0)
expect(batchWriter['beaconSize']).toBe(200000)
expect(batchWriter['encoder']).toBeDefined()
expect(batchWriter['strDict']).toBeDefined()
expect(batchWriter['sizeBuffer']).toHaveLength(3)
expect(batchWriter['isEmpty']).toBe(true)
})
test('writeType writes the type of the message', () => {
const message = [Messages.Type.BatchMetadata, 1, 2, 3, 4, 'example.com']
const result = batchWriter['writeType'](message as Message)
expect(result).toBe(true)
})
test('writeFields encodes the message fields', () => {
const message = [Messages.Type.BatchMetadata, 1, 2, 3, 4, 'example.com']
const result = batchWriter['writeFields'](message as Message)
expect(result).toBe(true)
})
test('writeSizeAt writes the size at the given offset', () => {
batchWriter['writeSizeAt'](100, 0)
expect(batchWriter['sizeBuffer']).toEqual(new Uint8Array([100, 0, 0]))
expect(batchWriter['encoder']['data'].slice(0, 3)).toEqual(new Uint8Array([100, 0, 0]))
})
test('prepare prepares the BatchWriter for writing', () => {
// TODO
})
test('writeWithSize writes the message with its size', () => {
const message = [Messages.Type.BatchMetadata, 1, 2, 3, 4, 'example.com']
const result = batchWriter['writeWithSize'](message as Message)
expect(result).toBe(true)
})
test('setBeaconSizeLimit sets the beacon size limit', () => {
batchWriter['setBeaconSizeLimit'](500000)
expect(batchWriter['beaconSizeLimit']).toBe(500000)
})
test('Set note attribute tries to use dictionary', () => {
const spyOnStrGetKey = jest.spyOn(batchWriter['strDict'], 'getKey')
// @ts-ignore
batchWriter['writeMessage']([Messages.Type.SetNodeAttribute, 1, 'name', 'value'])
expect(spyOnStrGetKey).toHaveBeenCalledTimes(2)
expect(spyOnStrGetKey).toHaveBeenCalledWith('name')
expect(spyOnStrGetKey).toHaveBeenCalledWith('value')
})
test('writeMessage writes the given message', () => {
const message = [Messages.Type.Timestamp, 987654321]
// @ts-ignore
batchWriter['writeWithSize'] = jest.fn().mockReturnValue(true)
batchWriter['writeMessage'](message as Message)
expect(batchWriter['writeWithSize']).toHaveBeenCalledWith(message)
})
test('finaliseBatch flushes the encoder and calls onBatch', () => {
const flushSpy = jest.spyOn(batchWriter['encoder'], 'flush')
batchWriter['isEmpty'] = false
batchWriter['finaliseBatch']()
expect(flushSpy).toHaveBeenCalled()
expect(onBatchMock).toHaveBeenCalled()
})
test('clean resets the encoder', () => {
const cleanSpy = jest.spyOn(batchWriter['encoder'], 'reset')
batchWriter['clean']()
expect(cleanSpy).toHaveBeenCalled()
})
})