· 6 years ago · Nov 14, 2019, 11:18 AM
1/**
2 * Test for routes/app
3 */
4"use strict";
5/* global describe it */
6
7process.env.NODE_ENV = 'test';
8
9const chai = require('chai');
10const chaiHttp = require('chai-http');
11
12const server = require('../../app.js');
13const db = require("../../db/database.js");
14
15// Handle hashing password
16const bcrypt = require('bcryptjs');
17const saltRounds = 10;
18
19chai.should(); //use strict
20chai.use(chaiHttp);
21
22describe('Login', () => {
23 /*
24 * Create tables users.
25 */
26 before(async function () {
27 let sql_create = "CREATE TABLE IF NOT EXISTS users (name, email, birthday, password);";
28 await db.run(sql_create);
29 });
30
31 /*
32 * Insert test content in users.
33 */
34 beforeEach(async function () {
35 try {
36 const hash = await bcrypt.hash("Passw0rd!", saltRounds);
37 const body = [
38 "Donald Duck",
39 "donald.duck@testlogin.com",
40 "9 June 1934",
41 hash
42 ];
43
44 await db.run("INSERT INTO users (name, email, birthday, password) VALUES(?, ?, ?, ?);", body);
45 } catch (ex) {
46 console.error(ex);
47 }
48 })
49
50 /*
51 * Delete all content from tables users.
52 */
53 afterEach(async function() {
54 const sql_delete = "DELETE FROM users;";
55 await db.run(sql_delete);
56
57 });
58
59 /*
60 * Drop tables users.
61 */
62 after(async function () {
63 const sql_drop = "DROP TABLE IF EXISTS users;";
64 await db.run(sql_drop);
65 });
66
67 /*
68 * Test the /GET route
69 */
70 describe('GET /login', () => {
71 it('200 HAPPY PATH', (done) => {
72 chai.request(server)
73 .get("/login")
74 .end((err, res) => {
75 res.should.have.status(200);
76 done();
77 });
78 });
79 });
80
81 /*
82 * Test the /POST route
83 */
84 describe('POST /login', () => {
85 it('should get 401 - wrong password.', (done) => {
86 const body = {
87 email: "donald.duck@testlogin.com",
88 password: "InvalidPassw0rd!"
89 }
90
91 chai.request(server)
92 .post('/login')
93 .send(body)
94 .end((err, res) => {
95 res.should.have.status(401);
96 res.body.should.be.a('object');
97 res.body.should.have.property('errors');
98 done();
99 });
100 });
101
102 it('should get 401 - user not found.', (done) => {
103 const body = {
104 email: "mickey.mouse@example.com",
105 password: "Passw0rd!"
106 }
107
108 chai.request(server)
109 .post('/login')
110 .send(body)
111 .end((err, res) => {
112 res.should.have.status(401);
113 res.body.should.be.a('object');
114 res.body.should.have.property('errors');
115 done();
116 });
117 });
118
119 it('should get 200 - login success.', (done) => {
120 const body = {
121 email: "donald.duck@testlogin.com",
122 password: "Passw0rd!"
123 }
124
125 chai.request(server)
126 .post('/login')
127 .send(body)
128 .end((err, res) => {
129 res.should.have.status(200);
130 res.body.should.be.a('object');
131 done();
132 });
133 });
134 });
135});