fix: await tests longer
This commit is contained in:
parent
fdd32f8474
commit
13daf31868
2 changed files with 25 additions and 17 deletions
2
.github/workflows/pull_request.yml
vendored
2
.github/workflows/pull_request.yml
vendored
|
|
@ -22,4 +22,4 @@ jobs:
|
||||||
run: npm ci
|
run: npm ci
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: npm test
|
run: npm test
|
||||||
timeout-minutes: 1
|
timeout-minutes: 5
|
||||||
|
|
@ -10,12 +10,15 @@ process.env.BASE_WEBHOOK_URL = 'http://localhost:3000/localCallbackExample'
|
||||||
const app = require('../src/app')
|
const app = require('../src/app')
|
||||||
jest.mock('qrcode-terminal')
|
jest.mock('qrcode-terminal')
|
||||||
|
|
||||||
|
jest.setTimeout(5 * 60 * 1000)
|
||||||
|
|
||||||
let server
|
let server
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
|
fs.rmSync(process.env.SESSIONS_PATH, { recursive: true, force: true })
|
||||||
server = app.listen(3000)
|
server = app.listen(3000)
|
||||||
})
|
})
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(() => {
|
||||||
if (fs.existsSync('./sessions_test/message_log.txt')) {
|
if (fs.existsSync('./sessions_test/message_log.txt')) {
|
||||||
fs.writeFileSync('./sessions_test/message_log.txt', '')
|
fs.writeFileSync('./sessions_test/message_log.txt', '')
|
||||||
}
|
}
|
||||||
|
|
@ -23,7 +26,7 @@ beforeEach(async () => {
|
||||||
|
|
||||||
afterAll(() => {
|
afterAll(() => {
|
||||||
server.close()
|
server.close()
|
||||||
fs.rmSync('./sessions_test', { recursive: true, force: true })
|
fs.rmSync(process.env.SESSIONS_PATH, { recursive: true, force: true })
|
||||||
})
|
})
|
||||||
|
|
||||||
// Define test cases
|
// Define test cases
|
||||||
|
|
@ -34,7 +37,7 @@ describe('API health checks', () => {
|
||||||
expect(response.body).toEqual({ message: 'pong', success: true })
|
expect(response.body).toEqual({ message: 'pong', success: true })
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should return a valid callback', async () => {
|
it('should return a valid callback status', async () => {
|
||||||
const response = await request(app).post('/localCallbackExample')
|
const response = await request(app).post('/localCallbackExample')
|
||||||
.set('x-api-key', 'test_api_key')
|
.set('x-api-key', 'test_api_key')
|
||||||
.send({ sessionId: '1', dataType: 'testDataType', data: 'testData' })
|
.send({ sessionId: '1', dataType: 'testDataType', data: 'testData' })
|
||||||
|
|
@ -70,7 +73,7 @@ describe('API Authentication Tests', () => {
|
||||||
expect(response2.body).toEqual({ success: true, message: 'Logged out successfully' })
|
expect(response2.body).toEqual({ success: true, message: 'Logged out successfully' })
|
||||||
|
|
||||||
expect(fs.existsSync('./sessions_test/session-1')).toBe(false)
|
expect(fs.existsSync('./sessions_test/session-1')).toBe(false)
|
||||||
}, 10000)
|
})
|
||||||
|
|
||||||
it('should setup and flush multiple client sessions', async () => {
|
it('should setup and flush multiple client sessions', async () => {
|
||||||
const response = await request(app).get('/session/start/2').set('x-api-key', 'test_api_key')
|
const response = await request(app).get('/session/start/2').set('x-api-key', 'test_api_key')
|
||||||
|
|
@ -89,7 +92,7 @@ describe('API Authentication Tests', () => {
|
||||||
|
|
||||||
expect(fs.existsSync('./sessions_test/session-2')).toBe(false)
|
expect(fs.existsSync('./sessions_test/session-2')).toBe(false)
|
||||||
expect(fs.existsSync('./sessions_test/session-3')).toBe(false)
|
expect(fs.existsSync('./sessions_test/session-3')).toBe(false)
|
||||||
}, 10000)
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('API Action Tests', () => {
|
describe('API Action Tests', () => {
|
||||||
|
|
@ -100,7 +103,7 @@ describe('API Action Tests', () => {
|
||||||
expect(fs.existsSync('./sessions_test/session-4')).toBe(true)
|
expect(fs.existsSync('./sessions_test/session-4')).toBe(true)
|
||||||
|
|
||||||
// Wait for message_log.txt to not be empty
|
// Wait for message_log.txt to not be empty
|
||||||
const result = await waitForFileNotToBeEmpty('./sessions_test/message_log.txt')
|
const result = await waitForFileNotToBeEmpty('./sessions_test/message_log.txt', 120_000, 1000)
|
||||||
.then(() => { return true })
|
.then(() => { return true })
|
||||||
.catch(() => { return false })
|
.catch(() => { return false })
|
||||||
expect(result).toBe(true)
|
expect(result).toBe(true)
|
||||||
|
|
@ -117,15 +120,16 @@ describe('API Action Tests', () => {
|
||||||
expect(response2.status).toBe(200)
|
expect(response2.status).toBe(200)
|
||||||
expect(response2.body).toEqual({ success: true, message: 'Logged out successfully' })
|
expect(response2.body).toEqual({ success: true, message: 'Logged out successfully' })
|
||||||
expect(fs.existsSync('./sessions_test/session-4')).toBe(false)
|
expect(fs.existsSync('./sessions_test/session-4')).toBe(false)
|
||||||
}, 15000)
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
// Function to wait for a specific item to be equal a specific value
|
// Function to wait for a specific item to be equal a specific value
|
||||||
const waitForFileNotToBeEmpty = (filePath, maxWaitTime = 10000, interval = 100) => {
|
const waitForFileNotToBeEmpty = (filePath, maxWaitTime = 10000, interval = 100) => {
|
||||||
const start = Date.now()
|
const start = Date.now()
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const checkObject = () => {
|
const checkObject = async () => {
|
||||||
const filecontent = fs.readFileSync(filePath, 'utf-8')
|
try {
|
||||||
|
const filecontent = await fs.promises.readFile(filePath, 'utf-8')
|
||||||
if (filecontent !== '') {
|
if (filecontent !== '') {
|
||||||
// Nested object exists, resolve the promise
|
// Nested object exists, resolve the promise
|
||||||
resolve()
|
resolve()
|
||||||
|
|
@ -137,6 +141,10 @@ const waitForFileNotToBeEmpty = (filePath, maxWaitTime = 10000, interval = 100)
|
||||||
// Nested object not yet created, continue waiting
|
// Nested object not yet created, continue waiting
|
||||||
setTimeout(checkObject, interval)
|
setTimeout(checkObject, interval)
|
||||||
}
|
}
|
||||||
|
} catch (ignore) {
|
||||||
|
// continue waiting
|
||||||
|
setTimeout(checkObject, interval)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
checkObject()
|
checkObject()
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue