1
import { describe, expect, test, vi } from 'vitest';
2
import type { Snapshot } from '../types/snapshot.js';
3
import { validateSnapshot } from './validate-snapshot.js';
5
vi.mock('directus/version', () => ({
9
vi.mock('../database/index.js', () => ({
10
getDatabaseClient: () => 'sqlite',
13
describe('should fail on invalid snapshot schema', () => {
14
test('empty snapshot', () => {
15
const snapshot = {} as Snapshot;
17
expect(() => validateSnapshot(snapshot)).toThrowError('"version" is required');
20
test('invalid version', () => {
21
const snapshot = { version: 0 } as Snapshot;
23
expect(() => validateSnapshot(snapshot)).toThrowError('"version" must be [1]');
26
test('invalid schema', () => {
27
const snapshot = { version: 1, directus: '10.0.0', collections: {} } as Snapshot;
29
expect(() => validateSnapshot(snapshot)).toThrowError('"collections" must be an array');
33
describe('should require force option on version / vendor mismatch', () => {
34
test('directus version mismatch', () => {
35
const snapshot = { version: 1, directus: '9.26.0' } as Snapshot;
37
expect(() => validateSnapshot(snapshot)).toThrowError(
38
"Provided snapshot's directus version 9.26.0 does not match the current instance's version 10.0.0",
42
test('db vendor mismatch', () => {
43
const snapshot = { version: 1, directus: '10.0.0', vendor: 'postgres' } as Snapshot;
45
expect(() => validateSnapshot(snapshot)).toThrowError(
46
"Provided snapshot's vendor postgres does not match the current instance's vendor sqlite.",
51
test('should allow bypass on version / vendor mismatch via force option ', () => {
52
const snapshot = { version: 1, directus: '9.26.0', vendor: 'postgres' } as Snapshot;
54
expect(validateSnapshot(snapshot, true)).toBeUndefined();