From 25532f16b3601059860301e7482920ed04aa2908 Mon Sep 17 00:00:00 2001 From: Cory Sanin Date: Wed, 5 Nov 2025 02:07:02 -0500 Subject: [PATCH] tests, slightly more robust parsing logic --- src/pkgbase.ts | 5 +- test/pkgbase.test.ts | 63 +++++++++++++++++- test/resources/move-clean/pkgbase.new.yaml | 60 +++++++++++++++++ test/resources/move-clean/pkgbase.old.yaml | 61 ++++++++++++++++++ .../move-with-dropped/pkgbase.new.yaml | 61 ++++++++++++++++++ .../move-with-dropped/pkgbase.old.yaml | 64 +++++++++++++++++++ test/resources/remove/pkgbase.new.yaml | 59 +++++++++++++++++ test/resources/remove/pkgbase.old.yaml | 59 +++++++++++++++++ 8 files changed, 428 insertions(+), 4 deletions(-) create mode 100644 test/resources/move-clean/pkgbase.new.yaml create mode 100644 test/resources/move-clean/pkgbase.old.yaml create mode 100644 test/resources/move-with-dropped/pkgbase.new.yaml create mode 100644 test/resources/move-with-dropped/pkgbase.old.yaml create mode 100644 test/resources/remove/pkgbase.new.yaml create mode 100644 test/resources/remove/pkgbase.old.yaml diff --git a/src/pkgbase.ts b/src/pkgbase.ts index 24800d7..326f9e0 100644 --- a/src/pkgbase.ts +++ b/src/pkgbase.ts @@ -56,10 +56,11 @@ async function parse(previous: PathLike, current: PathLike): Promise { }; if (isDelete(actions)) { - result.delete.push(...(prev.repos[actions.removeRepo] as RepoContents).packages); + const repo: RepoContents = prev.repos[actions.removeRepo]; + result.delete.push(...repo.packages.map(p => `${actions.removeRepo}/${p.split(`-${repo.version}`)[0]}`)); } else if (result.move = isMove(actions)) { - result.delete.push(...getDropped(prev.repos[actions.removeRepo], curr.repos[actions.addRepo])); + result.delete.push(...getDropped(prev.repos[actions.addRepo], curr.repos[actions.removeRepo])); } else if (result.build = isAdd(actions)) { result.delete.push(...getDropped(prev.repos[actions.addRepo], curr.repos[actions.addRepo])); diff --git a/test/pkgbase.test.ts b/test/pkgbase.test.ts index cd330cd..8041098 100644 --- a/test/pkgbase.test.ts +++ b/test/pkgbase.test.ts @@ -18,7 +18,8 @@ describe('pkgbase parser', () => { triggersNoCheck: false } }; - await expect(parse(path.join('test', 'resources', 'add-clean', 'pkgbase.old.yaml'), path.join('test', 'resources', 'add-clean', 'pkgbase.new.yaml'))).resolves.toEqual(expected); + 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 remove dangling packages in an add operation', async () => { @@ -36,6 +37,64 @@ describe('pkgbase parser', () => { triggersNoCheck: false } }; - await expect(parse(path.join('test', 'resources', 'add-with-dropped', 'pkgbase.old.yaml'), path.join('test', 'resources', 'add-with-dropped', 'pkgbase.new.yaml'))).resolves.toEqual(expected); + 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: true, + delete: ['opencascade'], + 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: true, + delete: ['pidgin', 'libpurple', 'finch'], + actions: { + addRepo: 'world', + removeRepo: 'world-gremlins', + triggersBuild: false, + triggersRebuild: false, + triggersRepoAdd: true, + triggersRepoRemove: true, + triggersNoCheck: false + } + }; + const rDir = 'move-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 delete operation', async () => { + const expected: Result = { + build: false, + move: false, + delete: ['world/python-nntplib', 'world/python-cgi', 'world/python-mailcap'], + 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); }); }); \ No newline at end of file diff --git a/test/resources/move-clean/pkgbase.new.yaml b/test/resources/move-clean/pkgbase.new.yaml new file mode 100644 index 0000000..9230213 --- /dev/null +++ b/test/resources/move-clean/pkgbase.new.yaml @@ -0,0 +1,60 @@ +--- +actions: + addRepo: world + removeRepo: world-gremlins + triggersBuild: false + triggersRebuild: false + triggersRepoAdd: true + triggersRepoRemove: true + triggersNoCheck: false +repos: + system-goblins: + version: null + packages: [] + debug: [] + system-gremlins: + version: null + packages: [] + debug: [] + system: + version: null + packages: [] + debug: [] + world-goblins: + version: null + packages: [] + debug: [] + world-gremlins: + version: null + packages: [] + debug: [] + world: + version: 1:7.9.2-1 + packages: + - opencascade-1:7.9.2-1-x86_64.pkg.tar.zst + debug: [] + lib32-goblins: + version: null + packages: [] + debug: [] + lib32-gremlins: + version: null + packages: [] + debug: [] + lib32: + version: null + packages: [] + debug: [] + galaxy-goblins: + version: null + packages: [] + debug: [] + galaxy-gremlins: + version: null + packages: [] + debug: [] + galaxy: + version: null + packages: [] + debug: [] +team: world diff --git a/test/resources/move-clean/pkgbase.old.yaml b/test/resources/move-clean/pkgbase.old.yaml new file mode 100644 index 0000000..0c263d5 --- /dev/null +++ b/test/resources/move-clean/pkgbase.old.yaml @@ -0,0 +1,61 @@ +--- +actions: + addRepo: world-gremlins + removeRepo: null + triggersBuild: false + triggersRebuild: true + triggersRepoAdd: true + triggersRepoRemove: false + triggersNoCheck: false +repos: + system-goblins: + version: null + packages: [] + debug: [] + system-gremlins: + version: null + packages: [] + debug: [] + system: + version: null + packages: [] + debug: [] + world-goblins: + version: null + packages: [] + debug: [] + world-gremlins: + version: 1:7.9.2-1 + packages: + - opencascade-1:7.9.2-1-x86_64.pkg.tar.zst + debug: [] + world: + version: 1:7.9.1-1 + packages: + - opencascade-1:7.9.1-1-x86_64.pkg.tar.zst + debug: [] + lib32-goblins: + version: null + packages: [] + debug: [] + lib32-gremlins: + version: null + packages: [] + debug: [] + lib32: + version: null + packages: [] + debug: [] + galaxy-goblins: + version: null + packages: [] + debug: [] + galaxy-gremlins: + version: null + packages: [] + debug: [] + galaxy: + version: null + packages: [] + debug: [] +team: world diff --git a/test/resources/move-with-dropped/pkgbase.new.yaml b/test/resources/move-with-dropped/pkgbase.new.yaml new file mode 100644 index 0000000..316ff70 --- /dev/null +++ b/test/resources/move-with-dropped/pkgbase.new.yaml @@ -0,0 +1,61 @@ +--- +actions: + addRepo: world + removeRepo: world-gremlins + triggersBuild: false + triggersRebuild: false + triggersRepoAdd: true + triggersRepoRemove: true + triggersNoCheck: false +repos: + system-goblins: + version: null + packages: [] + debug: [] + system-gremlins: + version: null + packages: [] + debug: [] + system: + version: null + packages: [] + debug: [] + world-goblins: + version: null + packages: [] + debug: [] + world-gremlins: + version: null + packages: [] + debug: [] + world: + version: 2.14.14-4 + packages: + - libpurple-2.14.14-4-x86_64.pkg.tar.zst + - finch-2.14.14-4-x86_64.pkg.tar.zst + debug: [] + lib32-goblins: + version: null + packages: [] + debug: [] + lib32-gremlins: + version: null + packages: [] + debug: [] + lib32: + version: null + packages: [] + debug: [] + galaxy-goblins: + version: null + packages: [] + debug: [] + galaxy-gremlins: + version: null + packages: [] + debug: [] + galaxy: + version: null + packages: [] + debug: [] +team: world diff --git a/test/resources/move-with-dropped/pkgbase.old.yaml b/test/resources/move-with-dropped/pkgbase.old.yaml new file mode 100644 index 0000000..7e56c0d --- /dev/null +++ b/test/resources/move-with-dropped/pkgbase.old.yaml @@ -0,0 +1,64 @@ +--- +actions: + addRepo: world-gremlins + removeRepo: null + triggersBuild: false + triggersRebuild: true + triggersRepoAdd: true + triggersRepoRemove: false + triggersNoCheck: false +repos: + system-goblins: + version: null + packages: [] + debug: [] + system-gremlins: + version: null + packages: [] + debug: [] + system: + version: null + packages: [] + debug: [] + world-goblins: + version: null + packages: [] + debug: [] + world-gremlins: + version: 2.14.14-4 + packages: + - libpurple-2.14.14-4-x86_64.pkg.tar.zst + - finch-2.14.14-4-x86_64.pkg.tar.zst + debug: [] + world: + version: 2.14.14-3 + packages: + - pidgin-2.14.14-3-x86_64.pkg.tar.zst + - libpurple-2.14.14-3-x86_64.pkg.tar.zst + - finch-2.14.14-3-x86_64.pkg.tar.zst + debug: [] + lib32-goblins: + version: null + packages: [] + debug: [] + lib32-gremlins: + version: null + packages: [] + debug: [] + lib32: + version: null + packages: [] + debug: [] + galaxy-goblins: + version: null + packages: [] + debug: [] + galaxy-gremlins: + version: null + packages: [] + debug: [] + galaxy: + version: null + packages: [] + debug: [] +team: world diff --git a/test/resources/remove/pkgbase.new.yaml b/test/resources/remove/pkgbase.new.yaml new file mode 100644 index 0000000..5260619 --- /dev/null +++ b/test/resources/remove/pkgbase.new.yaml @@ -0,0 +1,59 @@ +--- +team: world +actions: + addRepo: null + removeRepo: world + triggersBuild: false + triggersRebuild: false + triggersRepoAdd: false + triggersRepoRemove: true + triggersNoCheck: false +repos: + system-goblins: + version: null + packages: [] + debug: [] + system-gremlins: + version: null + packages: [] + debug: [] + system: + version: null + packages: [] + debug: [] + world-goblins: + version: null + packages: [] + debug: [] + world-gremlins: + version: null + packages: [] + debug: [] + world: + version: null + packages: [] + debug: [] + lib32-goblins: + version: null + packages: [] + debug: [] + lib32-gremlins: + version: null + packages: [] + debug: [] + lib32: + version: null + packages: [] + debug: [] + galaxy-goblins: + version: null + packages: [] + debug: [] + galaxy-gremlins: + version: null + packages: [] + debug: [] + galaxy: + version: null + packages: [] + debug: [] diff --git a/test/resources/remove/pkgbase.old.yaml b/test/resources/remove/pkgbase.old.yaml new file mode 100644 index 0000000..ea2b479 --- /dev/null +++ b/test/resources/remove/pkgbase.old.yaml @@ -0,0 +1,59 @@ +--- +team: world +pkgbase: + name: python-deadlib + version: 3.13.0-2 + arch: + - any + pkgname: + - python-nntplib + - python-cgi + - python-mailcap +actions: + addRepo: world + removeRepo: world-gremlins + triggersBuild: false + triggersRebuild: false + triggersRepoAdd: true + triggersRepoRemove: true + triggersNoCheck: false +repos: + system-goblins: + version: null + packages: [] + system-gremlins: + version: null + packages: [] + system: + version: null + packages: [] + world-goblins: + version: null + packages: [] + world-gremlins: + version: null + packages: [] + world: + version: 3.13.0-2 + packages: + - python-nntplib-3.13.0-2-any.pkg.tar.zst + - python-cgi-3.13.0-2-any.pkg.tar.zst + - python-mailcap-3.13.0-2-any.pkg.tar.zst + lib32-goblins: + version: null + packages: [] + lib32-gremlins: + version: null + packages: [] + lib32: + version: null + packages: [] + galaxy-goblins: + version: null + packages: [] + galaxy-gremlins: + version: null + packages: [] + galaxy: + version: null + packages: []