Skip to content
Snippets Groups Projects
Commit 1ab801ae authored by Jonny Ngo Luong's avatar Jonny Ngo Luong
Browse files

Merge branch '7-backend-profil-entitet' into 'master'

Resolve "Backend: Profil entitet"

Closes #7

See merge request tdt4140-group-58/spring2021-sellpoint!6
parents 200bf5be 3958ad66
No related branches found
No related tags found
No related merge requests found
......@@ -2,7 +2,6 @@ import express, { Application } from 'express';
import routes from "./routes/routes";
import bodyParser from 'body-parser';
import cors from 'cors';
import mysql from 'mysql2';
// Boot express
const app: Application = express();
......
......@@ -20,7 +20,7 @@ const category = new Category();
router.route('/').post(async (request: Request, response: Response) => {
const {category} = request.body;
try {
const input = (` INSERT INTO category(navn) VALUES (?);`)
const input = (` INSERT INTO category(name) VALUES (?);`)
return response.status(200).json(
await query(input,[category])
);
......
......@@ -11,7 +11,9 @@ describe('Test categoryController', () => {
});
it('Request /api/category should return request of 200!', async () => {
const result = await request(app).get('/api/category').send();
const result = await request(app)
.get('/api/category')
.send()
expect(result.status).toBe(200);
});
......@@ -20,6 +22,6 @@ describe('Test categoryController', () => {
const result = await request(app).get('/api/category/1').send();
expect(result.status).toBe(200);
expect(result.body.data[0]?.navn).toBe('Antikviteter og Kunst');
expect(result.body.data[0]?.name).toBe('Antikviteter og Kunst');
});
});
\ No newline at end of file
});
......@@ -36,7 +36,7 @@ router.route('/').post(async (request: Request, response: Response) => {
router.route('/').get(async (_: Request, response: Response) => {
try {
//response.status(200).json(await query("SELECT * FROM post;",""));
const input = `SELECT p.id, p.title, p.description, p.timestamp, p.owner, category.navn, p.imageUrl
const input = `SELECT p.id, p.title, p.description, p.timestamp, p.owner, category.name, p.imageUrl
FROM post as p
INNER JOIN category ON category.categoryid = p.categoryid;`
response.status(200).json(await query(input,""));
......@@ -50,7 +50,7 @@ router.route('/:id').get(async (request: Request, response: Response) => {
const postId = request.params.id;
try {
//response.status(200).json(await query("SELECT * FROM post WHERE id=?;",[postId]));
const input = `SELECT p.id, p.title, p.description, p.timestamp, p.owner, category.navn, p.imageUrl
const input = `SELECT p.id, p.title, p.description, p.timestamp, p.owner, category.name, p.imageUrl
FROM post as p
INNER JOIN category ON category.categoryid = p.categoryid WHERE p.id=?;`
response.status(200).json(await query(input,[postId]));
......
import request from 'supertest';
import app from '../../../app';
describe('Test postController', () => {
beforeAll(async () => { // kjører før testing
console.log("Post controller test starting...");
});
afterAll(async () => { // kjører når all testing er gått gjennom
console.log("...Test ending");
});
it('Request /api/post should return request of 200!', async () => {
const result = await request(app)
.get('/api/post')
.send()
expect(result.status).toBe(200);
});
it('Request /api/post/1 should return data with name "test"!', async () => {
const result = await request(app).get('/api/post/1').send();
expect(result.status).toBe(200);
expect(result.body.data[0]?.title).toBe('test');
});
});
\ No newline at end of file
import { Response, Request } from "express";
import query from '../../services/db_query';
import express from 'express';
import IUser from '../../models/user';
const router = express.Router();
/* ============================= CREATE ============================= */
// Get all users `/api/user/`
router.route('/').post(async (request: Request, response: Response) => {
const {username, email, password, create_time} = request.body;
try {
const user: IUser = {
"username": username,
"email": email,
"password": password,
};
if (Object.values(user).filter(p => p == undefined).length > 0) return response.status(500).send("Error");
const input = (`INSERT INTO user(username, email, password) VALUES (?,?,?)`)
return response.status(200).json(
await query(input,Object.values(user))
);
} catch (error) {
return response.status(400).send("Bad Request");
}
});
/* ============================= READ ============================= */
// Get all users `/api/user/`
router.route('/').get(async (_: Request, response: Response) => {
try {
const input = "SELECT * FROM user;"
response.status(200).json(await query(input,""));
} catch (error) {
response.status(400).send("Bad Request");
}
});
// Get post with id `/api/user/:id`
router.route('/:userId').get(async (request: Request, response: Response) => {
const userId = request.params.userId;
try {
const input = `SELECT * FROM user WHERE userId=?;`
response.status(200).json(await query(input,[userId]));
} catch (error) {
response.status(400).send("Bad Request");
}
});
/* ============================= UPDATE ============================= */
// Update user from id `/api/user/:id`
router.route('/:userId').put(async (request: Request, response: Response) => {
const userId = request.params.userId;
const {username, email, password} = request.body;
try {
const input = `UPDATE user SET username=?, email=?, password=? WHERE userId=?);`;
response.status(200).json(await query(input,[username, email, password, userId]));
} catch (error) {
response.status(400).send("Bad Request");
}
});
/* ============================= DELETE ============================= */
// Delete user from id `/api/user/:id`
router.route('/:userId').delete(async (request: Request, response: Response) => {
const userId = request.params.userId;
try {
const input = `DELETE FROM user WHERE (userId=?);`;
response.status(200).json(await query(input,[userId]));
} catch (error) {
response.status(400).send("Bad Request");
}
});
export default router;
import request from 'supertest';
import app from '../../../app';
describe('Test userController', () => {
beforeAll(async () => { // kjører før testing
console.log("User controller test starting...");
});
afterAll(async () => { // kjører når all testing er gått gjennom
console.log("...Test ending");
});
it('Request /api/category should return request of 200!', async () => {
const result = await request(app)
.get('/api/user')
.send()
expect(result.status).toBe(200);
});
it('Request /api/category/1 should return data with name "zorg"!', async () => {
const result = await request(app).get('/api/user/1').send();
expect(result.status).toBe(200);
expect(result.body.data[0]?.username).toBe('zorg');
});
});
\ No newline at end of file
......@@ -9,4 +9,4 @@ interface IPost {
}
// Eksporterer IPost til bruk i andre filer.
export default IPost;
\ No newline at end of file
export default IPost;
// Interface for the User object, taken from the database
interface IUser{
userId?: number;
username: string;
email: string;
password: string;
create_time?: Date;
}
export default IUser;
import postController from '../controllers/postcontroller';
import postController from '../controllers/postController';
import categoryController from '../controllers/categoryController';
import userController from '../controllers/userController';
import express from 'express';
const router = express.Router();
......@@ -7,6 +8,6 @@ const router = express.Router();
// Endpoints
router.use("/post", postController);
router.use("/category", categoryController);
router.use("/user", userController);
export default router;
export default router;
\ No newline at end of file
......@@ -9,5 +9,5 @@ async function query(sql:any, params:any) {
}
export default {
query
query,
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment