From 7b838beb7c43380ffc9c32c2bb9f34291912fa42 Mon Sep 17 00:00:00 2001 From: Fran Dios Date: Fri, 17 May 2024 11:47:58 +0900 Subject: [PATCH] Fix upgrade notice in dev command (#2120) * Failing test * Fix upgrade notice * Changesets --- .changeset/long-emus-cry.md | 5 +++++ .../cli/src/commands/hydrogen/upgrade.test.ts | 22 ++++++++++++++++++- packages/cli/src/commands/hydrogen/upgrade.ts | 13 ++++++----- 3 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 .changeset/long-emus-cry.md diff --git a/.changeset/long-emus-cry.md b/.changeset/long-emus-cry.md new file mode 100644 index 0000000000..7f6416f831 --- /dev/null +++ b/.changeset/long-emus-cry.md @@ -0,0 +1,5 @@ +--- +'@shopify/cli-hydrogen': patch +--- + +Fix Hydrogen upgrade notification when running the dev command. diff --git a/packages/cli/src/commands/hydrogen/upgrade.test.ts b/packages/cli/src/commands/hydrogen/upgrade.test.ts index 4f18313e95..48815dc8a5 100644 --- a/packages/cli/src/commands/hydrogen/upgrade.test.ts +++ b/packages/cli/src/commands/hydrogen/upgrade.test.ts @@ -36,12 +36,14 @@ import { type Release, upgradeNodeModules, getChangelog, + displayDevUpgradeNotice, } from './upgrade.js'; import {type PackageJson} from 'type-fest'; -vi.mock('../../lib/shell.js'); vi.mock('@shopify/cli-kit/node/session'); +vi.mock('../../lib/shell.js', () => ({getCliCommand: vi.fn(() => 'h2')})); + vi.mock('@shopify/cli-kit/node/ui', async () => { const original = await vi.importActual< typeof import('@shopify/cli-kit/node/ui') @@ -585,6 +587,24 @@ describe('upgrade', async () => { }); }); + describe('displayDevUpgradeNotice', () => { + it('shows up a notice if there are dependencies to upgrade', async () => { + await inTemporaryHydrogenRepo( + async (targetPath) => { + await expect( + displayDevUpgradeNotice({targetPath}), + ).resolves.not.toThrow(); + + expect(outputMock.info()).toMatch( + 'new @shopify/hydrogen versions available', + ); + expect(outputMock.info()).toMatch('Run `h2 upgrade`'); + }, + {cleanGitRepo: false, packageJson: OUTDATED_HYDROGEN_PACKAGE_JSON}, + ); + }); + }); + describe('upgradeNodeModules', () => { it('runs the upgrade command task', async () => { await inTemporaryHydrogenRepo( diff --git a/packages/cli/src/commands/hydrogen/upgrade.ts b/packages/cli/src/commands/hydrogen/upgrade.ts index d0c9e88ec9..826628f5b6 100644 --- a/packages/cli/src/commands/hydrogen/upgrade.ts +++ b/packages/cli/src/commands/hydrogen/upgrade.ts @@ -349,17 +349,15 @@ function hasOutdatedDependencies({ }); } -export function isUpgradeableRelease({ +function isUpgradeableRelease({ currentDependencies, currentPinnedVersion, release, }: { - currentDependencies?: Dependencies; + currentDependencies: Dependencies; currentPinnedVersion: string; release: Release; }) { - if (!currentDependencies) return false; - const isHydrogenOutdated = semver.gt(release.version, currentPinnedVersion); if (isHydrogenOutdated) return true; @@ -383,7 +381,7 @@ export function getAvailableUpgrades({ }: { releases: ChangeLog['releases']; currentVersion: string; - currentDependencies?: Dependencies; + currentDependencies: Dependencies; }) { const currentPinnedVersion = getAbsoluteVersion(currentVersion); let currentMajorVersion = ''; @@ -1000,7 +998,9 @@ export async function displayDevUpgradeNotice({ }) { try { const appPath = targetPath ? path.resolve(targetPath) : process.cwd(); - const {currentVersion} = await getHydrogenVersion({appPath}); + const {currentVersion, currentDependencies} = await getHydrogenVersion({ + appPath, + }); const isPrerelease = semver.prerelease(currentVersion); @@ -1014,6 +1014,7 @@ export async function displayDevUpgradeNotice({ const {availableUpgrades, uniqueAvailableUpgrades} = getAvailableUpgrades({ releases: changelog.releases, currentVersion, + currentDependencies, }); if (availableUpgrades.length === 0 || !availableUpgrades[0]?.version) {