Skip to content

Commit de9a766

Browse files
committed
test: add integration tests for notes API
1 parent 8b81669 commit de9a766

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed

test/integration/notes.test.js

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
import server from "../../src/index.js";
2+
import supertest from "supertest";
3+
import assert from "assert";
4+
import NotesDatabase from "../../src/databases/notes.database.js";
5+
import { before, describe, it } from "mocha";
6+
7+
const database = new NotesDatabase("test");
8+
const request = supertest(server);
9+
10+
describe("Notes API - Successful responses", () => {
11+
before("Database - Setup", () => {
12+
database.sqlite3.prepare("delete from notes").run();
13+
database.sqlite3.prepare("delete from sqlite_sequence where name = 'notes'").run();
14+
database.create({ title: "npmjs", content: "https://npmjs.com" })
15+
});
16+
17+
it("should return OK when creating a new note", (done) => {
18+
request.post("/notes")
19+
.send({ title: "github", content: "https://github.com" })
20+
.expect(200)
21+
.end((error, res) => {
22+
if (error) return done(error);
23+
24+
assert.equal(res.body.success, true);
25+
assert.equal(res.body.data.items.length, 1);
26+
assert.equal(res.body.metadata.count, 1);
27+
28+
return done(error);
29+
})
30+
});
31+
32+
it("should return OK when getting a note by ID", (done) => {
33+
request.get("/notes/1")
34+
.expect(200)
35+
.end((error, res) => {
36+
if (error) return done(error);
37+
38+
assert.equal(res.body.success, true);
39+
assert.equal(res.body.data.items.length, 1);
40+
assert.equal(res.body.metadata.count, 1);
41+
42+
return done(error);
43+
})
44+
});
45+
46+
it("should return OK when getting all notes", (done) => {
47+
request.get("/notes")
48+
.expect(200)
49+
.end((error, res) => {
50+
if (error) return done(error);
51+
52+
assert.equal(res.body.success, true);
53+
assert.equal(res.body.data.items.length, 2);
54+
assert.equal(res.body.metadata.count, 2);
55+
56+
return done(error);
57+
})
58+
});
59+
60+
it("should return OK when updating a notes by ID", (done) => {
61+
request.put("/notes/2")
62+
.expect(200)
63+
.send({ title: "aws", content: "https://aws.amazon.com" })
64+
.end((error, res) => {
65+
if (error) return done(error);
66+
67+
assert.equal(res.body.success, true);
68+
assert.equal(res.body.data.items.length, 1);
69+
assert.equal(res.body.metadata.count, 1);
70+
71+
return done(error);
72+
})
73+
});
74+
75+
it("should return OK when partially updating a note by ID", (done) => {
76+
request.patch("/notes/2")
77+
.send({ title: "fast" })
78+
.expect(200)
79+
.end((error, res) => {
80+
if (error) return done(error);
81+
82+
assert.equal(res.body.success, true);
83+
assert.equal(res.body.data.items.length, 1);
84+
assert.equal(res.body.metadata.count, 1);
85+
86+
return done(error);
87+
})
88+
});
89+
90+
it("should return OK when deleting a note by ID", (done) => {
91+
request.delete("/notes/1")
92+
.expect(200)
93+
.end((error, res) => {
94+
if (error) return done(error);
95+
96+
assert.equal(res.body.success, true);
97+
assert.equal(res.body.data.items.length, 1);
98+
assert.equal(res.body.metadata.count, 1);
99+
100+
return done(error);
101+
})
102+
});
103+
});
104+
105+
describe("Notes API - Error responses", () => {
106+
before("Database - Setup", () => {
107+
database.sqlite3.prepare("delete from notes").run();
108+
database.sqlite3.prepare("delete from sqlite_sequence where name = 'notes'").run();
109+
});
110+
111+
it('should an error when creating a note without the title', (done) => {
112+
request
113+
.post("/notes")
114+
.send({ content: "node.js" })
115+
.expect(400, done)
116+
})
117+
118+
it('should return an error getting a note that does dot exist', (done) => {
119+
request
120+
.get("/notes/4")
121+
.expect(404, done)
122+
})
123+
124+
it('should return an error when updating a note with invalid ID', (done) => {
125+
request
126+
.put("/notes/1n")
127+
.send({ title: "node", content: "js" })
128+
.expect(400, done)
129+
})
130+
131+
it('should return an error when deleting a note with invalid ID', (done) => {
132+
request
133+
.delete("/notes/1n")
134+
.expect(400, done)
135+
})
136+
})

0 commit comments

Comments
 (0)