1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
"use strict";
const test = require("ava");
const path = require("path");
const request = require("supertest");
const cheerio = require("cheerio");
const mf = require("microformat-node");
process.chdir(path.resolve(__dirname, "./testsite/"));
const config = require(path.resolve(__dirname, "../src/modules/config.js"));
const app = require("../src/app.js");
const parseResponse = res =>
cheerio.load(res.text, {
normalizeWhitespace: true,
useHtmlParser2: true
});
const toMicroformatsOptions = node => ({
node,
textFormat: "normalised"
});
test("homepage", t => {
return request(app.listen())
.get("/")
.expect(200)
.expect(/^<!DOCTYPE html>/)
.then(parseResponse)
.then($ => {
t.is($("head > title").text(), "John Doe");
t.is($("h1").text(), "John Doe");
t.is($("main").length, 1);
t.is($("main .posts").length, 1);
t.is($(".post:first-of-type a").attr("href"), "/post/testfile");
return $;
})
.then(toMicroformatsOptions)
.then(options =>
Promise.all([
mf.countAsync(options).then(count =>
t.deepEqual(count, {
"h-card": 1
})
),
mf.getAsync(options).then(data => {
t.deepEqual(data.items, [
{
properties: {
name: ["John Doe"],
url: ["/"],
photo: ["/static/johndoe.jpg"]
},
type: ["h-card"]
}
]);
})
])
);
});
test("post", t => {
return request(app.listen())
.get("/post/testfile")
.expect(200)
.expect(/^<!DOCTYPE html>/)
.then(parseResponse)
.then($ => {
t.is($("head > title").text(), "This is a test · " + "John Doe");
t.is($("article h1").text(), "This is a test");
t.is(
$("article p").text(),
`Ut enim blandit volutpat maecenas? Volutpat blandit aliquam etiam erat \
velit, scelerisque in dictum non, consectetur a erat nam at lectus \
urna duis convallis convallis tellus, id interdum velit laoreet!`
);
});
});
test("post not found", t => {
return request(app.listen())
.get("/post/non-existant")
.expect(404)
.expect(/Post not found/)
.then(() => t.pass());
});
test("tags", t => {
return request(app.listen())
.get("/tag/a")
.expect(200)
.expect(/^<!DOCTYPE html>/)
.then(parseResponse)
.then($ => {
t.is($("head > title").text(), "A · John Doe");
t.is($(".post a").text(), "This is a test");
t.is($(".post:first-of-type a").attr("href"), "/post/testfile");
});
});
test("tags not found", t =>
request(app.listen())
.get("/tag/non-existant")
.expect(404)
.expect(/tag non-existant not found/)
.then(() => t.pass()));
|