import path from 'path'; import { describe, expect, it } from 'vitest'; import { parse, getDepRepo, type Result } from '../src/pkgbase.js'; describe('pkgbase parser', () => { it('can detect an add operation', async () => { const expected: Result = { build: true, move: [], delete: [], deps: 'staging', actions: { addRepo: 'system-goblins', removeRepo: null, triggersBuild: false, triggersRebuild: true, triggersRepoAdd: true, triggersRepoRemove: false, triggersNoCheck: false } }; const rDir = 'add-clean'; await expect(parse(path.join('test', 'resources', rDir, 'pkgbase.old.yaml'), path.join('test', 'resources', rDir, 'pkgbase.new.yaml'))).resolves.toEqual(expected); }); it('can detect an add operation on a new repo', async () => { const expected: Result = { build: true, move: [], delete: [], deps: 'stable', actions: { addRepo: 'world', removeRepo: null, triggersBuild: true, triggersRebuild: false, triggersRepoAdd: true, triggersRepoRemove: false, triggersNoCheck: false } }; const rDir = 'add-new'; await expect(parse(path.join('test', 'resources', rDir, 'pkgbase.old.yaml'), path.join('test', 'resources', rDir, 'pkgbase.new.yaml'))).resolves.toEqual(expected); }); it('can remove dangling packages in an add operation', async () => { const expected: Result = { build: true, move: [], delete: [ { architecture: "x86_64", package: "pidgin", repository: "world", version: "2.14.14-3", }, { "architecture": "x86_64", "package": "libpurple", "repository": "world", "version": "2.14.14-3", }, { "architecture": "x86_64", "package": "finch", "repository": "world", "version": "2.14.14-3", } ], deps: 'stable', actions: { addRepo: 'world', removeRepo: null, triggersBuild: true, triggersRebuild: false, triggersRepoAdd: true, triggersRepoRemove: false, triggersNoCheck: false } }; const rDir = 'add-with-dropped'; await expect(parse(path.join('test', 'resources', rDir, 'pkgbase.old.yaml'), path.join('test', 'resources', rDir, 'pkgbase.new.yaml'))).resolves.toEqual(expected); }); it('can detect a move operation', async () => { const expected: Result = { build: false, move: [ { architecture: "x86_64", package: "opencascade", repository: "world-gremlins", version: "1:7.9.2-1", } ], delete: [{ "architecture": "x86_64", "package": "opencascade", "repository": "world", "version": "1:7.9.1-1", }], deps: 'stable', actions: { addRepo: 'world', removeRepo: 'world-gremlins', triggersBuild: false, triggersRebuild: false, triggersRepoAdd: true, triggersRepoRemove: true, triggersNoCheck: false } }; const rDir = 'move-clean'; await expect(parse(path.join('test', 'resources', rDir, 'pkgbase.old.yaml'), path.join('test', 'resources', rDir, 'pkgbase.new.yaml'))).resolves.toEqual(expected); }); it('can remove dangling packages in a move operation', async () => { const expected: Result = { build: false, move: [ { architecture: "x86_64", package: "libpurple", repository: "world-gremlins", version: "2.14.14-4", }, { architecture: "x86_64", package: "finch", repository: "world-gremlins", version: "2.14.14-4", } ], delete: [ { architecture: "x86_64", package: "pidgin", repository: "world", version: "2.14.14-3", }, { "architecture": "x86_64", "package": "libpurple", "repository": "world", "version": "2.14.14-3", }, { "architecture": "x86_64", "package": "finch", "repository": "world", "version": "2.14.14-3", } ], deps: 'stable', actions: { addRepo: 'world', removeRepo: 'world-gremlins', triggersBuild: false, triggersRebuild: false, triggersRepoAdd: true, triggersRepoRemove: true, triggersNoCheck: false } }; const rDir = 'move-with-dropped'; await expect(parse(`https://git.sanin.dev/packages_infra/pkgbase-yaml-parser/raw/branch/master/test/resources/${rDir}/pkgbase.old.yaml`, path.join('test', 'resources', rDir, 'pkgbase.new.yaml'))).resolves.toEqual(expected); }); it('can detect a delete operation', async () => { const expected: Result = { build: false, move: [], delete: [ { architecture: "any", package: "python-nntplib", repository: "world", version: "3.13.0-2", }, { architecture: "any", package: "python-cgi", repository: "world", version: "3.13.0-2", }, { architecture: "any", package: "python-mailcap", repository: "world", version: "3.13.0-2", } ], deps: 'stable', actions: { addRepo: null, removeRepo: 'world', triggersBuild: false, triggersRebuild: false, triggersRepoAdd: false, triggersRepoRemove: true, triggersNoCheck: false } }; const rDir = 'remove'; await expect(parse(path.join('test', 'resources', rDir, 'pkgbase.old.yaml'), path.join('test', 'resources', rDir, 'pkgbase.new.yaml'))).resolves.toEqual(expected); }); it('can handle Arch repos', async () => { expect(getDepRepo('core')).to.be.equal('stable'); expect(getDepRepo('core-testing')).to.be.equal('testing'); expect(getDepRepo('extra-staging')).to.be.equal('staging'); }); });