From d4bbfe24745ee1359cb02a0de678e43d6222a47f Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 24 Jan 2022 17:24:17 +0300 Subject: [PATCH] fix(versioning/loose): Fix suffix comparison (#13745) Co-authored-by: Rhys Arkins --- lib/versioning/loose/index.spec.ts | 15 +++++++++++++++ lib/versioning/loose/index.ts | 17 +++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lib/versioning/loose/index.spec.ts b/lib/versioning/loose/index.spec.ts index 56687e4af90129..8c672203a6352f 100644 --- a/lib/versioning/loose/index.spec.ts +++ b/lib/versioning/loose/index.spec.ts @@ -37,6 +37,17 @@ describe('versioning/loose/index', () => { expect(!!loose.isValid(version)).toBe(expected); }); + test.each` + a | b | expected + ${'2.4'} | ${'2.4'} | ${true} + ${'2.4.0'} | ${'2.4.0'} | ${true} + ${'2.4.0'} | ${'2.4'} | ${false} + ${'2.4.1'} | ${'2.4'} | ${false} + ${'2.4.2'} | ${'2.4.1'} | ${false} + `('equals("$a", "$b") === $expected', ({ a, b, expected }) => { + expect(loose.equals(a, b)).toBe(expected); + }); + test.each` a | b | expected ${'2.4.0'} | ${'2.4'} | ${true} @@ -44,6 +55,10 @@ describe('versioning/loose/index', () => { ${'2.4.beta'} | ${'2.4.alpha'} | ${true} ${'1.9'} | ${'2'} | ${false} ${'1.9'} | ${'1.9.1'} | ${false} + ${'2.4'} | ${'2.4.beta'} | ${true} + ${'2.4.0'} | ${'2.4.beta'} | ${true} + ${'2.4.beta'} | ${'2.4'} | ${false} + ${'2.4.beta'} | ${'2.4.0'} | ${false} `('isGreaterThan("$a", "$b") === $expected', ({ a, b, expected }) => { expect(loose.isGreaterThan(a, b)).toBe(expected); }); diff --git a/lib/versioning/loose/index.ts b/lib/versioning/loose/index.ts index 6bf92038dd5d32..b0d20ebf38ca63 100644 --- a/lib/versioning/loose/index.ts +++ b/lib/versioning/loose/index.ts @@ -50,12 +50,21 @@ class LooseVersioningApi extends GenericVersioningApi { return part1 - part2; } } - // istanbul ignore if - if (!(parsed1.suffix && parsed2.suffix)) { + + if (parsed1.suffix && parsed2.suffix) { + return parsed1.suffix.localeCompare(parsed2.suffix); + } + + if (parsed1.suffix) { + return -1; + } + + if (parsed2.suffix) { return 1; } - // equals - return parsed1.suffix.localeCompare(parsed2.suffix); + + // istanbul ignore next + return 0; } }