|
1 | 1 | import { describe, expect, it } from 'vitest'; |
2 | 2 |
|
3 | | -import { checkVersionAgainstBounds, isVersionCompatible, parseVersion, type VersionBounds } from '../versionCheck'; |
| 3 | +import { |
| 4 | + checkVersionAgainstBounds, |
| 5 | + isVersionAtLeast, |
| 6 | + isVersionCompatible, |
| 7 | + parseVersion, |
| 8 | + type VersionBounds, |
| 9 | +} from '../versionCheck'; |
4 | 10 |
|
5 | 11 | describe('parseVersion', () => { |
6 | 12 | it('parses standard semver versions', () => { |
@@ -142,3 +148,70 @@ describe('isVersionCompatible', () => { |
142 | 148 | expect(isVersionCompatible('invalid', bounds)).toBe(false); |
143 | 149 | }); |
144 | 150 | }); |
| 151 | + |
| 152 | +describe('isVersionAtLeast', () => { |
| 153 | + describe('returns true when version meets or exceeds minimum', () => { |
| 154 | + it('exact match', () => { |
| 155 | + expect(isVersionAtLeast('5.100.0', '5.100.0')).toBe(true); |
| 156 | + }); |
| 157 | + |
| 158 | + it('higher patch', () => { |
| 159 | + expect(isVersionAtLeast('5.100.1', '5.100.0')).toBe(true); |
| 160 | + }); |
| 161 | + |
| 162 | + it('higher minor', () => { |
| 163 | + expect(isVersionAtLeast('5.101.0', '5.100.0')).toBe(true); |
| 164 | + expect(isVersionAtLeast('5.114.0', '5.100.0')).toBe(true); |
| 165 | + }); |
| 166 | + |
| 167 | + it('higher major', () => { |
| 168 | + expect(isVersionAtLeast('6.0.0', '5.100.0')).toBe(true); |
| 169 | + }); |
| 170 | + }); |
| 171 | + |
| 172 | + describe('returns false when version is below minimum', () => { |
| 173 | + it('lower patch', () => { |
| 174 | + expect(isVersionAtLeast('5.100.0', '5.100.1')).toBe(false); |
| 175 | + }); |
| 176 | + |
| 177 | + it('lower minor', () => { |
| 178 | + expect(isVersionAtLeast('5.99.0', '5.100.0')).toBe(false); |
| 179 | + expect(isVersionAtLeast('5.99.999', '5.100.0')).toBe(false); |
| 180 | + }); |
| 181 | + |
| 182 | + it('lower major', () => { |
| 183 | + expect(isVersionAtLeast('4.999.999', '5.100.0')).toBe(false); |
| 184 | + }); |
| 185 | + }); |
| 186 | + |
| 187 | + describe('handles pre-release versions', () => { |
| 188 | + it('treats pre-release as base version', () => { |
| 189 | + expect(isVersionAtLeast('5.100.0-canary.123', '5.100.0')).toBe(true); |
| 190 | + expect(isVersionAtLeast('5.114.0-snapshot.456', '5.100.0')).toBe(true); |
| 191 | + }); |
| 192 | + |
| 193 | + it('compares base versions ignoring pre-release suffix', () => { |
| 194 | + expect(isVersionAtLeast('5.99.0-canary.999', '5.100.0')).toBe(false); |
| 195 | + }); |
| 196 | + }); |
| 197 | + |
| 198 | + describe('handles edge cases', () => { |
| 199 | + it('returns false for null/undefined version', () => { |
| 200 | + expect(isVersionAtLeast(null, '5.100.0')).toBe(false); |
| 201 | + expect(isVersionAtLeast(undefined, '5.100.0')).toBe(false); |
| 202 | + }); |
| 203 | + |
| 204 | + it('returns false for empty string', () => { |
| 205 | + expect(isVersionAtLeast('', '5.100.0')).toBe(false); |
| 206 | + }); |
| 207 | + |
| 208 | + it('returns false for invalid version string', () => { |
| 209 | + expect(isVersionAtLeast('invalid', '5.100.0')).toBe(false); |
| 210 | + expect(isVersionAtLeast('5.100', '5.100.0')).toBe(false); |
| 211 | + }); |
| 212 | + |
| 213 | + it('returns false if minVersion cannot be parsed', () => { |
| 214 | + expect(isVersionAtLeast('5.100.0', 'invalid')).toBe(false); |
| 215 | + }); |
| 216 | + }); |
| 217 | +}); |
0 commit comments