import {describe, expect, test} from 'vitest'
import {UniqueUtils} from '../../index'
import {getEntries} from "../../tsUtils";
import {Semver} from "../../utils/semver";

describe('semver', () => {
  const Semver = UniqueUtils.Semver

  const strings = {
    v100: '1.0.0',
    v123: '1.2.3',
    v124: '1.2.4',
    v154: '1.5.4',
    v200: '2.0.0',
    invalid: 'sdd.fs.df',
    empty: '',
    undef: undefined as any as string,
  }
  const semvers = {
    v100: Semver.fromString(strings.v100),
    v123: Semver.fromString(strings.v123),
    v124: Semver.fromString(strings.v124),
    v154: Semver.fromString(strings.v154),
    v200: Semver.fromString(strings.v200),
  }

  test.concurrent('semver', () => {
    expect(semvers.v100.isLessThan(strings.v123)).toBe(true)
    expect(semvers.v100.isLessThan(strings.v154)).toBe(true)
    expect(semvers.v100.isLessThan(strings.v200)).toBe(true)
    expect(semvers.v123.isLessThan(strings.v124)).toBe(true)
    expect(semvers.v123.isLessThan(strings.v154)).toBe(true)
    expect(semvers.v123.isLessThan(strings.v200)).toBe(true)

    expect(semvers.v200.isGteThan(strings.v154)).toBe(true)
    expect(semvers.v200.isGteThan(strings.v100)).toBe(true)
    expect(semvers.v154.isGteThan(strings.v124)).toBe(true)
    expect(semvers.v124.isGteThan(strings.v123)).toBe(true)

    expect(semvers.v124.isGteThan('1.2.4')).toBe(true)
    expect(semvers.v124.isLessThan('1.2.4')).toBe(false)

    expect(semvers.v124.isEqual('1.2.4')).toBe(true)
    expect(semvers.v124.isEqual('1.2.5')).toBe(false)
    expect(semvers.v124.isEqual('1.3.4')).toBe(false)
    expect(semvers.v124.isEqual('2.2.4')).toBe(false)

    expect(Semver.isValid(strings.invalid)).toBe(false)
    expect(Semver.isValid(strings.empty)).toBe(false)
    expect(Semver.isValid(strings.undef)).toBe(false)
    expect(Semver.isValid(strings.v200)).toBe(true)

    expect(() => {Semver.fromString(strings.invalid)}).toThrowError()
    expect(() => {Semver.fromString(strings.empty)}).toThrowError()
    expect(() => {Semver.fromString(strings.undef)}).toThrowError()
  })
})
