Skip to content
This repository was archived by the owner on Dec 13, 2021. It is now read-only.

Commit e5a42b6

Browse files
committed
Test against DOM
1 parent eff9aea commit e5a42b6

5 files changed

Lines changed: 56 additions & 25 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"express": "^4.17.1",
4242
"express-minify": "^1.0.0",
4343
"i18n": "^0.8.3",
44+
"jsdom": "^16.0.0",
4445
"kill-port": "^1.6.0",
4546
"knex": "^0.19.4",
4647
"lighthouse": "^5.2.0",

test/Routes/Lists.js

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,60 @@
1-
const { describe, it, expect, request, db, locale, checks, auth } = require('../base');
1+
const { describe, it, expect, request, db, locale, checks, auth, dom } = require('../base');
22

33
describe('/lists', () => {
44
describe('GET', () => {
5-
const test = () => request().get('/lists');
6-
it('returns an OK status code', done => {
7-
test().end((err, res) => {
8-
expect(res).to.have.status(200);
5+
let res, page;
6+
before('fetch the page', done => {
7+
request().get('/lists').end((_, r) => {
8+
res = r;
9+
page = dom(r);
910
done();
1011
});
1112
});
13+
it('returns an OK status code', done => {
14+
expect(res).to.have.status(200);
15+
done();
16+
});
1217
it('has the correct page title', done => {
13-
test().end((err, res) => {
14-
expect(res).to.be.html;
15-
checks.title(res, `All Bot Lists - ${locale('site_name')} - ${locale('short_desc')}`);
16-
done();
17-
});
18+
checks.title(res, `All Bot Lists - ${locale('site_name')} - ${locale('short_desc')}`);
19+
done();
1820
});
19-
it('renders the expected content', done => {
20-
db.select('name', 'url').from('lists').where({ display: true, defunct: false }).then(lists => {
21-
test().end((err, res) => {
22-
expect(res).to.be.html;
2321

24-
// Confirm header
25-
expect(res.text).to.include('All Bot Lists');
26-
27-
// Confirm footer stats
28-
expect(res.text).to.include(`${locale('site_name')} - Bot List Stats`);
22+
describe('renders the expected content', () => {
23+
it('has the correct title', done => {
24+
expect(res.text).to.include('All Bot Lists');
25+
done();
26+
});
27+
it('has the stats footer', done => {
28+
const footer = page.querySelector(".hero.card .hero-body.hero-stats.card-body");
29+
expect(footer).to.exist;
30+
expect(footer.innerHTML).to.include(`${locale('site_name')} - Bot List Stats`);
31+
done();
32+
});
2933

30-
// Confirm list cards
31-
lists.forEach(list => {
34+
describe('contains the list cards', () => {
35+
let listCards;
36+
before('fetch list cards', done => {
37+
db.select('id', 'name', 'url').from('lists').where({ display: true, defunct: false }).then(lists => {
38+
listCards = lists;
39+
done();
40+
});
41+
});
42+
it('has the list names', done => {
43+
listCards.forEach(list => {
3244
expect(res.text).to.include(list.name);
45+
});
46+
done();
47+
});
48+
it('has the list urls', done => {
49+
listCards.forEach(list => {
3350
expect(res.text).to.include(list.url);
3451
});
35-
52+
done();
53+
});
54+
it('has the list information button', done => {
55+
listCards.forEach(list => {
56+
expect(page.querySelector(`.card a.button[href="/lists/${list.id}"]`)).to.exist;
57+
});
3658
done();
3759
});
3860
});

test/base.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ const checks = require('./helpers/checks');
55
const auth = require('./helpers/auth');
66
const request = require('./helpers/request');
77
const { ratelimitBypass, resetRatelimits } = require('./helpers/ratelimits');
8+
const dom = require('./helpers/dom');
89
const { describe, it } = require('mocha');
910
const chai = require('chai');
10-
const expect = chai.expect;
11+
const { expect } = require('chai');
12+
const chaiHttp = require('chai-http');
13+
chai.use(chaiHttp);
1114

1215
const compareObjectProps = (a, b) => {
1316
const missing = [];
@@ -43,5 +46,6 @@ module.exports = {
4346
locale,
4447
checks,
4548
auth,
49+
dom,
4650
compareObjects
4751
};

test/helpers/dom.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const jsdom = require("jsdom");
2+
const { JSDOM } = jsdom;
3+
4+
module.exports = res => {
5+
return (new JSDOM(res.text)).window.document;
6+
};

test/helpers/request.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
const config = require('../../config');
22
const { asAnon } = require('./auth');
33
const chai = require('chai');
4-
const chaiHttp = require('chai-http');
5-
chai.use(chaiHttp);
64

75
const target = `${config.baseURL}:${config.port}`;
86
const base = () => chai.request(target);

0 commit comments

Comments
 (0)