it("should properly handle boolean parameters", function() { var query = conn.query("CREATE TABLE bar (a BOOLEAN, b BOOLEAN)").then(function() { return conn.query("INSERT INTO bar VALUES (?, ?)", [true, false]); }).then(function() { return conn.query("SELECT * FROM bar"); }); return shouldHaveValidResult(query, 1, 2, ["a", "b"]) .should.eventually.have.property("data") .that.deep.equals([[true, false]]); });
describe('#addCommand()', () => { it('should add command to the Shell', () => { const psCommand = new PSCommand(COMMAND); expect(ps.addCommand(COMMAND)).to.eventually.be.an('array') .that.include(psCommand); expect(ps.addCommand(psCommand)).to.eventually.be.an('array') .that.have.lengthOf(2); }); it('should fail adding command to the Shell', () => { expect(ps.addCommand('')).be.eventually.rejectedWith(PS_ARG_MISS_ERROR); expect(ps.addCommand({})).be.eventually.rejectedWith(PS_ARG_TYPE_ERROR); }); });
it("should properly handle (escaped) quotes", function() { var query = conn.query("SELECT '\\\\asdf' AS a, '\"' AS b, '\\\"' AS c, '\\\\\"' AS d, '\\'' AS e"); return shouldHaveValidResult(query, 1, 5, ["a", "b", "c", "d", "e"]) .should.eventually.have.property("data") .that.deep.equals([['\\asdf', '"', '\"', '\\"', "'"]]); });
describe("the challenges list", function() { it("has all challenges if no arguments are passed", () => { return expect(challenge.fetch()).to.eventually.be.an("array").that.is .not.empty; }); it("has only a subset of challenges if keys are passed", function() { return challenge.fetch(["hello-world"]).then(challenges => { expect(challenges).to.be.an("array").that.is.not.empty; expect(challenges.length).to.equal(1); }); }); });
it("should properly store and retrieve escaped values", function() { var query = conn.query( "CREATE TABLE foo(a string);\n" + "INSERT INTO foo VALUES ('\t\n\r\n\tlalala\t\n\r')" ).then(function() { return conn.query("SELECT * FROM foo"); }); return shouldHaveValidResult(query, 1, 1, ["a"]) .should.eventually.have.property("data") .that.deep.equals([['\t\n\r\n\tlalala\t\n\r']]); });
describe('#addArgument()', () => { const ARGUMENT = 'PSCommand'; it('should add argument to the Shell', () => { const test = ps.addCommand(COMMAND) .then(() => ps.addArgument(ARGUMENT)); expect(test).to.eventually.be.an('array') .that.have.nested.property('[0].command', `${COMMAND} ${ARGUMENT}`); }); it('should fail adding argument to the Shell', () => { expect(ps.addArgument(ARGUMENT)).be.eventually.rejectedWith(PS_ARG_MISS_ERROR); }); });
it("should properly handle timestamp, timestamptz, date, and uuid", function() { var vals = [ "2015-10-29 11:31:35.000000", "2015-10-29 11:31:35.000000" + constructCurTimezoneStr(), "2015-10-29", "422cb031-6329-3b4f-0247-e261db574da6" ]; var query = conn.query("CREATE TABLE bar (a TIMESTAMP, b TIMESTAMPTZ, c DATE, d UUID)").then(function() { return conn.query("INSERT INTO bar VALUES (?, ?, ?, ?)", vals); }).then(function() { return conn.query("SELECT * FROM bar"); }); return shouldHaveValidResult(query, 1, 4, ["a", "b", "c", "d"]) .should.eventually.have.property("data") .that.deep.equals([vals]); });
it("should work on queries that exceed mapi block size", function() { function rep(str,n) { ret = ''; for (var i = 0; i< n; i++) { ret += str; } return ret; } var longstr = rep('ABCDEFGHIJKLMNOP', 10000); var query = conn.query("SELECT '" + longstr + "' AS longstr"); return shouldHaveValidResult(query, 1, 1, ["longstr"]) .should.eventually.have.property("data") .that.deep.equals([[longstr]]); // for some reason, if equals fails here, the truncateThreshold is // ignored and the huge string is printed... let's just // hope this equals test always passes });
it("should generate pretty results in .query when pretty option is set", function() { conn.option("prettyResult", true); var query = conn.query( "INSERT INTO foo VALUES (42,4.2,'42'),(43,4.3,'43'),(44,4.4,'44'),(45,4.5,'45')" ).then(function() { return conn.query("SELECT * FROM foo WHERE d > ?", [42]); }); return shouldHaveValidResult(query, 3, 3, ["d", "e", "f"]) .should.eventually.have.property("data") .that.deep.equals([ {d: 43, e: 4.3, f: "43"}, {d: 44, e: 4.4, f: "44"}, {d: 45, e: 4.5, f: "45"} ]); });
it("should properly rebuild stored JSON", function() { var json = {a: 9, b: {c: 's'}, c: [1,2,3,{a: 1}]}; var query = conn.query("CREATE TABLE foo (a JSON)").then(function() { return conn.query("INSERT INTO foo VALUES ('" + JSON.stringify(json) + "')"); }).then(function() { return conn.query("SELECT * FROM foo"); }); return shouldHaveValidResult(query, 1, 1, ["a"]) .should.eventually.have.property("data") .that.deep.equals([[json]]); });
it("should properly handle null parameters", function() { var query = conn.query("CREATE TABLE bar (a INT)").then(function() { return conn.query("INSERT INTO bar VALUES (?)", [null]); }).then(function() { return conn.query("SELECT * FROM bar"); }); return shouldHaveValidResult(query, 1, 1, ["a"]) .should.eventually.have.property("data") .that.deep.equals([[null]]); });
it("should properly convert booleans", function() { var query = conn.query("CREATE TABLE foo (a BOOLEAN, b BOOLEAN)").then(function() { return conn.query("INSERT INTO foo VALUES (true, false)"); }).then(function() { return conn.query("SELECT * FROM foo"); }); return shouldHaveValidResult(query, 1, 2, ["a", "b"]) .should.eventually.have.property("data") .that.deep.equals([[true, false]]); });
it("should properly handle NULL values", function() { var query = conn.query("CREATE TABLE foo (a INT)").then(function() { return conn.query("INSERT INTO foo VALUES (NULL)"); }).then(function() { return conn.query("SELECT * FROM foo"); }); return shouldHaveValidResult(query, 1, 1, ["a"]) .should.eventually.have.property("data") .that.deep.equals([[null]]); });
it("should properly handle json parameters", function() { var json = {a: 9, b: {c: 's'}, c: [1,2,3,{a: 1}]}; var query = conn.query("CREATE TABLE bar (a JSON)").then(function() { return conn.query("INSERT INTO bar VALUES (?)", [json]); }).then(function() { return conn.query("SELECT * FROM bar"); }); return shouldHaveValidResult(query, 1, 1, ["a"]) .should.eventually.have.property("data") .that.deep.equals([[json]]); });
it("should yield a valid pretty result on demand", function() { var query = conn.query( "CREATE TABLE foo(a INT, b FLOAT, c BLOB);\n" + "INSERT INTO foo VALUES (42,4.2,'42'),(43,4.3,'43'),(44,4.4,'44'),(45,4.5,'45')" ).then(function() { return conn.query("SELECT * FROM foo", true); }); return shouldHaveValidResult(query, 4, 3, ["a", "b", "c"]) .should.eventually.have.property("data") .that.deep.equals([ {a: 42, b: 4.2, c: "42"}, {a: 43, b: 4.3, c: "43"}, {a: 44, b: 4.4, c: "44"}, {a: 45, b: 4.5, c: "45"} ]); });