From a5b19cfff93faa74ee65c2c7c4fc92d3df96dbe7 Mon Sep 17 00:00:00 2001 From: ehmicky Date: Wed, 13 May 2020 18:23:49 +0200 Subject: [PATCH] Assign a default status for plugins that do not use `utils.status.show()` --- packages/build/src/core/commands.js | 14 +- packages/build/src/core/status.js | 51 ++- .../error_status_error_override/netlify.toml | 2 + .../error_status_error_override/plugin.js | 8 + .../fixtures/error_status_override/plugin.js | 7 + .../status/fixtures/implicit_one/netlify.toml | 2 + .../status/fixtures/implicit_one/plugin.js | 3 + .../fixtures/implicit_onend/netlify.toml | 2 + .../status/fixtures/implicit_onend/plugin.js | 3 + .../fixtures/implicit_several/netlify.toml | 2 + .../fixtures/implicit_several/plugin.js | 4 + .../status/fixtures/no_implicit/netlify.toml | 2 + .../status/fixtures/no_implicit/plugin.js | 10 + .../fixtures/no_implicit_none/netlify.toml | 2 + .../fixtures/no_implicit_none/plugin.js | 1 + .../fixtures/no_implicit_onerror/netlify.toml | 2 + .../fixtures/no_implicit_onerror/plugin.js | 3 + .../success_status_override/netlify.toml | 2 + .../success_status_override/plugin.js | 16 + .../plugins/status/snapshots/tests.js.md | 388 +++++++++++++++++- .../plugins/status/snapshots/tests.js.snap | Bin 1472 -> 1874 bytes packages/build/tests/plugins/status/tests.js | 34 +- 22 files changed, 532 insertions(+), 26 deletions(-) create mode 100644 packages/build/tests/plugins/status/fixtures/error_status_error_override/netlify.toml create mode 100644 packages/build/tests/plugins/status/fixtures/error_status_error_override/plugin.js create mode 100644 packages/build/tests/plugins/status/fixtures/implicit_one/netlify.toml create mode 100644 packages/build/tests/plugins/status/fixtures/implicit_one/plugin.js create mode 100644 packages/build/tests/plugins/status/fixtures/implicit_onend/netlify.toml create mode 100644 packages/build/tests/plugins/status/fixtures/implicit_onend/plugin.js create mode 100644 packages/build/tests/plugins/status/fixtures/implicit_several/netlify.toml create mode 100644 packages/build/tests/plugins/status/fixtures/implicit_several/plugin.js create mode 100644 packages/build/tests/plugins/status/fixtures/no_implicit/netlify.toml create mode 100644 packages/build/tests/plugins/status/fixtures/no_implicit/plugin.js create mode 100644 packages/build/tests/plugins/status/fixtures/no_implicit_none/netlify.toml create mode 100644 packages/build/tests/plugins/status/fixtures/no_implicit_none/plugin.js create mode 100644 packages/build/tests/plugins/status/fixtures/no_implicit_onerror/netlify.toml create mode 100644 packages/build/tests/plugins/status/fixtures/no_implicit_onerror/plugin.js create mode 100644 packages/build/tests/plugins/status/fixtures/success_status_override/netlify.toml create mode 100644 packages/build/tests/plugins/status/fixtures/success_status_override/plugin.js diff --git a/packages/build/src/core/commands.js b/packages/build/src/core/commands.js index 06a31785bf..51037a8751 100644 --- a/packages/build/src/core/commands.js +++ b/packages/build/src/core/commands.js @@ -79,7 +79,7 @@ const runCommands = async function({ commands, configPath, buildDir, nodePath, c index, childEnv, envChanges, - statuses, + commands, errorMonitor, error, failedPlugins, @@ -113,7 +113,7 @@ const runCommand = async function({ index, childEnv, envChanges, - statuses, + commands, errorMonitor, error, failedPlugins, @@ -138,7 +138,7 @@ const runCommand = async function({ nodePath, childEnv, envChanges, - statuses, + commands, error, }) @@ -173,14 +173,14 @@ const fireCommand = function({ nodePath, childEnv, envChanges, - statuses, + commands, error, }) { if (buildCommand !== undefined) { return fireBuildCommand({ buildCommand, configPath, buildDir, nodePath, childEnv, envChanges }) } - return firePluginCommand({ event, childProcess, package, packageJson, local, envChanges, statuses, error }) + return firePluginCommand({ event, childProcess, package, packageJson, local, envChanges, commands, error }) } // Fire `build.command` @@ -218,7 +218,7 @@ const firePluginCommand = async function({ packageJson, local, envChanges, - statuses, + commands, error, }) { pipeOutput(childProcess) @@ -230,7 +230,7 @@ const firePluginCommand = async function({ { event, error, envChanges }, { plugin: { packageJson, package }, location: { event, package, local } }, ) - const newStatus = getSuccessStatus({ status, statuses, package }) + const newStatus = getSuccessStatus(status, { commands, event, package }) return { newEnvChanges, newStatus } } catch (newError) { return { newError } diff --git a/packages/build/src/core/status.js b/packages/build/src/core/status.js index 379d08f824..37e94fe8ee 100644 --- a/packages/build/src/core/status.js +++ b/packages/build/src/core/status.js @@ -1,35 +1,37 @@ const { logStatuses } = require('../log/main') -// Assign default value for successful `newStatus` -// Retrieved from `utils.status.show()`, which is optional -const getSuccessStatus = function({ status, statuses, package }) { - // `utils.status.show()` called in the current event - if (status !== undefined) { - return status +// The last event handler of a plugin (except for `onError` and `onEnd`) +// defaults to `utils.status.show({ state: 'success' })` without any `summary`. +const getSuccessStatus = function(newStatus, { commands, event, package }) { + if (newStatus === undefined && isLastMainCommand({ commands, event, package })) { + return IMPLICIT_STATUS } - // `utils.status.show()` not called, but set in a previous event - const hasStatus = statuses.some(pluginStatus => pluginStatus.package === package) - if (hasStatus) { - return - } + return newStatus +} - // `utils.status.show()` not called, but this is the first event, so we assign a default - return { state: 'success' } +const isLastMainCommand = function({ commands, event, package }) { + const mainCommands = commands.filter(command => command.package === package && isMainCommand(command)) + return mainCommands.length === 0 || mainCommands[mainCommands.length - 1].event === event } -// Merge `success` status to the list of plugin statuses. +const isMainCommand = function({ event }) { + return event !== 'onEnd' && event !== 'onError' +} + +const IMPLICIT_STATUS = { state: 'success', implicit: true } + +// Merge plugin status to the list of plugin statuses. const addStatus = function({ newStatus, statuses, event, package, packageJson: { version } = {} }) { // Either: // - `build.command` - // - `utils.status.show()` not called but set in a previous event + // - no status was set if (newStatus === undefined) { return statuses } - // Error statuses cannot be overwritten const formerStatus = statuses.find(status => status.package === package) - if (formerStatus !== undefined && formerStatus.state !== 'success') { + if (!canOverrideStatus(formerStatus, newStatus)) { return statuses } @@ -38,6 +40,21 @@ const addStatus = function({ newStatus, statuses, event, package, packageJson: { return [...newStatuses, { ...newStatus, event, package, version }] } +const canOverrideStatus = function(formerStatus, newStatus) { + // No previous status + if (formerStatus === undefined) { + return true + } + + // Implicit statuses can never override + if (newStatus.implicit) { + return false + } + + // Error statuses can only be overwritten by other error statuses + return formerStatus.state === 'success' || newStatus.state !== 'success' +} + const reportStatuses = async function(statuses, api, mode) { printStatuses(statuses, mode) } diff --git a/packages/build/tests/plugins/status/fixtures/error_status_error_override/netlify.toml b/packages/build/tests/plugins/status/fixtures/error_status_error_override/netlify.toml new file mode 100644 index 0000000000..4b06556c85 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/error_status_error_override/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin.js" diff --git a/packages/build/tests/plugins/status/fixtures/error_status_error_override/plugin.js b/packages/build/tests/plugins/status/fixtures/error_status_error_override/plugin.js new file mode 100644 index 0000000000..59d4793654 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/error_status_error_override/plugin.js @@ -0,0 +1,8 @@ +module.exports = { + onBuild() { + throw new Error('onBuild') + }, + onError() { + throw new Error('onError') + }, +} diff --git a/packages/build/tests/plugins/status/fixtures/error_status_override/plugin.js b/packages/build/tests/plugins/status/fixtures/error_status_override/plugin.js index 912f801aae..6b838c4355 100644 --- a/packages/build/tests/plugins/status/fixtures/error_status_override/plugin.js +++ b/packages/build/tests/plugins/status/fixtures/error_status_override/plugin.js @@ -2,6 +2,13 @@ module.exports = { onBuild() { throw new Error('onBuild') }, + onSuccess({ + utils: { + status: { show }, + }, + }) { + show({ summary: 'summary' }) + }, onError({ utils: { status: { show }, diff --git a/packages/build/tests/plugins/status/fixtures/implicit_one/netlify.toml b/packages/build/tests/plugins/status/fixtures/implicit_one/netlify.toml new file mode 100644 index 0000000000..4b06556c85 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/implicit_one/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin.js" diff --git a/packages/build/tests/plugins/status/fixtures/implicit_one/plugin.js b/packages/build/tests/plugins/status/fixtures/implicit_one/plugin.js new file mode 100644 index 0000000000..24950c07ab --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/implicit_one/plugin.js @@ -0,0 +1,3 @@ +module.exports = { + onBuild() {}, +} diff --git a/packages/build/tests/plugins/status/fixtures/implicit_onend/netlify.toml b/packages/build/tests/plugins/status/fixtures/implicit_onend/netlify.toml new file mode 100644 index 0000000000..4b06556c85 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/implicit_onend/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin.js" diff --git a/packages/build/tests/plugins/status/fixtures/implicit_onend/plugin.js b/packages/build/tests/plugins/status/fixtures/implicit_onend/plugin.js new file mode 100644 index 0000000000..48d7a6fc11 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/implicit_onend/plugin.js @@ -0,0 +1,3 @@ +module.exports = { + onEnd() {}, +} diff --git a/packages/build/tests/plugins/status/fixtures/implicit_several/netlify.toml b/packages/build/tests/plugins/status/fixtures/implicit_several/netlify.toml new file mode 100644 index 0000000000..4b06556c85 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/implicit_several/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin.js" diff --git a/packages/build/tests/plugins/status/fixtures/implicit_several/plugin.js b/packages/build/tests/plugins/status/fixtures/implicit_several/plugin.js new file mode 100644 index 0000000000..722c2cf987 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/implicit_several/plugin.js @@ -0,0 +1,4 @@ +module.exports = { + onBuild() {}, + onSuccess() {}, +} diff --git a/packages/build/tests/plugins/status/fixtures/no_implicit/netlify.toml b/packages/build/tests/plugins/status/fixtures/no_implicit/netlify.toml new file mode 100644 index 0000000000..4b06556c85 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/no_implicit/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin.js" diff --git a/packages/build/tests/plugins/status/fixtures/no_implicit/plugin.js b/packages/build/tests/plugins/status/fixtures/no_implicit/plugin.js new file mode 100644 index 0000000000..7f76ba8087 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/no_implicit/plugin.js @@ -0,0 +1,10 @@ +module.exports = { + onBuild({ + utils: { + status: { show }, + }, + }) { + show({ summary: 'summary' }) + }, + onSuccess() {}, +} diff --git a/packages/build/tests/plugins/status/fixtures/no_implicit_none/netlify.toml b/packages/build/tests/plugins/status/fixtures/no_implicit_none/netlify.toml new file mode 100644 index 0000000000..4b06556c85 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/no_implicit_none/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin.js" diff --git a/packages/build/tests/plugins/status/fixtures/no_implicit_none/plugin.js b/packages/build/tests/plugins/status/fixtures/no_implicit_none/plugin.js new file mode 100644 index 0000000000..4ba52ba2c8 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/no_implicit_none/plugin.js @@ -0,0 +1 @@ +module.exports = {} diff --git a/packages/build/tests/plugins/status/fixtures/no_implicit_onerror/netlify.toml b/packages/build/tests/plugins/status/fixtures/no_implicit_onerror/netlify.toml new file mode 100644 index 0000000000..4b06556c85 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/no_implicit_onerror/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin.js" diff --git a/packages/build/tests/plugins/status/fixtures/no_implicit_onerror/plugin.js b/packages/build/tests/plugins/status/fixtures/no_implicit_onerror/plugin.js new file mode 100644 index 0000000000..48329eb81e --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/no_implicit_onerror/plugin.js @@ -0,0 +1,3 @@ +module.exports = { + onError() {}, +} diff --git a/packages/build/tests/plugins/status/fixtures/success_status_override/netlify.toml b/packages/build/tests/plugins/status/fixtures/success_status_override/netlify.toml new file mode 100644 index 0000000000..4b06556c85 --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/success_status_override/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin.js" diff --git a/packages/build/tests/plugins/status/fixtures/success_status_override/plugin.js b/packages/build/tests/plugins/status/fixtures/success_status_override/plugin.js new file mode 100644 index 0000000000..4b0832e3ee --- /dev/null +++ b/packages/build/tests/plugins/status/fixtures/success_status_override/plugin.js @@ -0,0 +1,16 @@ +module.exports = { + onBuild({ + utils: { + status: { show }, + }, + }) { + show({ summary: 'onBuild' }) + }, + onSuccess({ + utils: { + status: { show }, + }, + }) { + show({ summary: 'onSuccess' }) + }, +} diff --git a/packages/build/tests/plugins/status/snapshots/tests.js.md b/packages/build/tests/plugins/status/snapshots/tests.js.md index ded2713f8b..ed45da1bef 100644 --- a/packages/build/tests/plugins/status/snapshots/tests.js.md +++ b/packages/build/tests/plugins/status/snapshots/tests.js.md @@ -306,7 +306,125 @@ Generated by [AVA](https://ava.li). In "onInit" event in local plugin "/file/path"␊ ` -## utils.status.show() cannot override an error status +## utils.status.show() can override a success status + +> Snapshot 1 + + `␊ + ┌─────────────────────────────┐␊ + │ Netlify Build │␊ + └─────────────────────────────┘␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + repositoryRoot: /file/path␊ + ␊ + > Current directory␊ + /file/path␊ + ␊ + > Config file␊ + /file/path␊ + ␊ + > Resolved config␊ + plugins:␊ + - package: /file/path␊ + ␊ + > Context␊ + production␊ + ␊ + > Loading plugins␊ + - /file/path␊ + ␊ + ┌─────────────────────────────────────┐␊ + │ 1. onBuild command from /file/path │␊ + └─────────────────────────────────────┘␊ + ␊ + ␊ + (/file/path onBuild completed in 1ms)␊ + ␊ + ┌───────────────────────────────────────┐␊ + │ 2. onSuccess command from /file/path │␊ + └───────────────────────────────────────┘␊ + ␊ + ␊ + (/file/path onSuccess completed in 1ms)␊ + ␊ + ┌─────────────────────────────┐␊ + │ Summary │␊ + └─────────────────────────────┘␊ + ␊ + > Plugin /file/path ran successfully␊ + onSuccess␊ + ␊ + ┌─────────────────────────────┐␊ + │ Netlify Build Complete │␊ + └─────────────────────────────┘␊ + ␊ + (Netlify Build completed in 1ms)` + +## utils.status.show() can override an error status with another error status + +> Snapshot 1 + + `␊ + ┌─────────────────────────────┐␊ + │ Netlify Build │␊ + └─────────────────────────────┘␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + repositoryRoot: /file/path␊ + ␊ + > Current directory␊ + /file/path␊ + ␊ + > Config file␊ + /file/path␊ + ␊ + > Resolved config␊ + plugins:␊ + - package: /file/path␊ + ␊ + > Context␊ + production␊ + ␊ + > Loading plugins␊ + - /file/path␊ + ␊ + ┌─────────────────────────────────────┐␊ + │ 1. onBuild command from /file/path │␊ + └─────────────────────────────────────┘␊ + ␊ + ␊ + ┌─────────────────────────────────────┐␊ + │ 2. onError command from /file/path │␊ + └─────────────────────────────────────┘␊ + ␊ + ␊ + ┌─────────────────────────────────────┐␊ + │ Plugin "/file/path" internal error │␊ + └─────────────────────────────────────┘␊ + ␊ + Error message␊ + Error: onError␊ + ␊ + Plugin details␊ + Name: /file/path␊ + Version: 1.0.0␊ + Repository: git+https://github.com/netlify/build.git␊ + npm link: https://www.npmjs.com/package/@netlify/build␊ + Report issues: https://github.com/netlify/build/issues␊ + ␊ + Error location␊ + In "onError" event in local plugin "/file/path"␊ + STACK TRACE␊ + ` + +## utils.status.show() cannot override an error status with a success status > Snapshot 1 @@ -427,6 +545,274 @@ Generated by [AVA](https://ava.li). ␊ (Netlify Build completed in 1ms)` +## utils.status.show() implicit status is not used when an explicit call was made + +> Snapshot 1 + + `␊ + ┌─────────────────────────────┐␊ + │ Netlify Build │␊ + └─────────────────────────────┘␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + repositoryRoot: /file/path␊ + ␊ + > Current directory␊ + /file/path␊ + ␊ + > Config file␊ + /file/path␊ + ␊ + > Resolved config␊ + plugins:␊ + - package: /file/path␊ + ␊ + > Context␊ + production␊ + ␊ + > Loading plugins␊ + - /file/path␊ + ␊ + ┌─────────────────────────────────────┐␊ + │ 1. onBuild command from /file/path │␊ + └─────────────────────────────────────┘␊ + ␊ + ␊ + (/file/path onBuild completed in 1ms)␊ + ␊ + ┌───────────────────────────────────────┐␊ + │ 2. onSuccess command from /file/path │␊ + └───────────────────────────────────────┘␊ + ␊ + ␊ + (/file/path onSuccess completed in 1ms)␊ + ␊ + ┌─────────────────────────────┐␊ + │ Summary │␊ + └─────────────────────────────┘␊ + ␊ + > Plugin /file/path ran successfully␊ + summary␊ + ␊ + ┌─────────────────────────────┐␊ + │ Netlify Build Complete │␊ + └─────────────────────────────┘␊ + ␊ + (Netlify Build completed in 1ms)` + +## utils.status.show() implicit status is not used when no call was made, with only onError + +> Snapshot 1 + + `␊ + ┌─────────────────────────────┐␊ + │ Netlify Build │␊ + └─────────────────────────────┘␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + repositoryRoot: /file/path␊ + ␊ + > Current directory␊ + /file/path␊ + ␊ + > Config file␊ + /file/path␊ + ␊ + > Resolved config␊ + plugins:␊ + - package: /file/path␊ + ␊ + > Context␊ + production␊ + ␊ + > Loading plugins␊ + - /file/path␊ + ␊ + ┌─────────────────────────────┐␊ + │ Netlify Build Complete │␊ + └─────────────────────────────┘␊ + ␊ + (Netlify Build completed in 1ms)` + +## utils.status.show() implicit status is not used when there are no events + +> Snapshot 1 + + `␊ + ┌─────────────────────────────┐␊ + │ Netlify Build │␊ + └─────────────────────────────┘␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + repositoryRoot: /file/path␊ + ␊ + > Current directory␊ + /file/path␊ + ␊ + > Config file␊ + /file/path␊ + ␊ + > Resolved config␊ + plugins:␊ + - package: /file/path␊ + ␊ + > Context␊ + production␊ + ␊ + ┌─────────────────────────────┐␊ + │ Netlify Build Complete │␊ + └─────────────────────────────┘␊ + ␊ + (Netlify Build completed in 1ms)` + +## utils.status.show() implicit status is used when no call was made + +> Snapshot 1 + + `␊ + ┌─────────────────────────────┐␊ + │ Netlify Build │␊ + └─────────────────────────────┘␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + repositoryRoot: /file/path␊ + ␊ + > Current directory␊ + /file/path␊ + ␊ + > Config file␊ + /file/path␊ + ␊ + > Resolved config␊ + plugins:␊ + - package: /file/path␊ + ␊ + > Context␊ + production␊ + ␊ + > Loading plugins␊ + - /file/path␊ + ␊ + ┌─────────────────────────────────────┐␊ + │ 1. onBuild command from /file/path │␊ + └─────────────────────────────────────┘␊ + ␊ + ␊ + (/file/path onBuild completed in 1ms)␊ + ␊ + ┌─────────────────────────────┐␊ + │ Netlify Build Complete │␊ + └─────────────────────────────┘␊ + ␊ + (Netlify Build completed in 1ms)` + +## utils.status.show() implicit status is used when no call was made, with only onEnd + +> Snapshot 1 + + `␊ + ┌─────────────────────────────┐␊ + │ Netlify Build │␊ + └─────────────────────────────┘␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + repositoryRoot: /file/path␊ + ␊ + > Current directory␊ + /file/path␊ + ␊ + > Config file␊ + /file/path␊ + ␊ + > Resolved config␊ + plugins:␊ + - package: /file/path␊ + ␊ + > Context␊ + production␊ + ␊ + > Loading plugins␊ + - /file/path␊ + ␊ + ┌───────────────────────────────────┐␊ + │ 1. onEnd command from /file/path │␊ + └───────────────────────────────────┘␊ + ␊ + ␊ + (/file/path onEnd completed in 1ms)␊ + ␊ + ┌─────────────────────────────┐␊ + │ Netlify Build Complete │␊ + └─────────────────────────────┘␊ + ␊ + (Netlify Build completed in 1ms)` + +## utils.status.show() implicit status is used when no events have made a call + +> Snapshot 1 + + `␊ + ┌─────────────────────────────┐␊ + │ Netlify Build │␊ + └─────────────────────────────┘␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + repositoryRoot: /file/path␊ + ␊ + > Current directory␊ + /file/path␊ + ␊ + > Config file␊ + /file/path␊ + ␊ + > Resolved config␊ + plugins:␊ + - package: /file/path␊ + ␊ + > Context␊ + production␊ + ␊ + > Loading plugins␊ + - /file/path␊ + ␊ + ┌─────────────────────────────────────┐␊ + │ 1. onBuild command from /file/path │␊ + └─────────────────────────────────────┘␊ + ␊ + ␊ + (/file/path onBuild completed in 1ms)␊ + ␊ + ┌───────────────────────────────────────┐␊ + │ 2. onSuccess command from /file/path │␊ + └───────────────────────────────────────┘␊ + ␊ + ␊ + (/file/path onSuccess completed in 1ms)␊ + ␊ + ┌─────────────────────────────┐␊ + │ Netlify Build Complete │␊ + └─────────────────────────────┘␊ + ␊ + (Netlify Build completed in 1ms)` + ## utils.status.show() requires a summary > Snapshot 1 diff --git a/packages/build/tests/plugins/status/snapshots/tests.js.snap b/packages/build/tests/plugins/status/snapshots/tests.js.snap index 6c0cf1572cb99b2750e14433866e5f7f5a5079fa..ef5a74a97dfb34590fc502e7ef89f3412fce484c 100644 GIT binary patch literal 1874 zcmV-Y2d(%)RzVGhu-+&Hbbr3oHQ|Gi+w?3Y_J%^#z(P^Y_&rK*?6OAbO?tJ_jX<=-7XD>rd@@s9Pw7;0TRn_TVl$CLheameb-hLJzKJG^B*L#>Aj z5E_>M&i12XYQliyE0VLXULqLi){+bBvDGaraDn{tlf@zHv zS$lG)vui8!8$O%PQ0vJT5W1C`_V>A;)@cWe&mPXd`Sm9ZwO(I@(A8;++KT6hIKO4* zHT$8Xq}RH2ga@J7-=zGqIX(N#pdmA6=9JW=Fx0xg0-?rhnR}y`T~7#%y!Mrw*C7Z|;>xqz!pV47JuQN9X}G zkVXrWfCk4s6mPp+_vYogn%?=_M2@~12VaGpD)431I9KBZPsm8hNu9c0>%mr=Een@$ zvcgNE4dZMv&}TDTte5L_ zR!LO3msP#KEO|7ys$UAR&y`pYFM2~qvC(4~oA#z>yYlr!2bRPcZQq{N=%*tNPr^mlfQ&e2aVV1-mORh>PtswcJA0~L29!_ORdtxYL zeI%eeUWWL@p}cG_52Pa|nG(vvK#`YMQ_EG=uVgr#L8)z49jH)DIiTnzYhz% zSQ$EIs99B2m4lR3D70lT)12XS5InQ2VqQ@+PRZzK-ql&1ftno%3X+>u16-3&+#N^+ zJLZ<^xDjOZav_+qVbNd<kDfR}-nP4_sZ=5}3R9d53PB;dNxFVVrzh~gw2#RZz% zP1w?MICh1mp}*0P#G%&$jld;W8!UaoG{JGnfQZbBSP5WKrU`;h8A_mUFh>ZVBh%wc0RO5G65<^ZAKQQDqX8FkdilzVH!nG;p-Z z?goyI07`%0XiCYFC{*hatm+FmLDrst?LiG}$K)t>JzU$VoadAYgu~TfWyKEsZ61GL z9|-&n{B63&Exz6pJz(e(P9TG=2+TcqGDH20?m}1qxyf+v_kW-kYqEiU&j^tRjP#L4 zdJ0XqhWZ7?Ij#a+T$JO=3m^6`#=)=;!~T7EHg;B#H^UuG2zB#44hpvmU@We1L5f8N z=3k^3{Qy!dk`$xn`;%etYGQ0fp=68%SeWbrm~L+WZQnlz8-V+C0~tJ| z0W58{yMd)6fYL8m8XnS!21k#8-{Ap{Hs9lLi>Z4!#nPm^4&)qAg~{#)ITrzx{vqd# z&uM|0>l-z94EAovC`E(RFvf8$NR1ecV~`p>j|7k!T>#TPsUdSqG!pp=R{WfsB#|C` zY=l*R5E|wQjp0DhK+q<;+rk75+hu|o0XtQCsANY2Q36q#>~0{+|AZ*&L&~zT3CP%NcLNzm0Hr^WG3-H#21UcOnLyEIyBjDv0x120qT$)hK4a;B M0DD_29m0J80Jc+$7ytkO literal 1472 zcmV;x1wZ;hRzV39LbsyY@LO-3)O^*8PCc=_dFuP`xRGy%su8;8tN-Kd*SpPQ zku%4`S3dt(64o;wghD^-6QjpMQ|CT;Z_#HPhoh3P?x{g&?9u~A*0%Yop1YPjw14m9 zHc41(??7nZz;)k>@Qr0{ElYMq4!l?^3G1ol2pt}MaHlO>(^NS>`zpg~++4l8geVg8H*&sik3?KY-gCwl4*CBK?_Rxum z-@m-;K2|e6*|hYcB&?eo5xUxNd0oW&bnI+&D% zbwwvaQ|lkQ9(h>9;frrx@_uxZ&%m;FMG(3fEf(rZ)oAHWBh{V@BYQ5443*~Z6+Zei zIJM1brGto zJ4p;jMJL{#R?UQ>(V)jtq8_K^Xi`p)qNC~>BabtyzoEy>D6>w5+qdd+Owkg#Q9NRd z{9Q}w*}rjjgCFZ!SW_53(Ns#-VmNN-sl1t$-08DLLirV$7G;}o686rh;Kd5}tD(s% zCWfIK3!_R#7>rxR6jFpz9)bM3$rP3PDU+GW|Mlwqt5##L6^33b3e&`312|<;hI zv8HSFB$ehi$_yTp)`;0Nju9sFp}3(#PVv~D+44da=TdaKJ(HQ3CrvIPGffGF`Fa^k z(_kRLKlhqFeja6kg0%MY2EMD7PGMEilDRQ+yY=_?`*~X*6?K8@?2!$I6-rG) zgEPC&cGN(o=Zu)D9+g=JJ7MnmOip+)*=Zq!D`T~*+3YO{3{L@~mjR*y(GI)Y#fV;& zH;I`!rd7hYTX>>0r0D9>>Q;~ueA{kviHw0fOIb1^PY0$j5v(*b6aGm=TUk^nL_#R* ziZZFNs_^JVflvU-4*`?_N{8L;Vo*XYYcI^)YFSac>Y6%WMKG^W`RNGCdh4(^i&-z` zqZHP>3ZZqp*k#$y)C+~KbA|3xz;EEU!|n!t+lW#L{5HrAlSe+qvW8_NVWxO40F0f3 z@hHF;VC=BF0me3>R052%r8BGymzUA-;~g;CX?FvoZA7UIM#GPHy7$^;tcHH9v)YFfAx`)(53k~Z= zOPEXsyHS|JXSb*4S-!$zjMEre-wC>$141s@A0}_j(WBU)(bn;ytf*UZdq+76NY+nfDt-?uC13cUNa{ a5A9$i0Ii4q5v~9C%={CelPD6zRR92U$mCA| diff --git a/packages/build/tests/plugins/status/tests.js b/packages/build/tests/plugins/status/tests.js index ce3d74849d..20a6a32194 100644 --- a/packages/build/tests/plugins/status/tests.js +++ b/packages/build/tests/plugins/status/tests.js @@ -14,10 +14,42 @@ test('utils.status.show() are printed locally', async t => { await runFixture(t, 'print') }) -test('utils.status.show() cannot override an error status', async t => { +test('utils.status.show() can override a success status', async t => { + await runFixture(t, 'success_status_override') +}) + +test('utils.status.show() cannot override an error status with a success status', async t => { await runFixture(t, 'error_status_override') }) +test('utils.status.show() can override an error status with another error status', async t => { + await runFixture(t, 'error_status_error_override') +}) + +test('utils.status.show() implicit status is not used when an explicit call was made', async t => { + await runFixture(t, 'no_implicit') +}) + +test('utils.status.show() implicit status is not used when there are no events', async t => { + await runFixture(t, 'no_implicit_none') +}) + +test('utils.status.show() implicit status is not used when no call was made, with only onError', async t => { + await runFixture(t, 'no_implicit_onerror') +}) + +test('utils.status.show() implicit status is used when no call was made', async t => { + await runFixture(t, 'implicit_one') +}) + +test('utils.status.show() implicit status is used when no events have made a call', async t => { + await runFixture(t, 'implicit_several') +}) + +test('utils.status.show() implicit status is used when no call was made, with only onEnd', async t => { + await runFixture(t, 'implicit_onend') +}) + test('utils.status.show() argument should be defined', async t => { await runUtilsStatusShow(t, '') })