import { applyManifestOverrides, getObsoleteManifests, getSupersededPackages, ManifestOverrides } from './overrideUtils'; describe('overrideUtils', () => { test('should get the obsolete manifests', () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied const manifestOverrides: any = { 'ambrt.backlinksToNote': { 'manifest_version': 1, 'id': 'ambrt.backlinksToNote', 'app_min_version': '1.5', 'version': '1.0.2', 'name': 'Backlinks to note', 'description': 'Creates backlinks to opened note', 'author': 'a', 'homepage_url': 'https://discourse.joplinapp.org/t/insert-referencing-notes-backlinks-plugin/13632', '_publish_hash': 'sha256:5676da6b9ad71fc5a9779d3bde13f17de5352344711e135f0db8c62c6dbb5696', '_publish_commit': 'master:19e515bd67e51cc37bd270a32d2898ca009a0de2', '_npm_package_name': 'joplin-plugin-backlinks', '_obsolete': true, }, 'MyPlugin': { 'manifest_version': 1, 'id': 'MyPlugin', 'app_min_version': '1.6', 'version': '1.0.0', 'name': 'Testing New Plugin', 'description': 'bla', 'author': 'bla', 'homepage_url': 'bla', 'repository_url': 'bla', '_publish_hash': 'sha256:065285d06ea3c084e7f8f8c23583de8d70c4d586274a242c4c750f6faad8c7cb', '_publish_commit': '', '_npm_package_name': 'joplin-plugin-testing-new-plugin', '_obsolete': true, }, 'io.github.jackgruber.copytags': { '_recommended': true, }, }; const obsoletes = getObsoleteManifests(manifestOverrides); expect(Object.keys(obsoletes).sort()).toEqual(['MyPlugin', 'ambrt.backlinksToNote']); expect(obsoletes['ambrt.backlinksToNote'].description).toBe('Creates backlinks to opened note'); }); test('should apply the overrides', () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied const manifests: any = { 'io.github.jackgruber.copytags': { 'manifest_version': 1, 'id': 'io.github.jackgruber.copytags', 'app_min_version': '1.6.2', 'version': '1.0.1', 'name': 'Tagging', 'description': 'Plugin to extend the Joplin tagging menu with a copy all tags and a tagging dialog with more control. (Formerly Copy Tags).', 'author': 'JackGruber', 'homepage_url': 'https://github.com/JackGruber/joplin-plugin-tagging/blob/master/README.md', 'repository_url': 'https://github.com/JackGruber/joplin-plugin-tagging', 'keywords': [ 'duplicate', 'copy', 'tags', 'tagging', 'tag', ], '_publish_hash': 'sha256:88daaf234a9b47e5644a8de6f830a801d12edbe41ea5364d994773e89eeafeef', '_publish_commit': 'master:64c0510e3236df7788a8d10ec28dcfbb4c2bdbb7', '_npm_package_name': 'joplin-plugin-copytags', }, 'joplin.plugin.ambrt.backlinksToNote': { 'manifest_version': 1, 'id': 'joplin.plugin.ambrt.backlinksToNote', 'app_min_version': '1.7', 'version': '2.0.11', 'name': 'Automatic Backlinks to note', 'description': 'Creates backlinks to opened note, also in automatic way', 'author': 'ambrt,cyingfan', 'homepage_url': 'https://discourse.joplinapp.org/t/insert-referencing-notes-backlinks-plugin/13632', '_publish_hash': 'sha256:df57930d1ab62d4297dad0bb1764888935fcbf6ca8c04e3a843e86a260735c51', '_publish_commit': 'master:98102718a9c0fa9416d654451b18602798c4d3bb', '_npm_package_name': 'joplin-plugin-backlinks', }, }; const overrides: ManifestOverrides = { 'io.github.jackgruber.copytags': { _recommended: true, }, }; const updatedManifests = applyManifestOverrides(manifests, overrides); expect(updatedManifests['io.github.jackgruber.copytags']._recommended).toBe(true); expect(updatedManifests['joplin.plugin.ambrt.backlinksToNote']._recommended).toBe(undefined); }); test('should get superseded packages', () => { const manifestOverrides = { 'joplin.plugin.benji.favorites': { _superseded_package: 'joplin-plugin-benji-favorites', }, 'io.github.jackgruber.copytags': { _recommended: true, }, }; const supersededPackages = getSupersededPackages(manifestOverrides); expect(supersededPackages).toMatchObject(['joplin-plugin-benji-favorites']); }); });