From 0580b6f3d8b4064c684996f2841de59ec260215d Mon Sep 17 00:00:00 2001 From: Julien Vanier Date: Fri, 7 Feb 2020 10:37:00 -0500 Subject: [PATCH 1/2] API error for ownership transfer is now in an array --- src/cmd/cloud.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/cloud.js b/src/cmd/cloud.js index 953614571..c8fe1dc34 100644 --- a/src/cmd/cloud.js +++ b/src/cmd/cloud.js @@ -54,7 +54,7 @@ class CloudCommand { return api.claimDevice(deviceId).then(() => { console.log('Successfully claimed device ' + deviceId); }, (err) => { - if (err && typeof err === 'string' && err.indexOf('That belongs to someone else.') >= 0) { + if (err && typeof err[0] === 'string' && err[0].indexOf('That belongs to someone else.') >= 0) { return prompt([{ type: 'confirm', name: 'transfer', From 5133e95a0147c19077d1ce17703d934b686f8b64 Mon Sep 17 00:00:00 2001 From: busticated Date: Fri, 7 Feb 2020 12:23:31 -0800 Subject: [PATCH 2/2] add e2e tests for `cloud claim` error scenarios --- test/e2e/cloud.e2e.js | 34 ++++++++++++++++++++++++++++++++++ test/lib/env.js | 10 +++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/test/e2e/cloud.e2e.js b/test/e2e/cloud.e2e.js index 9474cc70b..8183a77c0 100644 --- a/test/e2e/cloud.e2e.js +++ b/test/e2e/cloud.e2e.js @@ -1,11 +1,14 @@ const path = require('path'); const capitalize = require('lodash/capitalize'); const { expect } = require('../setup'); +const { delay } = require('../lib/mocha-utils'); +const stripANSI = require('../lib/ansi-strip'); const cli = require('../lib/cli'); const { DEVICE_ID, DEVICE_NAME, DEVICE_PLATFORM_NAME, + FOREIGN_DEVICE_ID, PATH_TMP_DIR, PATH_PROJ_STROBY_INO, PATH_FIXTURES_PROJECTS_DIR @@ -184,6 +187,37 @@ describe('Cloud Commands [@device]', () => { expect(exitCode).to.equal(0); }); + it('Fails to claim an unknown device', async () => { + const invalidDeviceID = '1234567890'; + const args = ['cloud', 'claim', invalidDeviceID]; + const { stdout, stderr, exitCode } = await cli.run(args); + const log = [ + `Claiming device ${invalidDeviceID}`, + 'Failed to claim device: device not found' + ]; + + expect(stdout.split('\n')).to.include.members(log); + expect(stderr).to.equal(''); + expect(exitCode).to.equal(1); + }); + + it('Fails to claim a device owned by someone else', async () => { + const args = ['cloud', 'claim', FOREIGN_DEVICE_ID]; + const subprocess = cli.run(args); + + await delay(1000); + subprocess.stdin.write('n'); + subprocess.stdin.write('\n'); + + const { all, exitCode } = await subprocess; + const log = stripANSI(all); + + expect(log).to.include(`Claiming device ${FOREIGN_DEVICE_ID}`); + expect(log).to.include('That device belongs to someone else. Would you like to request a transfer?'); + expect(log).to.include('Failed to claim device: You cannot claim a device owned by someone else'); + expect(exitCode).to.equal(1); + }); + it('Names a device', async () => { const name = `${DEVICE_NAME}-updated`; const args = ['cloud', 'name', DEVICE_ID, name]; diff --git a/test/lib/env.js b/test/lib/env.js index a6da67607..0d95e4167 100644 --- a/test/lib/env.js +++ b/test/lib/env.js @@ -25,7 +25,11 @@ const { E2E_DEVICE_ID: DEVICE_ID, E2E_DEVICE_NAME: DEVICE_NAME, E2E_DEVICE_PLATFORM_ID: DEVICE_PLATFORM_ID, - E2E_DEVICE_PLATFORM_NAME: DEVICE_PLATFORM_NAME + E2E_DEVICE_PLATFORM_NAME: DEVICE_PLATFORM_NAME, + E2E_FOREIGN_DEVICE_ID: FOREIGN_DEVICE_ID, + E2E_FOREIGN_DEVICE_NAME: FOREIGN_DEVICE_NAME, + E2E_FOREIGN_DEVICE_PLATFORM_ID: FOREIGN_DEVICE_PLATFORM_ID, + E2E_FOREIGN_DEVICE_PLATFORM_NAME: FOREIGN_DEVICE_PLATFORM_NAME } = process.env; @@ -36,6 +40,10 @@ module.exports = { DEVICE_NAME, DEVICE_PLATFORM_ID, DEVICE_PLATFORM_NAME, + FOREIGN_DEVICE_ID, + FOREIGN_DEVICE_NAME, + FOREIGN_DEVICE_PLATFORM_ID, + FOREIGN_DEVICE_PLATFORM_NAME, PATH_REPO_DIR, PATH_TEST_DIR, PATH_FIXTURES_DIR,