From d49c1aab4b6e90e0d30c9728a4d39620c9936c47 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Tue, 22 Oct 2019 17:39:57 +0200 Subject: [PATCH] FIX & ADD more tests --- lib/api/src/modules/versions.ts | 9 +++- lib/api/src/tests/versions.test.js | 82 +++++++++++++++++++++++++++--- 2 files changed, 81 insertions(+), 10 deletions(-) diff --git a/lib/api/src/modules/versions.ts b/lib/api/src/modules/versions.ts index 861e219a5db..7c584c00332 100644 --- a/lib/api/src/modules/versions.ts +++ b/lib/api/src/modules/versions.ts @@ -2,7 +2,6 @@ import { VERSIONCHECK } from 'global'; import semver from 'semver'; import memoize from 'memoizerific'; -import { version } from 'punycode'; import { version as currentVersion } from '../version'; import { Module, API } from '../index'; @@ -84,7 +83,13 @@ export default function({ store, mode }: Module) { if (!latest.version) { return true; } - return semver.gt(latest.version, current.version); + if (!current.version) { + return true; + } + + const diff = semver.diff(current.version, latest.version); + + return semver.gt(latest.version, current.version) && diff !== 'patch'; } return false; }, diff --git a/lib/api/src/tests/versions.test.js b/lib/api/src/tests/versions.test.js index 46a5c7f244c..c3e82e01abc 100644 --- a/lib/api/src/tests/versions.test.js +++ b/lib/api/src/tests/versions.test.js @@ -24,8 +24,12 @@ jest.mock('@storybook/client-logger'); function createMockStore() { let state = { versions: { - latest: {}, - current: {}, + latest: { + version: '3.0.0', + }, + current: { + version: '3.0.0', + }, }, }; return { @@ -165,13 +169,75 @@ describe('versions API', () => { }); }); - it('versionUpdateAvailable works', async () => { - const store = createMockStore(); - const { api, init, state: initialState } = initVersions({ store }); - store.setState(initialState); + describe('versionUpdateAvailable', () => { + it('matching version', async () => { + const store = createMockStore(); + const { api, init, state: initialState } = initVersions({ store }); + store.setState({ + ...initialState, + versions: { + ...initialState.versions, + current: { version: '5.2.1' }, + latest: { version: '5.2.1' }, + }, + }); - await init({ api: { ...api, addNotification: jest.fn() } }); + await init({ api: { ...api, addNotification: jest.fn() } }); - expect(api.versionUpdateAvailable()).toEqual(true); + expect(api.versionUpdateAvailable()).toEqual(false); + }); + + it('new patch version', async () => { + const store = createMockStore(); + const { api, init, state: initialState } = initVersions({ store }); + store.setState({ + ...initialState, + versions: { + ...initialState.versions, + current: { version: '5.2.1' }, + latest: { version: '5.2.2' }, + }, + }); + + await init({ api: { ...api, addNotification: jest.fn() } }); + + expect(api.versionUpdateAvailable()).toEqual(false); + }); + + it('new minor version', async () => { + const store = createMockStore(); + const { api, init, state: initialState } = initVersions({ store }); + + await init({ api: { ...api, addNotification: jest.fn() } }); + + store.setState({ + ...initialState, + versions: { + ...initialState.versions, + current: { version: '5.2.1' }, + latest: { version: '5.3.1' }, + }, + }); + + expect(api.versionUpdateAvailable()).toEqual(true); + }); + + it('new major version', async () => { + const store = createMockStore(); + const { api, init, state: initialState } = initVersions({ store }); + + await init({ api: { ...api, addNotification: jest.fn() } }); + + store.setState({ + ...initialState, + versions: { + ...initialState.versions, + current: { version: '5.2.1' }, + latest: { version: '6.2.1' }, + }, + }); + + expect(api.versionUpdateAvailable()).toEqual(true); + }); }); });