You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
arch-wiki-man/test/fileio.js

123 lines
3.4 KiB
JavaScript

/* eslint-env mocha */
/* eslint func-names:0 no-unused-expressions:0 */
'use strict';
var expect = require('chai').expect;
var fileio = require('../lib/fileio');
var Promise = require('bluebird');
var fsReadFile = Promise.promisify(require('fs').readFile);
var fsUnlink = Promise.promisify(require('fs').unlink);
var path = require('path');
describe('methods', function() {
it('should have a convert function', function() {
expect(fileio.convert).to.be.a('function');
});
it('should have a getContents function', function() {
expect(fileio.getContents).to.be.a('function');
});
it('should have a tmpSave function', function() {
expect(fileio.tmpSave).to.be.a('function');
});
it('should have a removeTmp function', function() {
expect(fileio.removeTmp).to.be.a('function');
});
it('should have a getTmp function', function() {
expect(fileio.getTmp).to.be.a('function');
});
});
describe('getContents', function() {
var mockArticle = {
title: 'foo bar',
mdPath: path.join(process.cwd(), 'test', 'mock', 'mockArticle.md'),
description: 'my description',
};
var finishedMockArticle = Object.create(mockArticle);
before(function(done) {
fsReadFile(mockArticle.mdPath, 'utf8').then(function(data) {
finishedMockArticle.contents = data;
done();
}).catch(function(err) { console.log(err);});
});
it('should take in an article object and adds contents to it', function(done) {
fileio.getContents(mockArticle).then(function(newArticle) {
expect(newArticle.title).to.equal(finishedMockArticle.title);
expect(newArticle.mdPath).to.equal(finishedMockArticle.path);
expect(newArticle.description).to.equal(finishedMockArticle.description);
expect(newArticle.contents).to.equal(finishedMockArticle.contents);
done();
});
});
});
describe('convert', function() {
var testPath = path.join(process.cwd(), 'test', 'mock', 'mockArticle.md');
var contents = null;
var goodRoff = null;
before(function(done) {
fsReadFile(testPath, 'utf8').then(function(data) {
contents = data;
}).then(function() {
return fsReadFile(path.join(process.cwd(), 'test', 'mock', 'mockArticle.roff'), 'utf8');
}).then(function(result) {
goodRoff = result;
done();
}).catch(function(err) { console.log(err); });
});
it('should convert articles from md to roff', function() {
expect(fileio.convert(contents, {})).to.contain(goodRoff.substr(1, -1).trim());
});
});
describe('tmpSave', function() {
var tmp = null;
it('should save a temporary file', function(done) {
fileio.tmpSave('hello world').then(function(tmpFile) {
tmp = tmpFile;
expect(tmpFile).to.equal(path.resolve(fileio.getTmp()));
fsReadFile(tmpFile, 'utf8').then(function(contents) {
expect(contents).to.equal('hello world');
done();
});
});
});
after(function(done) {
fsUnlink(tmp).then(function() {
done();
});
});
});
describe('removeTmp', function() {
before(function(done) {
fileio.tmpSave('hello world').then(function() {
done();
});
});
it('should delete the temporary file', function(done) {
fileio.removeTmp().then(function(result) {
expect(result).to.equal('done');
done();
});
});
});
describe('getTmp', function() {
it('should get the tmpfile location', function() {
expect(fileio.getTmp()).to.be.a('string');
});
});