| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- import { vi, describe, beforeEach, it } from 'vitest'
- import sinon from 'sinon'
- import path from 'node:path'
- const modulePath = path.join(
- import.meta.dirname,
- '../../../app/js/OutputFileOptimiser'
- )
- describe('OutputFileOptimiser', function () {
- beforeEach(async function (ctx) {
- vi.doMock('fs', () => ({
- default: (ctx.fs = {}),
- }))
- vi.doMock('path', () => ({
- default: (ctx.Path = {}),
- }))
- vi.doMock('child_process', () => ({
- default: { spawn: (ctx.spawn = sinon.stub()) },
- }))
- vi.doMock('@overleaf/metrics', () => ({
- default: {},
- }))
- ctx.OutputFileOptimiser = (await import(modulePath)).default
- ctx.directory = '/test/dir'
- return (ctx.callback = sinon.stub())
- })
- describe('optimiseFile', function () {
- beforeEach(function (ctx) {
- ctx.src = './output.pdf'
- return (ctx.dst = './output.pdf')
- })
- describe('when the file is not a pdf file', function () {
- beforeEach(async function (ctx) {
- await new Promise((resolve, reject) => {
- ctx.src = './output.log'
- ctx.OutputFileOptimiser.checkIfPDFIsOptimised = sinon
- .stub()
- .callsArgWith(1, null, false)
- ctx.OutputFileOptimiser.optimisePDF = sinon
- .stub()
- .callsArgWith(2, null)
- ctx.OutputFileOptimiser.optimiseFile(ctx.src, ctx.dst, err => {
- if (err) reject(err)
- resolve()
- })
- })
- })
- it('should not check if the file is optimised', function (ctx) {
- return ctx.OutputFileOptimiser.checkIfPDFIsOptimised
- .calledWith(ctx.src)
- .should.equal(false)
- })
- return it('should not optimise the file', function (ctx) {
- return ctx.OutputFileOptimiser.optimisePDF
- .calledWith(ctx.src, ctx.dst)
- .should.equal(false)
- })
- })
- describe('when the pdf file is not optimised', function () {
- beforeEach(async function (ctx) {
- await new Promise((resolve, reject) => {
- ctx.OutputFileOptimiser.checkIfPDFIsOptimised = sinon
- .stub()
- .callsArgWith(1, null, false)
- ctx.OutputFileOptimiser.optimisePDF = sinon
- .stub()
- .callsArgWith(2, null)
- ctx.OutputFileOptimiser.optimiseFile(ctx.src, ctx.dst, err => {
- if (err) reject(err)
- resolve()
- })
- })
- })
- it('should check if the pdf is optimised', function (ctx) {
- return ctx.OutputFileOptimiser.checkIfPDFIsOptimised
- .calledWith(ctx.src)
- .should.equal(true)
- })
- return it('should optimise the pdf', function (ctx) {
- return ctx.OutputFileOptimiser.optimisePDF
- .calledWith(ctx.src, ctx.dst)
- .should.equal(true)
- })
- })
- return describe('when the pdf file is optimised', function () {
- beforeEach(async function (ctx) {
- await new Promise((resolve, reject) => {
- ctx.OutputFileOptimiser.checkIfPDFIsOptimised = sinon
- .stub()
- .callsArgWith(1, null, true)
- ctx.OutputFileOptimiser.optimisePDF = sinon
- .stub()
- .callsArgWith(2, null)
- ctx.OutputFileOptimiser.optimiseFile(ctx.src, ctx.dst, err => {
- if (err) reject(err)
- resolve()
- })
- })
- })
- it('should check if the pdf is optimised', function (ctx) {
- ctx.OutputFileOptimiser.checkIfPDFIsOptimised
- .calledWith(ctx.src)
- .should.equal(true)
- })
- it('should not optimise the pdf', function (ctx) {
- ctx.OutputFileOptimiser.optimisePDF
- .calledWith(ctx.src, ctx.dst)
- .should.equal(false)
- })
- })
- })
- describe('checkIfPDFISOptimised', function () {
- beforeEach(function (ctx) {
- ctx.callback = sinon.stub()
- ctx.fd = 1234
- ctx.fs.open = sinon.stub().yields(null, ctx.fd)
- ctx.fs.read = sinon
- .stub()
- .withArgs(ctx.fd)
- .yields(null, 100, Buffer.from('hello /Linearized 1'))
- ctx.fs.close = sinon.stub().withArgs(ctx.fd).yields(null)
- ctx.OutputFileOptimiser.checkIfPDFIsOptimised(ctx.src, ctx.callback)
- })
- describe('for a linearised file', function () {
- beforeEach(function (ctx) {
- ctx.fs.read = sinon
- .stub()
- .withArgs(ctx.fd)
- .yields(null, 100, Buffer.from('hello /Linearized 1'))
- ctx.OutputFileOptimiser.checkIfPDFIsOptimised(ctx.src, ctx.callback)
- })
- it('should open the file', function (ctx) {
- ctx.fs.open.calledWith(ctx.src, 'r').should.equal(true)
- })
- it('should read the header', function (ctx) {
- ctx.fs.read.calledWith(ctx.fd).should.equal(true)
- })
- it('should close the file', function (ctx) {
- ctx.fs.close.calledWith(ctx.fd).should.equal(true)
- })
- it('should call the callback with a true result', function (ctx) {
- ctx.callback.calledWith(null, true).should.equal(true)
- })
- })
- describe('for an unlinearised file', function () {
- beforeEach(function (ctx) {
- ctx.fs.read = sinon
- .stub()
- .withArgs(ctx.fd)
- .yields(null, 100, Buffer.from('hello not linearized 1'))
- ctx.OutputFileOptimiser.checkIfPDFIsOptimised(ctx.src, ctx.callback)
- })
- it('should open the file', function (ctx) {
- ctx.fs.open.calledWith(ctx.src, 'r').should.equal(true)
- })
- it('should read the header', function (ctx) {
- ctx.fs.read.calledWith(ctx.fd).should.equal(true)
- })
- it('should close the file', function (ctx) {
- ctx.fs.close.calledWith(ctx.fd).should.equal(true)
- })
- it('should call the callback with a false result', function (ctx) {
- ctx.callback.calledWith(null, false).should.equal(true)
- })
- })
- })
- })
|