summaryrefslogtreecommitdiffstats
path: root/lib/output/__tests__/website.js
blob: 1f8c3c01ba5fa18b47dd9aea73497ce3571f370c (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
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
var fs = require('fs');
var generateMock = require('./generateMock');
var WebsiteGenerator = require('../website');

describe('WebsiteGenerator', function() {

    it('should generate an index.html', function() {
        return generateMock(WebsiteGenerator, {
            'README.md': 'Hello World'
        })
        .then(function(folder) {
            expect(folder).toHaveFile('index.html');
        });
    });

    describe('Glossary', function() {
        var folder;

        before(function() {
            return generateMock(WebsiteGenerator, {
                'README.md': 'Hello World',
                'SUMMARY.md': '* [Deep](folder/page.md)',
                'folder': {
                    'page.md': 'Hello World'
                },
                'GLOSSARY.md': '# Glossary\n\n## Hello\n\nHello World'
            })
            .then(function(_folder) {
                folder = _folder;
            });
        });

        it('should generate a GLOSSARY.html', function() {
            expect(folder).toHaveFile('GLOSSARY.html');
        });

        it('should correctly resolve glossary links in README', function() {
            var html = fs.readFileSync(folder + '/index.html', 'utf8');
            expect(html).toHaveDOMElement('.page-inner a[href="GLOSSARY.html#hello"]');
        });

        it('should correctly resolve glossary links in directory', function() {
            var html = fs.readFileSync(folder + '/folder/page.html', 'utf8');
            expect(html).toHaveDOMElement('.page-inner a[href="../GLOSSARY.html#hello"]');
        });

        it('should accept a custom glossary file', function() {
            return generateMock(WebsiteGenerator, {
                'README.md': 'Hello World',
                'book.json': '{ "structure": { "glossary": "custom.md" } }',
                'custom.md': '# Glossary\n\n## Hello\n\nHello World'
            })
            .then(function(folder) {
                expect(folder).toHaveFile('custom.html');
                expect(folder).toNotHaveFile('GLOSSARY.html');

                var html = fs.readFileSync(folder + '/index.html', 'utf8');
                expect(html).toHaveDOMElement('.page-inner a[href="custom.html#hello"]');
            });
        });
    });


    it('should copy asset files', function() {
        return generateMock(WebsiteGenerator, {
            'README.md': 'Hello World',
            'myJsFile.js': 'var a = "test";',
            'folder': {
                'AnotherAssetFile.md': '# Even md'
            }
        })
        .then(function(folder) {
            expect(folder).toHaveFile('index.html');
            expect(folder).toHaveFile('myJsFile.js');
            expect(folder).toHaveFile('folder/AnotherAssetFile.md');
        });
    });

    it('should generate an index.html for AsciiDoc', function() {
        return generateMock(WebsiteGenerator, {
            'README.adoc': 'Hello World'
        })
        .then(function(folder) {
            expect(folder).toHaveFile('index.html');
        });
    });

    it('should generate an HTML file for each articles', function() {
        return generateMock(WebsiteGenerator, {
            'README.md': 'Hello World',
            'SUMMARY.md': '# Summary\n\n* [Page](test/page.md)',
            'test': {
                'page.md': 'Hello 2'
            }
        })
        .then(function(folder) {
            expect(folder).toHaveFile('index.html');
            expect(folder).toHaveFile('test/page.html');
        });
    });

    it('should not generate file if entry file doesn\'t exist', function() {
        return generateMock(WebsiteGenerator, {
            'README.md': 'Hello World',
            'SUMMARY.md': '# Summary\n\n* [Page 1](page.md)\n* [Page 2](test/page.md)',
            'test': {
                'page.md': 'Hello 2'
            }
        })
        .then(function(folder) {
            expect(folder).toHaveFile('index.html');
            expect(folder).toNotHaveFile('page.html');
            expect(folder).toHaveFile('test/page.html');
        });
    });

    it('should generate a multilingual book', function() {
        return generateMock(WebsiteGenerator, {
            'LANGS.md': '# Languages\n\n* [en](en)\n* [fr](fr)',
            'en': {
                'README.md': 'Hello'
            },
            'fr': {
                'README.md': 'Bonjour'
            }
        })
        .then(function(folder) {
            // It should generate languages
            expect(folder).toHaveFile('en/index.html');
            expect(folder).toHaveFile('fr/index.html');

            // Should not copy languages as assets
            expect(folder).toNotHaveFile('en/README.md');
            expect(folder).toNotHaveFile('fr/README.md');

            // Should copy assets only once
            expect(folder).toHaveFile('gitbook/style.css');
            expect(folder).toNotHaveFile('en/gitbook/style.css');

            expect(folder).toHaveFile('index.html');
        });
    });
});