Skip to content

Commit

Permalink
[#16] - process errors while retrieving latest version
Browse files Browse the repository at this point in the history
  • Loading branch information
ilg-ul committed Jul 20, 2021
1 parent faf8539 commit b8641d3
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 4 deletions.
20 changes: 16 additions & 4 deletions lib/update-checker.js
Expand Up @@ -40,7 +40,7 @@ const fsPromises = require('fs').promises
// ----------------------------------------------------------------------------

// https://www.npmjs.com/package/latest-version
const latestVersion = require('latest-version')
const latestVersionPromise = require('latest-version')

// https://www.npmjs.com/package/is-path-inside
// Note v4 no longer supports `require()`, but `import`.
Expand Down Expand Up @@ -200,7 +200,7 @@ class UpdateChecker {
* @returns {Promise} A promise to retrieve the version.
*/
prepareLatestVersionPromise () {
return latestVersion(this.packageName)
return latestVersionPromise(this.packageName)
}

/**
Expand All @@ -223,8 +223,20 @@ class UpdateChecker {
return
}

// Actively await for the promise to complete.
const latestVersion = await this.latestVersionPromise
let latestVersion
try {
// Actively await for the promise to complete.
latestVersion = await this.latestVersionPromise
} catch (err) {
if (log.isDebug) {
log.debug(err)
} else {
log.warning(err.message)
}
this.returnedError = err
return
}

log.trace(`${this.constructor.name}:` +
` latest ${this.packageName}${latestVersion}`)

Expand Down
6 changes: 6 additions & 0 deletions test/common.js
Expand Up @@ -38,6 +38,12 @@ const util = require('util')
class MockLog {
constructor () {
this.lines = []
this.isDebug = false
}

warning (msg = '', ...args) {
const str = util.format(msg, ...args)
this.lines.push('warning: ' + str)
}

info (msg = '', ...args) {
Expand Down
53 changes: 53 additions & 0 deletions test/tap/020-checker.js
Expand Up @@ -396,4 +396,57 @@ test('outdated version untuned', async (t) => {
t.end()
})

test('missing package', async (t) => {
const mockLog = new MockLog()
const uc = new UpdateChecker({
log: mockLog,
packageName: '@xpack/no-such-package',
packageVersion: '0.0.0',
timestampsFolderAbsolutePath: timestampsFolderAbsolutePath,
isCI: false,
isTTY: true,
env: {},
isRunningAsRoot: false,
isInstalledAsRoot: false,
isInstalledGlobally: false
})

await uc.clearTimestamp()
await uc.initiateVersionRetrieval()
t.ok(uc.latestVersionPromise !== undefined, 'promise created')

await uc.notifyIfUpdateIsAvailable()
t.ok(uc.returnedError !== undefined, 'has error')
// console.log(uc.returnedError)

t.end()
})

test('missing package debug', async (t) => {
const mockLog = new MockLog()
mockLog.isDebug = true
const uc = new UpdateChecker({
log: mockLog,
packageName: '@xpack/no-such-package',
packageVersion: '0.0.0',
timestampsFolderAbsolutePath: timestampsFolderAbsolutePath,
isCI: false,
isTTY: true,
env: {},
isRunningAsRoot: false,
isInstalledAsRoot: false,
isInstalledGlobally: false
})

await uc.clearTimestamp()
await uc.initiateVersionRetrieval()
t.ok(uc.latestVersionPromise !== undefined, 'promise created')

await uc.notifyIfUpdateIsAvailable()
t.ok(uc.returnedError !== undefined, 'has error')
// console.log(uc.returnedError.message)

t.end()
})

// ----------------------------------------------------------------------------

0 comments on commit b8641d3

Please sign in to comment.