Add backend unit/integration tests, Playwright e2e tests, README, cookie Secure fix
SonarQube Analysis / sonarqube (push) Successful in 4m20s
SonarQube Analysis / sonarqube (push) Successful in 4m20s
This commit is contained in:
+66
@@ -0,0 +1,66 @@
|
||||
import request from 'supertest';
|
||||
import app from '../../src/app';
|
||||
import { pool } from '../../src/db';
|
||||
import { resetDb, closeDb } from './setup/testDb';
|
||||
|
||||
beforeEach(async () => {
|
||||
await resetDb();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await pool.end();
|
||||
await closeDb();
|
||||
});
|
||||
|
||||
describe('GET /api/items', () => {
|
||||
it('returns an empty array when there are no items', async () => {
|
||||
const res = await request(app).get('/api/items');
|
||||
expect(res.status).toBe(200);
|
||||
expect(res.body).toEqual([]);
|
||||
});
|
||||
|
||||
it('returns items with an empty images array when none are attached', async () => {
|
||||
await pool.query(
|
||||
`INSERT INTO items (name, description, price_cents) VALUES ('Vintage Lamp', 'A one-of-a-kind lamp.', 4500)`
|
||||
);
|
||||
const res = await request(app).get('/api/items');
|
||||
expect(res.status).toBe(200);
|
||||
expect(res.body).toHaveLength(1);
|
||||
expect(res.body[0]).toMatchObject({
|
||||
name: 'Vintage Lamp',
|
||||
price_cents: 4500,
|
||||
status: 'available',
|
||||
images: []
|
||||
});
|
||||
});
|
||||
|
||||
it('returns 404 for a nonexistent item', async () => {
|
||||
const res = await request(app).get('/api/items/99999');
|
||||
expect(res.status).toBe(404);
|
||||
});
|
||||
});
|
||||
|
||||
describe('demo checkout', () => {
|
||||
it('marks an available item as sold', async () => {
|
||||
const { rows } = await pool.query(
|
||||
`INSERT INTO items (name, price_cents) VALUES ('Test Item', 1000) RETURNING id`
|
||||
);
|
||||
const itemId = rows[0].id;
|
||||
|
||||
const res = await request(app).post(`/api/checkout/demo/${itemId}/purchase`);
|
||||
expect(res.status).toBe(200);
|
||||
expect(res.body.status).toBe('sold');
|
||||
|
||||
const check = await request(app).get(`/api/items/${itemId}`);
|
||||
expect(check.body.status).toBe('sold');
|
||||
});
|
||||
|
||||
it('refuses to sell an item that is already sold', async () => {
|
||||
const { rows } = await pool.query(
|
||||
`INSERT INTO items (name, price_cents, status) VALUES ('Already Sold', 1000, 'sold') RETURNING id`
|
||||
);
|
||||
const itemId = rows[0].id;
|
||||
const res = await request(app).post(`/api/checkout/demo/${itemId}/purchase`);
|
||||
expect(res.status).toBe(409);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user