UNPKG

machinepack-postgresql

Version:

Structured Node.js bindings for connecting and running queries against a PostgreSQL database.

160 lines (138 loc) 4.38 kB
var assert = require('assert'); var Pack = require('../../../'); describe('Transactional ::', function() { describe('Commit Transaction', function() { var manager; var connectionA; var connectionB; // Create a manager, two connections, and a table before(function(done) { // Needed to dynamically get the host using the docker container var host = process.env.POSTGRES_1_PORT_5432_TCP_ADDR || 'localhost'; Pack.createManager({ connectionString: 'postgres://mp:mp@' + host + ':5432/mppg' }) .exec(function(err, report) { if (err) { return done(err); } // Store the manager manager = report.manager; Pack.getConnection({ manager: manager }) .exec(function(err, report) { if (err) { return done(err); } // Store the connection connectionA = report.connection; Pack.getConnection({ manager: manager }) .exec(function(err, report) { if (err) { return done(err); } // Store the connection connectionB = report.connection; // Create a table to use for testing Pack.sendNativeQuery({ connection: connectionA, nativeQuery: 'CREATE TABLE IF NOT EXISTS people(id serial primary key, name varchar(255));' }) .exec(function(err) { if (err) { return done(err); } return done(); }); }); }); }); }); // Afterwards destroy the table and release the connections after(function(done) { Pack.sendNativeQuery({ connection: connectionA, nativeQuery: 'DROP TABLE people;' }) .exec(function(err) { if (err) { return done(err); } Pack.releaseConnection({ connection: connectionA }) .exec(function(err) { if (err) { return done(err); } Pack.releaseConnection({ connection: connectionB }).exec(done); }); }); }); // To Test: // * Open a transaction on connectionA and insert a record into the DB // * Run a query on connectionB and make sure the record doesn't exist // * Commit the transaction // * Run the select query again and the record should exist it('should perform a transaction and make sure the results are commited correctly', function(done) { // Start a transaction on connection A Pack.beginTransaction({ connection: connectionA }) .exec(function(err) { if (err) { return done(err); } // Insert a record using the transaction Pack.sendNativeQuery({ connection: connectionA, nativeQuery: 'INSERT INTO "people" (name) VALUES (\'hugo\') returning "id";' }) .exec(function(err) { if (err) { return done(err); } // Query the table using connection B and ensure the record doesn't exist Pack.sendNativeQuery({ connection: connectionB, nativeQuery: 'SELECT * FROM "people";' }) .exec(function(err, report) { if (err) { return done(err); } // Ensure no results were returned assert.equal(report.result.rowCount, 0); // Commit the transaction Pack.commitTransaction({ connection: connectionA }) .exec(function(err) { if (err) { return done(err); } // Query the table using connection B and ensure the record does exist Pack.sendNativeQuery({ connection: connectionB, nativeQuery: 'SELECT * FROM "people";' }) .exec(function(err, report) { if (err) { return done(err); } // Ensure 1 result was returned assert.equal(report.result.rowCount, 1); return done(); }); }); }); }); }); }); }); });