summaryrefslogtreecommitdiffstats
path: root/test/assertions.js
blob: 7e14ecbb6e6ba29d8b4331c46d9ac5ec1d9e0b9d (plain)
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
var _ = require("lodash");
var fs = require("fs");
var path = require("path");
var should = require("should");
var cheerio = require("cheerio");

should.Assertion.add("file", function(file, description) {
    this.params = { actual: this.obj.toString(), operator: "have file " + file, message: description };

    this.obj.should.have.property("options").which.is.an.Object();
    this.obj.options.should.have.property("output").which.is.a.String();
    this.assert(fs.existsSync(path.resolve(this.obj.options.output, file)));
});

should.Assertion.add("jsonfile", function(file, description) {
    this.params = { actual: this.obj.toString(), operator: "have valid jsonfile " + file, message: description };

    this.obj.should.have.property("options").which.is.an.Object();
    this.obj.options.should.have.property("output").which.is.a.String();
    this.assert(JSON.parse(fs.readFileSync(path.resolve(this.obj.options.output, file), { encoding: "utf-8" })));
});

should.Assertion.add("html", function(rules, description) {
    this.params = { actual: "HTML string", operator: "valid html", message: description };
    var $ = cheerio.load(this.obj);

    _.each(rules, function(validations, query) {
        validations = _.defaults(validations || {}, {
            // Select a specific element in the list of matched elements
            index: null,

            // Check that there is the correct count of elements
            count: 1,

            // Check attribute values
            attributes: {},

            // Trim inner text
            trim: false,

            // Check inner text
            text: undefined
        });

        var $el = $(query);

        // Select correct element
        if (_.isNumber(validations.index)) $el = $($el.get(validations.index));

        // Test number of elements
        $el.length.should.be.equal(validations.count);

        // Test text
        if (validations.text !== undefined) {
            var text = $el.text();
            if (validations.trim) text = text.trim();
            text.should.be.equal(validations.text);
        }

        // Test attributes
        _.each(validations.attributes, function(value, name) {
            var attr = $el.attr(name);
            should(attr).be.ok();
            attr.should.be.equal(value);
        });
    });
});