appium-doctor
Version:
Test environment for fitness to run Appium
105 lines (90 loc) • 4.01 kB
JavaScript
// transpile:mocha
import chai from 'chai';
import { fs } from 'appium-support';
import * as tp from 'teen_process';
import NodeDetector from '../lib/node-detector';
import B from 'bluebird';
import { withMocks, verify } from 'appium-test-support';
chai.should();
let expect = chai.expect;
describe('NodeDetector', withMocks({fs, tp}, (mocks, S) => {
it('retrieveInCommonPlaces - success', async () => {
mocks.fs.expects('exists').once().returns(B.resolve(true));
(await NodeDetector.retrieveInCommonPlaces())
.should.equal('/usr/local/bin/node');
verify(mocks);
});
it('retrieveInCommonPlaces - failure', async () => {
mocks.fs.expects('exists').twice().returns(B.resolve(false));
expect(await NodeDetector.retrieveInCommonPlaces()).to.be.a('null');
verify(mocks);
});
// retrieveUsingWhichCommand
let testRetrieveWithScript = (method) => {
it(method + ' - success', async () => {
mocks.tp.expects('exec').once().returns(
B.resolve({stdout: '/a/b/c/d\n', stderr: ''}));
mocks.fs.expects('exists').once().returns(B.resolve(true));
(await NodeDetector[method]())
.should.equal('/a/b/c/d');
verify(mocks);
});
it(method + ' - failure - path not found ', async () => {
mocks.tp.expects('exec').once().returns(
B.resolve({stdout: 'aaa not found\n', stderr: ''}));
expect(await NodeDetector[method]()).to.be.a('null');
verify(mocks);
});
it(method + ' - failure - path not exist', async () => {
mocks.tp.expects('exec').once().returns(
B.resolve({stdout: '/a/b/c/d\n', stderr: ''}));
mocks.fs.expects('exists').once().returns(B.resolve(false));
expect(await NodeDetector[method]()).to.be.a('null');
});
};
testRetrieveWithScript('retrieveUsingWhichCommand');
testRetrieveWithScript('retrieveUsingAppleScript');
it('retrieveUsingAppiumConfigFile - success', async () => {
mocks.fs.expects('exists').twice().returns(B.resolve(true));
mocks.fs.expects('readFile').once().returns(
B.resolve('{"node_bin": "/a/b/c/d"}'));
(await NodeDetector.retrieveUsingAppiumConfigFile())
.should.equal('/a/b/c/d');
verify(mocks);
});
it('retrieveUsingAppiumConfigFile - failure - not json', async () => {
mocks.fs.expects('exists').once().returns(B.resolve(true));
mocks.fs.expects('readFile').once().returns(
B.resolve('{node_bin: "/a/b/c/d"}'));
expect(await NodeDetector.retrieveUsingAppiumConfigFile())
.to.be.a('null');
verify(mocks);
});
it('retrieveUsingAppiumConfigFile - failure - path does not exist', async () => {
mocks.fs.expects('exists').once().returns(B.resolve(true));
mocks.fs.expects('exists').once().returns(B.resolve(false));
mocks.fs.expects('readFile').once().returns(
B.resolve('{"node_bin": "/a/b/c/d"}'));
expect(await NodeDetector.retrieveUsingAppiumConfigFile())
.to.be.a('null');
verify(mocks);
});
it('checkForNodeBinary - success', async () => {
mocks.NodeDetector = S.sandbox.mock(NodeDetector);
mocks.NodeDetector.expects('retrieveInCommonPlaces').once().returns(null);
mocks.NodeDetector.expects('retrieveUsingWhichCommand').once().returns(null);
mocks.NodeDetector.expects('retrieveUsingAppleScript').returns('/a/b/c/d');
mocks.NodeDetector.expects('retrieveUsingAppiumConfigFile').never();
(await NodeDetector.detect()).should.equal('/a/b/c/d');
verify(mocks);
});
it('checkForNodeBinary - failure', async () => {
mocks.NodeDetector = S.sandbox.mock(NodeDetector);
mocks.NodeDetector.expects('retrieveInCommonPlaces').once().returns(null);
mocks.NodeDetector.expects('retrieveUsingWhichCommand').once().returns(null);
mocks.NodeDetector.expects('retrieveUsingAppleScript').once().returns(null);
mocks.NodeDetector.expects('retrieveUsingAppiumConfigFile').once().returns(null);
expect(await NodeDetector.detect()).to.be.a('null');
verify(mocks);
});
}));