sql-cli
Version:
Cross platform command line interface for SQL Server
195 lines (159 loc) • 5.2 kB
JavaScript
var proxyquire = require('proxyquire').noPreserveCache(),
M = require('mstring'),
utils = require('./utils');
describe('ResultWriter', () => {
var ResultWriter, csvWriter;
function setup() {
csvWriter = jasmine.createSpyObj('csvWriter', ['writeRecord']);
var csv = {
createCsvStreamWriter: jasmine.createSpy().andReturn(csvWriter)
};
ResultWriter = proxyquire('../lib/resultwriter', {
'ya-csv': csv
});
}
describe('create', () => {
beforeEach(() => {
setup();
});
function testCreate(code, type) {
expect(ResultWriter.create(code) instanceof type).toBe(true);
}
it('returns JsonWriter for j and json', () => {
testCreate('j', ResultWriter.JsonWriter);
testCreate('json', ResultWriter.JsonWriter);
});
it('returns XmlWriter for x and xml', () => {
testCreate('x', ResultWriter.XmlWriter);
testCreate('xml', ResultWriter.XmlWriter);
});
it('returns CsvWriter for c and csv', () => {
testCreate('c', ResultWriter.CsvWriter);
testCreate('csv', ResultWriter.CsvWriter);
});
it('returns TableWriter for t and table', () => {
testCreate('t', ResultWriter.TableWriter);
testCreate('table', ResultWriter.TableWriter);
});
it('throws for unknown code', () => {
expect(ResultWriter.create.bind(null, 'abc')).toThrow();
});
});
describe('JsonWriter', () => {
var writer, output = '';
beforeEach(() =>{
writer = new ResultWriter.JsonWriter();
spyOn(console, 'log').andCallFake(text => {
output += text;
});
});
afterEach(() => {
console.log = console.log.originalValue;
});
it('writes json', () => {
var result = [{
title: 'abc',
count: 54
}];
var json = M(function() { /***
[[[{
"title": "abc",
"count": 54
}]]]
***/});
writer.startResult();
writer.startSet();
writer.writeRows(result);
writer.endSet();
writer.endResult();
expect(console.log).toHaveBeenCalled();
utils.stringEqual(output, json);
});
});
describe('XmlWriter', () => {
var writer, output = '';
beforeEach(() =>{
writer = new ResultWriter.XmlWriter();
spyOn(console, 'log').andCallFake(text => {
output += text;
});
});
afterEach(() => {
console.log = console.log.originalValue;
});
it('writes xml', () => {
var result = [{
title: 'abc',
count: 54
}];
var xml = M(function() { /***
<?xml version="1.0"?>
<results>
<result>
<row>
<title>abc</title>
<count>54</count>
</row>
</result>
</results>
***/});
writer.startResult();
writer.startSet();
writer.writeRows(result);
writer.endSet();
writer.endResult();
expect(console.log).toHaveBeenCalled();
utils.stringEqual(output, xml);
});
});
describe('TableWriter', () => {
var writer, output = '';
beforeEach(() =>{
writer = new ResultWriter.TableWriter();
spyOn(console, 'log').andCallFake(text => {
output += text;
});
});
afterEach(() => {
console.log = console.log.originalValue;
});
it('writes tabular data', () => {
var result = [{
title: 'abc',
count: 54
}];
var table = M(function(){ /***
title count
----- -----
abc 54
***/});
writer.startResult();
writer.startSet();
writer.writeRows(result);
writer.endSet();
writer.endResult();
expect(console.log).toHaveBeenCalled();
utils.stringEqual(output, table);
});
});
describe('CsvWriter', () => {
var writer, output = '';
beforeEach(() =>{
csvWriter.writeRecord.reset();
writer = new ResultWriter.CsvWriter();
});
it('writes csv', () => {
var result = [{
title: 'abc',
count: 54
}];
writer.startResult();
writer.startSet();
writer.writeRows(result);
writer.endSet();
writer.endResult();
expect(csvWriter.writeRecord).toHaveBeenCalledWith(['title', 'count']);
expect(csvWriter.writeRecord).toHaveBeenCalledWith(['abc', 54]);
});
});
});