Files
Ichitux 2eff93e66a
Build & Push Docker Images / test-backend (push) Successful in 44s
Build & Push Docker Images / test-frontend (push) Successful in 52s
Build & Push Docker Images / build-backend (push) Failing after 34s
Build & Push Docker Images / build-frontend (push) Failing after 30s
More changes than expected. Mobile version improvements & PWA
2026-05-20 22:28:17 +02:00

81 lines
2.5 KiB
JavaScript

import { jest } from '@jest/globals'
jest.unstable_mockModule('../cima-service.js', () => ({
searchMedicines: jest.fn(async () => []),
getMedicineDetails: jest.fn(async () => null),
}))
jest.unstable_mockModule('../farmacias-webhook-import.js', () => ({
runFarmaciaWebhookImport: jest.fn(async () => ({})),
DEFAULT_FARMACIAS_WEBHOOK: '',
importPharmaciesFromRows: jest.fn(async () => ({})),
}))
jest.unstable_mockModule('../../API/index.js', () => ({
fetchPharmaciesExternal: jest.fn(async () => []),
}))
process.env.DATABASE_PATH = ':memory:'
process.env.NODE_ENV = 'test'
const { default: supertest } = await import('supertest')
const { app, initDatabase, db } = await import('../server.js')
const { default: bcrypt } = await import('bcrypt')
beforeAll(async () => {
await initDatabase()
const hash = await bcrypt.hash('testpass', 10)
await new Promise((resolve, reject) => {
db.run(
'INSERT INTO users (username, password_hash, is_admin) VALUES (?, ?, 1)',
['testadmin', hash],
(err) => (err ? reject(err) : resolve())
)
})
})
describe('Medicine search', () => {
test('GET /api/medicines/search with empty q returns []', async () => {
const res = await supertest(app).get('/api/medicines/search?q=')
expect(res.status).toBe(200)
expect(res.body).toEqual([])
})
test('GET /api/medicines/search with short q returns array', async () => {
const res = await supertest(app).get('/api/medicines/search?q=a')
expect(res.status).toBe(200)
expect(Array.isArray(res.body)).toBe(true)
})
})
describe('Authentication', () => {
test('POST /api/auth/login with wrong creds returns 401', async () => {
const res = await supertest(app)
.post('/api/auth/login')
.send({ username: 'nobody', password: 'wrong' })
expect(res.status).toBe(401)
})
})
describe('Admin routes', () => {
test('GET /api/admin/medicines without auth returns 401', async () => {
const res = await supertest(app).get('/api/admin/medicines')
expect(res.status).toBe(401)
})
test('POST /api/admin/pharmacies with valid auth returns 201', async () => {
const agent = supertest.agent(app)
const login = await agent
.post('/api/auth/login')
.send({ username: 'testadmin', password: 'testpass' })
expect(login.status).toBe(200)
const res = await agent.post('/api/admin/pharmacies').send({
name: 'Test Pharmacy',
address: 'Test Street 1',
})
expect(res.status).toBe(201)
expect(res.body).toMatchObject({ name: 'Test Pharmacy', address: 'Test Street 1' })
})
})