mirror of
https://github.com/balena-io/etcher.git
synced 2025-07-21 10:16:32 +00:00
Convert image-writer.spc.js to typescript
Change-type: patch
This commit is contained in:
parent
2d3776844c
commit
10b3f09e7e
@ -1,112 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
const _ = require('lodash')
|
||||
const m = require('mochainon')
|
||||
const ipc = require('node-ipc')
|
||||
const Bluebird = require('bluebird')
|
||||
// eslint-disable-next-line node/no-missing-require
|
||||
const flashState = require('../../../lib/gui/app/models/flash-state')
|
||||
// eslint-disable-next-line node/no-missing-require
|
||||
const imageWriter = require('../../../lib/gui/app/modules/image-writer')
|
||||
|
||||
describe('Browser: imageWriter', () => {
|
||||
describe('.flash()', () => {
|
||||
describe('given a successful write', () => {
|
||||
beforeEach(() => {
|
||||
this.performWriteStub = m.sinon.stub(imageWriter, 'performWrite')
|
||||
this.performWriteStub.returns(Bluebird.resolve({
|
||||
cancelled: false,
|
||||
sourceChecksum: '1234'
|
||||
}))
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
this.performWriteStub.restore()
|
||||
})
|
||||
|
||||
it('should set flashing to false when done', () => {
|
||||
flashState.unsetFlashingFlag({
|
||||
cancelled: false,
|
||||
sourceChecksum: '1234'
|
||||
})
|
||||
|
||||
imageWriter.flash('foo.img', [ '/dev/disk2' ]).finally(() => {
|
||||
m.chai.expect(flashState.isFlashing()).to.be.false
|
||||
})
|
||||
})
|
||||
|
||||
it('should prevent writing more than once', () => {
|
||||
flashState.unsetFlashingFlag({
|
||||
cancelled: false,
|
||||
sourceChecksum: '1234'
|
||||
})
|
||||
|
||||
const writing = imageWriter.flash('foo.img', [ '/dev/disk2' ])
|
||||
imageWriter.flash('foo.img', [ '/dev/disk2' ]).catch(_.noop)
|
||||
writing.finally(() => {
|
||||
m.chai.expect(this.performWriteStub).to.have.been.calledOnce
|
||||
})
|
||||
})
|
||||
|
||||
it('should reject the second flash attempt', () => {
|
||||
imageWriter.flash('foo.img', [ '/dev/disk2' ])
|
||||
|
||||
let rejectError = null
|
||||
imageWriter.flash('foo.img', [ '/dev/disk2' ]).catch((error) => {
|
||||
rejectError = error
|
||||
}).finally(() => {
|
||||
m.chai.expect(rejectError).to.be.an.instanceof(Error)
|
||||
m.chai.expect(rejectError.message).to.equal('There is already a flash in progress')
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('given an unsuccessful write', () => {
|
||||
beforeEach(() => {
|
||||
this.performWriteStub = m.sinon.stub(imageWriter, 'performWrite')
|
||||
this.error = new Error('write error')
|
||||
this.error.code = 'FOO'
|
||||
this.performWriteStub.returns(Bluebird.reject(this.error))
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
this.performWriteStub.restore()
|
||||
})
|
||||
|
||||
it('should set flashing to false when done', () => {
|
||||
imageWriter.flash('foo.img', [ '/dev/disk2' ]).catch(_.noop).finally(() => {
|
||||
m.chai.expect(flashState.isFlashing()).to.be.false
|
||||
})
|
||||
})
|
||||
|
||||
it('should set the error code in the flash results', () => {
|
||||
imageWriter.flash('foo.img', [ '/dev/disk2' ]).catch(_.noop).finally(() => {
|
||||
const flashResults = flashState.getFlashResults()
|
||||
m.chai.expect(flashResults.errorCode).to.equal('FOO')
|
||||
})
|
||||
})
|
||||
|
||||
it('should be rejected with the error', () => {
|
||||
flashState.unsetFlashingFlag({
|
||||
cancelled: false,
|
||||
sourceChecksum: '1234'
|
||||
})
|
||||
|
||||
let rejection
|
||||
imageWriter.flash('foo.img', [ '/dev/disk2' ]).catch((error) => {
|
||||
rejection = error
|
||||
}).finally(() => {
|
||||
m.chai.expect(rejection).to.be.an.instanceof(Error)
|
||||
m.chai.expect(rejection.message).to.equal('write error')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('.performWrite()', function () {
|
||||
it('should set the ipc config to silent', function () {
|
||||
// Reset this value as it can persist from other tests
|
||||
m.chai.expect(ipc.config.silent).to.be.true
|
||||
})
|
||||
})
|
||||
})
|
149
tests/gui/modules/image-writer.spec.ts
Normal file
149
tests/gui/modules/image-writer.spec.ts
Normal file
@ -0,0 +1,149 @@
|
||||
/*
|
||||
* Copyright 2020 balena.io
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { expect } from 'chai';
|
||||
import { Drive as DrivelistDrive } from 'drivelist';
|
||||
import * as _ from 'lodash';
|
||||
import * as ipc from 'node-ipc';
|
||||
import { assert, SinonStub, stub } from 'sinon';
|
||||
|
||||
import * as flashState from '../../../lib/gui/app/models/flash-state';
|
||||
import * as imageWriter from '../../../lib/gui/app/modules/image-writer';
|
||||
|
||||
// @ts-ignore
|
||||
const fakeDrive: DrivelistDrive = {};
|
||||
|
||||
describe('Browser: imageWriter', () => {
|
||||
describe('.flash()', () => {
|
||||
describe('given a successful write', () => {
|
||||
let performWriteStub: SinonStub;
|
||||
|
||||
beforeEach(() => {
|
||||
performWriteStub = stub(imageWriter, 'performWrite');
|
||||
performWriteStub.returns(
|
||||
Promise.resolve({
|
||||
cancelled: false,
|
||||
sourceChecksum: '1234',
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
performWriteStub.restore();
|
||||
});
|
||||
|
||||
it('should set flashing to false when done', () => {
|
||||
flashState.unsetFlashingFlag({
|
||||
cancelled: false,
|
||||
sourceChecksum: '1234',
|
||||
});
|
||||
|
||||
imageWriter.flash('foo.img', [fakeDrive]).finally(() => {
|
||||
expect(flashState.isFlashing()).to.be.false;
|
||||
});
|
||||
});
|
||||
|
||||
it('should prevent writing more than once', () => {
|
||||
flashState.unsetFlashingFlag({
|
||||
cancelled: false,
|
||||
sourceChecksum: '1234',
|
||||
});
|
||||
|
||||
const writing = imageWriter.flash('foo.img', [fakeDrive]);
|
||||
imageWriter.flash('foo.img', [fakeDrive]).catch(_.noop);
|
||||
writing.finally(() => {
|
||||
assert.calledOnce(performWriteStub);
|
||||
});
|
||||
});
|
||||
|
||||
it('should reject the second flash attempt', () => {
|
||||
imageWriter.flash('foo.img', [fakeDrive]);
|
||||
|
||||
let rejectError: Error;
|
||||
imageWriter
|
||||
.flash('foo.img', [fakeDrive])
|
||||
.catch(error => {
|
||||
rejectError = error;
|
||||
})
|
||||
.finally(() => {
|
||||
expect(rejectError).to.be.an.instanceof(Error);
|
||||
expect(rejectError!.message).to.equal(
|
||||
'There is already a flash in progress',
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('given an unsuccessful write', () => {
|
||||
let performWriteStub: SinonStub;
|
||||
|
||||
beforeEach(() => {
|
||||
performWriteStub = stub(imageWriter, 'performWrite');
|
||||
const error: Error & { code?: string } = new Error('write error');
|
||||
error.code = 'FOO';
|
||||
performWriteStub.returns(Promise.reject(error));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
performWriteStub.restore();
|
||||
});
|
||||
|
||||
it('should set flashing to false when done', () => {
|
||||
imageWriter
|
||||
.flash('foo.img', [fakeDrive])
|
||||
.catch(_.noop)
|
||||
.finally(() => {
|
||||
expect(flashState.isFlashing()).to.be.false;
|
||||
});
|
||||
});
|
||||
|
||||
it('should set the error code in the flash results', () => {
|
||||
imageWriter
|
||||
.flash('foo.img', [fakeDrive])
|
||||
.catch(_.noop)
|
||||
.finally(() => {
|
||||
const flashResults = flashState.getFlashResults();
|
||||
expect(flashResults.errorCode).to.equal('FOO');
|
||||
});
|
||||
});
|
||||
|
||||
it('should be rejected with the error', () => {
|
||||
flashState.unsetFlashingFlag({
|
||||
cancelled: false,
|
||||
sourceChecksum: '1234',
|
||||
});
|
||||
|
||||
let rejection: Error;
|
||||
imageWriter
|
||||
.flash('foo.img', [fakeDrive])
|
||||
.catch(error => {
|
||||
rejection = error;
|
||||
})
|
||||
.finally(() => {
|
||||
expect(rejection).to.be.an.instanceof(Error);
|
||||
expect(rejection!.message).to.equal('write error');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('.performWrite()', function() {
|
||||
it('should set the ipc config to silent', function() {
|
||||
// Reset this value as it can persist from other tests
|
||||
expect(ipc.config.silent).to.be.true;
|
||||
});
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user