aboutsummaryrefslogtreecommitdiff
path: root/test/docs/versions.spec.ts
blob: 5567fd7323ffab13b4cf4e6a2acd01020b8caa84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { execSync } from 'node:child_process';
import * as semver from 'semver';
import { describe, expect, it } from 'vitest';
import { versionLinks } from '../../docs/.vitepress/versions';

function isFakerOrigin(): boolean {
  try {
    const originUrl = execSync('git remote get-url origin')
      .toString('utf8')
      .trim();
    return (
      originUrl === '[email protected]:faker-js/faker' ||
      originUrl === '[email protected]:faker-js/faker.git' ||
      originUrl === 'https://github.com/faker-js/faker' ||
      originUrl === 'https://github.com/faker-js/faker.git'
    );
  } catch {
    return false;
  }
}

describe.runIf(isFakerOrigin())('docs versions', () => {
  describe('oldVersions', () => {
    it('should have a complete set of oldVersions', () => {
      expect(versionLinks.length).toBeGreaterThanOrEqual(1);

      const versionEntry = versionLinks[0];
      if (versionEntry.version === 'next') {
        expect(versionEntry.link).toBe('https://next.fakerjs.dev/');
      }

      const releaseVersions = versionLinks.filter(({ version }) =>
        semver.valid(version)
      );
      const latestMajorRelease = semver.major(releaseVersions[0].version);
      for (const [index, value] of releaseVersions.entries()) {
        const { version, link } = value;
        const oldMajorVersion = semver.major(version);
        expect(oldMajorVersion).toBe(latestMajorRelease - index);
        expect(link).toBe(`https://v${oldMajorVersion}.fakerjs.dev/`);
      }
    });
  });
});