added products_spec handler tests

This commit is contained in:
Vic 2022-05-23 01:15:10 +02:00
parent 372a5ee059
commit a04f395db9
9 changed files with 103 additions and 30 deletions

View File

@ -14,7 +14,7 @@ These are the notes from a meeting with the frontend developer that describe wha
#### Users
- Index [token required]
- Show [token required]
- Create N[token required]
- Create [token required]
#### Orders
- Current Order by user (args: user id)[token required]

View File

@ -1,7 +1,8 @@
{
"spec_dir": "src/tests",
"spec_files": [
"**/*_spec.ts"
"models/*_[sS]pec.ts",
"handlers/*_[sS]pec.ts"
],
"helpers": [
"helpers/**/*.js"

View File

@ -5,8 +5,8 @@ import { verifyAuthToken } from './utils'
const orderRoutes = (app: express.Application) => {
app.get('/orders', index)
app.get('/orders/:id', read)
app.post('/orders', create)
app.post('/orders/:id/products', addProduct)
app.post('/orders', verifyAuthToken, create)
app.post('/orders/:id/products', verifyAuthToken, addProduct)
}
const store = new OrderStore()
@ -36,9 +36,11 @@ const create = async (req: Request, res: Response) => {
try {
const orderInfo: Order = {
status: req.body.status,
userId: req.body.userId
userId: parseInt(req.body.userId)
}
console.log('orderInfo', orderInfo)
const newOrder = await store.create(orderInfo)
res.json(newOrder)
} catch (err) {
@ -50,10 +52,11 @@ const create = async (req: Request, res: Response) => {
const addProduct = async (req: Request, res: Response) => {
try {
const orderProductInfo: OrderProduct = {
quantity: parseInt(req.body.quantity),
orderId: parseInt(req.params.id),
productId: req.body.productId
quantity: parseInt(req.body.quantity),
productId: parseInt(req.body.productId)
}
console.log(orderProductInfo)
const addedProduct = await store.addProduct(orderProductInfo)
res.json(addedProduct)
} catch (err) {

View File

@ -5,9 +5,9 @@ import { verifyAuthToken } from './utils'
const productRoutes = (app: express.Application) => {
app.get('/products', index)
app.get('/products/:id', read)
app.post('/products', create)
app.put('/products/:id', update)
app.delete('/products/:id', destroy)
app.post('/products', verifyAuthToken, create)
app.put('/products/:id', verifyAuthToken, update)
app.delete('/products/:id', verifyAuthToken, destroy)
}
const store = new ProductStore()

View File

@ -4,8 +4,8 @@ import { verifyAuthToken, verifyUserToken} from './utils'
const userRoutes = (app: express.Application) => {
app.get('/users', index)
app.get('/users/:id', read)
app.get('/users', verifyAuthToken, index)
app.get('/users/:id', verifyAuthToken, read)
app.post('/users', create)
app.put('/users/:id', verifyAuthToken, update)
app.delete('/users/:id', verifyAuthToken, destroy)

View File

@ -13,10 +13,7 @@ export const verifyAuthToken = (req: Request, res: Response, next: NextFunction)
}
try {
console.log("req.headers.authorization", req.headers.authorization)
console.log(typeof(req.headers.authorization))
const token = req.headers.authorization.split(' ')[1]
console.log("token", token)
jwt.verify(token, SECRET)
next()
} catch (err) {

View File

@ -71,7 +71,7 @@ export class OrderStore {
try {
const conn = await client.connect()
const sql = 'INSERT INTO order_products (quantity, order_id, product_id) VALUES ($1, $2) RETURNING *'
const sql = 'INSERT INTO order_products (quantity, order_id, product_id) VALUES ($1, $2, $3) RETURNING *'
const result = await conn.query(sql, [o.quantity, o.orderId, o.productId])
const order = result.rows[0]

View File

@ -1 +1,63 @@
import sueprtest from "supertest"
import supertest from "supertest"
import app from "../../server"
import { Product } from '../../models/product'
const token = process.env.TOKEN_SECRET_TEST as string
const request = supertest(app);
const testProduct: Product = {
name: "metro",
price: 10
}
const updatedProduct: Product = {
name: "1984",
price: 5
}
describe("Product handler", () => {
it('Should create a new product', async () => {
const response = await request
.post("/products")
.auth(token, { type: "bearer" })
.send(testProduct);
expect(response.status).toBe(200);
})
it('Should index products', async () => {
const response = await request
.get("/products")
expect(response.status).toBe(200);
})
it('Should read product with id', async () => {
const response = await request
.get("/products/1")
expect(response.status).toBe(200);
})
it('Should update product with id', async () => {
const response = await request
.put("/products/1")
.auth(token, { type: 'bearer'})
.send(updatedProduct)
expect(response.status).toBe(200);
})
it('Should delete product with id', async () => {
const response = await request
.delete("/products/1")
.auth(token, { type: 'bearer'})
expect(response.status).toBe(200);
})
})

View File

@ -2,25 +2,20 @@ import { Product, ProductStore } from '../../models/product'
const store = new ProductStore()
describe("Products store Model", () => {
it('should have an index method', () => {
describe("Product model", () => {
it('Should have an index method', () => {
expect(store.index).toBeDefined();
});
it('index menthod should return a list of products', async () => {
const result = await store.index();
expect(result).toEqual([]);
});
it('should have a create method', () => {
it('Should have a create method', () => {
expect(store.index).toBeDefined;
});
it('should have a update method', () => {
it('Should have a update method', () => {
expect(store.index).toBeDefined;
});
it('create method should add a product', async () => {
it('Create method should add a product', async () => {
const result = await store.create({
name: '1984',
price: 5,
@ -33,7 +28,7 @@ describe("Products store Model", () => {
});
});
it('index method should return a list of products', async () => {
it('Index method should return a list of products', async () => {
const result = await store.index();
expect(result).toEqual([{
id: 1,
@ -43,7 +38,7 @@ describe("Products store Model", () => {
});
it('show method should return a product', async () => {
it('Show method should return a product', async () => {
const result = await store.read(1);
expect(result).toEqual({
id: 1,
@ -53,7 +48,22 @@ describe("Products store Model", () => {
});
it('delete method should remove the product', async () => {
it('Update method should update a product', async () => {
const updatedProduct: Product = {
id: 1,
name: 'The Dark Tower',
price: 7
}
const result = await store.update(updatedProduct);
expect(result).toEqual({
id: 1,
name: 'The Dark Tower',
price: 7,
});
});
it('Delete method should remove the product', async () => {
store.delete(1);
const result = await store.index()