summary refs log tree commit diff stats
path: root/test/app.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/app.test.js')
-rw-r--r--test/app.test.js227
1 files changed, 100 insertions, 127 deletions
diff --git a/test/app.test.js b/test/app.test.js
index 6810089..69cea86 100644
--- a/test/app.test.js
+++ b/test/app.test.js
@@ -22,137 +22,110 @@ const toMicroformatsOptions = node => ({
   textFormat: "normalised"
 });
 
-test("homepage", t => {
-  return request(app.listen())
-    .get("/")
-    .expect(200)
-    .expect("Content-Type", "text/html; charset=utf-8")
-    .expect(/^<!DOCTYPE html>/)
-    .then(parseResponse)
-    .then($ => {
-      t.is($("head > title").text(), "John Doe", "head title is site author");
-      t.is($("h1").text(), "John Doe", "h1 is site author");
-      t.is($("main").length, 1, "only one <main> tag");
-      t.is($("main .posts").length, 1, "contains one posts listing");
-      t.is(
-        $(".post:first-of-type a").attr("href"),
-        "/post/testfile",
-        "first post url"
-      );
-      t.is(
-        $(".post:first-of-type time").text(),
-        "Sunday, January 1, 2017",
-        "first post date"
-      );
-      t.is(
-        $(".post:first-of-type time").attr("datetime"),
-        new Date("2017-01-01").toISOString()
-      );
-      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"]
-            }
-          ]);
-        })
-      ])
-    );
-});
+async function notFound(t, url, bodyRegex) {
+  const res = await request(app.listen()).get(url);
+  const body = res.text;
+  t.is(res.statusCode, 404);
+  t.regex(body, bodyRegex);
+}
+notFound.title = (providedTitle, input, expected) =>
+  `${input} = 404 ${expected.toString()}`;
+
+test("homepage", async function(t) {
+  const res = await request(app.listen()).get("/");
+
+  t.is(res.statusCode, 200);
+  t.is(res.type, "text/html");
+  t.is(res.charset, "utf-8");
+  t.regex(res.text, /^<!DOCTYPE html>/);
+
+  const $ = parseResponse(res);
 
-test("post", t => {
-  return request(app.listen())
-    .get("/post/testfile")
-    .expect(200)
-    .expect("Content-Type", "text/html; charset=utf-8")
-    .expect(/^<!DOCTYPE html>/)
-    .then(parseResponse)
-    .then($ => {
-      t.is(
-        $("head > title").text(),
-        "This is a test · " + "John Doe",
-        "head title contains post and site author"
-      );
-      t.is(
-        $("article h1").text(),
-        "This is a test",
-        "article header is post title"
-      );
-      t.is(
-        $("article time").text(),
-        "Sunday, January 1, 2017",
-        "first post date"
-      );
-      t.is(
-        $("article time").attr("datetime"),
-        new Date("2017-01-01").toISOString()
-      );
-      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!`,
-        "article has text"
-      );
-    });
+  t.is($("head > title").text(), "John Doe", "head title is site author");
+  t.is($("h1").text(), "John Doe", "h1 is site author");
+  t.is($("main").length, 1, "only one <main> tag");
+  t.is(
+    $(".h-entry:first-of-type time").text(),
+    "Sunday, January 1, 2017",
+    "first post date"
+  );
+  t.is(
+    $(".h-entry:first-of-type time").attr("datetime"),
+    new Date("2017-01-01").toISOString()
+  );
+
+  const options = toMicroformatsOptions($);
+  const count = await mf.countAsync(options);
+
+  t.deepEqual(count, {
+    "h-card": 1,
+    "h-feed": 1,
+    "h-entry": 1
+  });
+
+  const data = await mf.getAsync(options);
+
+  t.snapshot(data, "should contain relevant microformats data");
 });
 
-test("post not found", t => {
-  return request(app.listen())
-    .get("/post/non-existant")
-    .expect(404)
-    .expect(/Post not found/)
-    .then(() => t.pass());
+test("post", async function(t) {
+  const res = await request(app.listen()).get("/post/testfile");
+
+  t.is(res.statusCode, 200);
+  t.is(res.type, "text/html");
+  t.is(res.charset, "utf-8");
+  t.regex(res.text, /^<!DOCTYPE html>/);
+
+  const $ = parseResponse(res);
+
+  t.is(
+    $("head > title").text(),
+    "This is a test · " + "John Doe",
+    "head title contains post and site author"
+  );
+
+  const options = toMicroformatsOptions($);
+
+  const count = await mf.countAsync(options);
+
+  t.deepEqual(count, {
+    "h-card": 1,
+    "h-entry": 1
+  });
+
+  const data = await mf.getAsync(options);
+
+  t.snapshot(data, "should contain relevant microformats data");
 });
 
-test("tags", t => {
-  return request(app.listen())
-    .get("/tag/a")
-    .expect(200)
-    .expect("Content-Type", "text/html; charset=utf-8")
-    .expect(/^<!DOCTYPE html>/)
-    .then(parseResponse)
-    .then($ => {
-      t.is(
-        $("head > title").text(),
-        "A · John Doe",
-        "head title contains title-cased tag and site name"
-      );
-      t.is(
-        $(".post a").text(),
-        "This is a test",
-        "post link text is post title"
-      );
-      t.is(
-        $(".post:first-of-type a").attr("href"),
-        "/post/testfile",
-        "post url"
-      );
-      t.is(
-        $(".post:first-of-type time").text(),
-        "Sunday, January 1, 2017",
-        "first post date"
-      );
-    });
+test("tags", async function(t) {
+  const res = await request(app.listen()).get("/tag/a");
+
+  t.is(res.statusCode, 200);
+  t.is(res.type, "text/html");
+  t.is(res.charset, "utf-8");
+  t.regex(res.text, /^<!DOCTYPE html>/);
+
+  const $ = parseResponse(res);
+
+  t.is(
+    $("head > title").text(),
+    "A · John Doe",
+    "head title contains title-cased tag and site name"
+  );
+  const options = toMicroformatsOptions($);
+  const count = await mf.countAsync(options);
+
+  t.deepEqual(count, {
+    "h-card": 1,
+    "h-feed": 1,
+    "h-entry": 1
+  });
+
+  const data = await mf.getAsync(options);
+
+  t.snapshot(data, "should contain relevant microformats data");
 });
 
-test("tags not found", t =>
-  request(app.listen())
-    .get("/tag/non-existant")
-    .expect(404)
-    .expect(/tag non-existant not found/)
-    .then(() => t.pass()));
+test(notFound, "/post/non-existent", /Post not found/);
+test(notFound, "/tag/non-existent", /tag non-existent not found/);