From 7e0115a9ca88d3c89a1daab312e219a34a8d889a Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Sat, 18 Jul 2026 22:46:10 -0700 Subject: [PATCH 1/3] Allow deleting apps with legacy names --- src/datastore/AppsDataStore.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/datastore/AppsDataStore.ts b/src/datastore/AppsDataStore.ts index a24ee48..1d5deba 100644 --- a/src/datastore/AppsDataStore.ts +++ b/src/datastore/AppsDataStore.ts @@ -869,16 +869,6 @@ class AppsDataStore { const self = this return new Promise(function (resolve, reject) { - if (!isNameAllowed(appName)) { - reject( - ApiStatusCodes.createError( - ApiStatusCodes.STATUS_ERROR_BAD_NAME, - 'App Name is not allowed. Only lowercase letters, numbers and single hyphens are allowed' - ) - ) - return - } - if (!self.data.get(`${APP_DEFINITIONS}.${appName}`)) { reject( ApiStatusCodes.createError( From d4a9188e01f895e9deed413e292bcc833a757a08 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Sat, 18 Jul 2026 22:46:14 -0700 Subject: [PATCH 2/3] Test deletion of legacy app names --- tests/AppsDataStore.test.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 tests/AppsDataStore.test.ts diff --git a/tests/AppsDataStore.test.ts b/tests/AppsDataStore.test.ts new file mode 100644 index 0000000..b102248 --- /dev/null +++ b/tests/AppsDataStore.test.ts @@ -0,0 +1,22 @@ +import configstore = require('configstore') +import AppsDataStore from '../src/datastore/AppsDataStore' +import Utils from '../src/utils/Utils' + +describe('AppsDataStore deletion', () => { + test('allows deleting an existing app with a name that is no longer valid', async () => { + const data = { + get: jest.fn(() => ({})), + delete: jest.fn(), + } as unknown as configstore + jest.spyOn(Utils, 'getDelayedPromise').mockResolvedValue(undefined) + + const appsDataStore = new AppsDataStore(data, 'captain') + + await expect( + appsDataStore.deleteAppDefinition('legacy invalid app') + ).resolves.toBeUndefined() + expect(data.delete).toHaveBeenCalledWith( + 'appDefinitions.legacy invalid app' + ) + }) +}) From 7c0855394c1cb873be71c5f651e485175e9e1994 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Sat, 18 Jul 2026 22:54:44 -0700 Subject: [PATCH 3/3] Remove over-specific deletion test --- tests/AppsDataStore.test.ts | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 tests/AppsDataStore.test.ts diff --git a/tests/AppsDataStore.test.ts b/tests/AppsDataStore.test.ts deleted file mode 100644 index b102248..0000000 --- a/tests/AppsDataStore.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import configstore = require('configstore') -import AppsDataStore from '../src/datastore/AppsDataStore' -import Utils from '../src/utils/Utils' - -describe('AppsDataStore deletion', () => { - test('allows deleting an existing app with a name that is no longer valid', async () => { - const data = { - get: jest.fn(() => ({})), - delete: jest.fn(), - } as unknown as configstore - jest.spyOn(Utils, 'getDelayedPromise').mockResolvedValue(undefined) - - const appsDataStore = new AppsDataStore(data, 'captain') - - await expect( - appsDataStore.deleteAppDefinition('legacy invalid app') - ).resolves.toBeUndefined() - expect(data.delete).toHaveBeenCalledWith( - 'appDefinitions.legacy invalid app' - ) - }) -})