build(deps-dev): apply updates
[poolifier.git] / tests / worker / thread-worker.test.mjs
CommitLineData
a074ffee 1import { expect } from 'expect'
bb3d0b23 2import { restore, stub } from 'sinon'
ded253e2 3
d35e5717
JB
4import { ThreadWorker } from '../../lib/index.cjs'
5import { DEFAULT_TASK_NAME } from '../../lib/utils.cjs'
fd027a65 6
e1ffb94f 7describe('Thread worker test suite', () => {
bb3d0b23
JB
8 afterEach(() => {
9 restore()
10 })
11
394676d1
JB
12 it('Verify worker properties value after initialization', () => {
13 const worker = new ThreadWorker(() => {})
14 expect(worker.isMain).toBe(true)
15 expect(worker.mainWorker).toBe(null)
16 expect(worker.taskFunctions).toBeInstanceOf(Map)
17 expect(worker.taskFunctions.size).toBe(2)
18 })
19
f80125ca
JB
20 it('Verify that sync kill handler is called when worker is killed', () => {
21 const worker = new ThreadWorker(() => {}, {
3a502712 22 killHandler: stub().returns(),
f80125ca
JB
23 })
24 worker.isMain = false
25 worker.port = {
26 postMessage: stub().returns(),
27 unref: stub().returns(),
3a502712 28 close: stub().returns(),
f80125ca
JB
29 }
30 worker.handleKillMessage()
31 expect(worker.port.postMessage.calledOnce).toBe(true)
32 expect(worker.port.unref.calledOnce).toBe(true)
33 expect(worker.port.close.calledOnce).toBe(true)
34 expect(worker.opts.killHandler.calledOnce).toBe(true)
35 })
36
37 it('Verify that removeTaskFunction() is working', () => {
38 const fn1 = () => {
39 return 1
40 }
41 const fn2 = () => {
42 return 2
43 }
44 const worker = new ThreadWorker({ fn1, fn2 })
5eb72b9e 45 worker.port = {
3a502712 46 postMessage: stub().returns(),
5eb72b9e 47 }
f80125ca
JB
48 expect(worker.removeTaskFunction(0, fn1)).toStrictEqual({
49 status: false,
3a502712 50 error: new TypeError('name parameter is not a string'),
f80125ca
JB
51 })
52 expect(worker.removeTaskFunction('', fn1)).toStrictEqual({
53 status: false,
3a502712 54 error: new TypeError('name parameter is an empty string'),
f80125ca 55 })
915040cc 56 expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual({
3a502712 57 taskFunction: expect.any(Function),
915040cc
JB
58 })
59 expect(worker.taskFunctions.get('fn1')).toStrictEqual({
3a502712 60 taskFunction: expect.any(Function),
915040cc
JB
61 })
62 expect(worker.taskFunctions.get('fn2')).toStrictEqual({
3a502712 63 taskFunction: expect.any(Function),
915040cc 64 })
f80125ca
JB
65 expect(worker.taskFunctions.size).toBe(3)
66 expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual(
67 worker.taskFunctions.get('fn1')
68 )
69 expect(worker.removeTaskFunction(DEFAULT_TASK_NAME)).toStrictEqual({
70 status: false,
71 error: new Error(
72 'Cannot remove the task function with the default reserved name'
3a502712 73 ),
f80125ca
JB
74 })
75 expect(worker.removeTaskFunction('fn1')).toStrictEqual({
76 status: false,
77 error: new Error(
78 'Cannot remove the task function used as the default task function'
3a502712 79 ),
f80125ca
JB
80 })
81 worker.removeTaskFunction('fn2')
915040cc 82 expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual({
3a502712 83 taskFunction: expect.any(Function),
915040cc
JB
84 })
85 expect(worker.taskFunctions.get('fn1')).toStrictEqual({
3a502712 86 taskFunction: expect.any(Function),
915040cc 87 })
f80125ca
JB
88 expect(worker.taskFunctions.get('fn2')).toBeUndefined()
89 expect(worker.taskFunctions.size).toBe(2)
90 expect(worker.port.postMessage.calledOnce).toBe(true)
91 })
92
2431bdb4
JB
93 it('Verify that handleError() method is working properly', () => {
94 const error = new Error('Error as an error')
95 const worker = new ThreadWorker(() => {})
18ecc6c5 96 expect(worker.handleError(error)).toBeInstanceOf(Error)
2431bdb4
JB
97 expect(worker.handleError(error)).toStrictEqual(error)
98 const errorMessage = 'Error as a string'
99 expect(worker.handleError(errorMessage)).toStrictEqual(errorMessage)
100 })
101
5eb72b9e
JB
102 it('Verify that sendToMainWorker() method invokes the port property postMessage() method', () => {
103 const worker = new ThreadWorker(() => {})
104 worker.port = { postMessage: stub().returns() }
74a2a194 105 worker.sendToMainWorker({ ok: 1 })
bb3d0b23 106 expect(worker.port.postMessage.calledOnce).toBe(true)
74a2a194 107 })
fd027a65 108})