diff --git a/test-complete/nodejs-documents-binary-pdf.js b/test-complete/nodejs-documents-binary-pdf.js index 02940dc8..0cd939d3 100644 --- a/test-complete/nodejs-documents-binary-pdf.js +++ b/test-complete/nodejs-documents-binary-pdf.js @@ -1,87 +1,72 @@ /* * Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ -var should = require('should'); +const should = require('should'); -var fs = require('fs'); -var stream = require('stream'); -var util = require('util'); +const fs = require('fs'); +const stream = require('stream'); +const util = require('util'); -var concatStream = require('concat-stream'); -var valcheck = require('core-util-is'); -var testconfig = require('../etc/test-config-qa.js'); +const concatStream = require('concat-stream'); +const valcheck = require('core-util-is'); +const testconfig = require('../etc/test-config-qa.js'); -var marklogic = require('../'); -var q = marklogic.queryBuilder; +const marklogic = require('../'); +const q = marklogic.queryBuilder; + +const dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection); +const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection); +const dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection); -var dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection); -var dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection); -var dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection); describe('Binary documents test', function () { - var binaryPath = __dirname + '/data/somePdfFile.pdf'; - var uri = '/test/binary/somePdfFile.pdf'; - var binaryValue = null; - before(function (done) { - this.timeout(10000); - fs.createReadStream(binaryPath). - pipe(concatStream({ encoding: 'buffer' }, function (value) { - binaryValue = value; - done(); - })); - }); + const binaryPath = __dirname + '/data/somePdfFile.pdf'; + let binaryValue = null; - it('should write the binary with Readable stream', function (done) { - this.timeout(10000); - var uri = '/test/write/somePdfFile.pdf'; - var readableBinary = new ValueStream(binaryValue); - //readableBinary.pause(); - dbWriter.documents.write({ - uri: uri, - contentType: 'application/pdf', - quality: 25, - properties: { prop1: 'foo' }, - content: readableBinary - }). - result(function (response) { - response.should.have.property('documents'); - done(); - }, done); - }); + const uri = '/test/write/somePdfFile.pdf'; - it('should read the binary with Readable stream', function (done) { - this.timeout(10000); - var uri = '/test/write/somePdfFile.pdf'; - dbReader.documents.read(uri). - result(function (documents) { - //console.log(JSON.stringify(documents, null, 2)); - JSON.stringify(binaryValue).should.equal( - JSON.stringify(documents[0].content)); - done(); - }, done); + before(async function () { + binaryValue = await new Promise((resolve, reject) => { + fs.createReadStream(binaryPath) + .pipe(concatStream({ encoding: 'buffer' }, function (value) { + resolve(value); + })) + .on('error', reject); + }); }); - it('should read the binary document metadata', function (done) { - this.timeout(10000); - var uri = '/test/write/somePdfFile.pdf'; - dbReader.documents.read({ uris: uri, categories: ['metadata'] }) - .result(function (documents) { - var document = documents[0]; - document.quality.should.equal(25); - document.properties.prop1.should.equal('foo'); - done(); - }, done); - }); + it('should write, read, read metadata, verify and delete the binary pdf content', async function () { - it('should delete the pdf file', function (done) { - dbAdmin.documents.removeAll({ - all: true - }). - result(function (response) { - done(); - }, done); - }); + const readableBinary = new ValueStream(binaryValue); + try { + const writeResponse = await dbWriter.documents.write({ + uri: uri, + contentType: 'application/pdf', + quality: 25, + properties: { prop1: 'foo' }, + content: readableBinary + }).result(); + writeResponse.should.have.property('documents'); + const docReadResp = await dbReader.documents.read(uri).result(); + docReadResp[0].contentType.should.equal('application/pdf'); + docReadResp[0].content.length.should.equal(binaryValue.length); + Buffer.compare(binaryValue, docReadResp[0].content).should.equal(0); + + const docReadRespMeta = await dbReader.documents.read( + { uris: uri, categories: ['metadata'] } + ).result(); + docReadRespMeta[0].quality.should.equal(25); + docReadRespMeta[0].properties.prop1.should.equal('foo'); + + // original test deleted all documents. This one just deletes the one we wrote. + await dbAdmin.documents.remove(uri).result(); + + } catch (error) { + console.error(error); + throw error; + } + }); }); function ValueStream(value) { diff --git a/test-complete/nodejs-documents-read-chunk.js b/test-complete/nodejs-documents-read-chunk.js index 65784cf2..8855de11 100644 --- a/test-complete/nodejs-documents-read-chunk.js +++ b/test-complete/nodejs-documents-read-chunk.js @@ -1,83 +1,84 @@ /* * Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ -var should = require('should'); +const should = require('should'); -var fs = require('fs'); -var stream = require('stream'); -var util = require('util'); +const fs = require('fs'); +const stream = require('stream'); +const util = require('util'); -var concatStream = require('concat-stream'); -var valcheck = require('core-util-is'); -var testconfig = require('../etc/test-config-qa.js'); +const concatStream = require('concat-stream'); +const valcheck = require('core-util-is'); +const testconfig = require('../etc/test-config-qa.js'); -var marklogic = require('../'); -var q = marklogic.queryBuilder; +const marklogic = require('../'); +const q = marklogic.queryBuilder; -var dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection); -var dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection); -var dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection); +const dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection); +const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection); +const dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection); describe('Binary documents test', function () { - var binaryPath = __dirname + '/data/somePdfFile.pdf'; - var uri = '/test/binary/somePdfFile.pdf'; - var binaryValue = null; - before(function (done) { - this.timeout(10000); - fs.createReadStream(binaryPath). - pipe(concatStream({ encoding: 'buffer' }, function (value) { - binaryValue = value; - done(); - })); - }); + const binaryPath = __dirname + '/data/somePdfFile.pdf'; + let binaryValue = null; + + const uri = '/test/binary/somePdfFile.pdf'; - it('should write the binary with Readable stream', function (done) { - this.timeout(10000); - var uri = '/test/write/somePdfFile.pdf'; - var readableBinary = new ValueStream(binaryValue); - //readableBinary.pause(); - dbWriter.documents.write({ - uri: uri, - contentType: 'application/pdf', - quality: 25, - properties: { prop1: 'foo' }, - content: readableBinary - }). - result(function (response) { - response.should.have.property('documents'); - done(); - }, done); + before(async function () { + binaryValue = await new Promise((resolve, reject) => { + fs.createReadStream(binaryPath) + .pipe(concatStream({ encoding: 'buffer' }, function (value) { + resolve(value); + })) + .on('error', reject); + }); }); - it('should wait for the document to be written', function (done) { - setTimeout(function () { - done(); - }, 10000); - }); + it('should write, read using stream, verify and delete the binary content', async function () { - it('should read the binary in chunk', function (done) { - this.timeout(10000); - var uri = '/test/write/somePdfFile.pdf'; - setTimeout(function () { - dbReader.documents.read(uri).stream('chunked'). - on('data', function (data) { - var strData = data.toString(); - strData.should.containEql('CVISION Technologies'); - }). - on('end', function () { - done(); - }, done); - }, 3000); - }); - it('should delete all documents', function (done) { - dbAdmin.documents.removeAll({ - all: true - }). - result(function (response) { - done(); - }, done); - }); + let readableBinary = new ValueStream(binaryValue); + try { + const response = await dbWriter.documents.write({ + uri: uri, + contentType: 'application/pdf', + quality: 25, + properties: { prop1: 'foo' }, + content: readableBinary + }).result(); + + response.should.have.property('documents'); + const streamData = await new Promise((resolve, reject) => { + const chunks = []; + const readStream = dbReader.documents.read(uri).stream('chunked'); + + readStream.on('data', function (data) { + chunks.push(data); + }); + + readStream.on('end', function () { + resolve(Buffer.concat(chunks)); + }); + + readStream.on('error', function (error) { + reject(error); + }); + }); + + Buffer.compare(binaryValue, streamData).should.equal(0); + + // Verify the binary content has a string near the end of the file + const strData = streamData.toString(); + strData.should.containEql('CVISION Technologies'); + + // original test deleted all documents. This one just deletes the one we wrote. + await dbAdmin.documents.remove(uri).result(); + + } catch (error) { + console.error("Error writing document: ", error); + throw error; + } + }); }); function ValueStream(value) {