diff --git a/packages/api/methods.test.ts b/packages/api/methods.test.ts index e68214d83d9925bf2b0bb0fed4c9bd6163c8289f..ff8830010d2debac89e3325a270402b5f69ef5e4 100644 --- a/packages/api/methods.test.ts +++ b/packages/api/methods.test.ts @@ -58,11 +58,42 @@ describe('API CRUD operations', () => { await api.loadBudget(budgetName); }); - // apis: createCategoryGroup, updateCategoryGroup, deleteCategoryGroup + // apis: getCategoryGroups, createCategoryGroup, updateCategoryGroup, deleteCategoryGroup test('CategoryGroups: successfully update category groups', async () => { const month = '2023-10'; global.currentMonth = month; + // get existing category groups + const groups = await api.getCategoryGroups(); + expect(groups).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + hidden: 0, + id: 'fc3825fd-b982-4b72-b768-5b30844cf832', + is_income: 0, + name: 'Usual Expenses', + sort_order: 16384, + tombstone: 0, + }), + expect.objectContaining({ + hidden: 0, + id: 'a137772f-cf2f-4089-9432-822d2ddc1466', + is_income: 0, + name: 'Investments and Savings', + sort_order: 32768, + tombstone: 0, + }), + expect.objectContaining({ + hidden: 0, + id: '2E1F5BDB-209B-43F9-AF2C-3CE28E380C00', + is_income: 1, + name: 'Income', + sort_order: 32768, + tombstone: 0, + }), + ]), + ); + // create our test category group const mainGroupId = await api.createCategoryGroup({ name: 'test-group', diff --git a/packages/api/methods.ts b/packages/api/methods.ts index 03acaf0f4f66e3a2578de907ca2e215db9146448..cf8a6aa46257bfd7daf7b1589c0bbd21c169f6c6 100644 --- a/packages/api/methods.ts +++ b/packages/api/methods.ts @@ -121,6 +121,10 @@ export function deleteAccount(id) { return send('api/account-delete', { id }); } +export function getCategoryGroups() { + return send('api/category-groups-get'); +} + export function createCategoryGroup(group) { return send('api/category-group-create', { group }); } diff --git a/packages/loot-core/src/server/api.ts b/packages/loot-core/src/server/api.ts index 2956ce61aefed3e061a5d95445057b4453881cb2..13c731235a0b59e1546524a2e35e5c940099a361 100644 --- a/packages/loot-core/src/server/api.ts +++ b/packages/loot-core/src/server/api.ts @@ -514,6 +514,11 @@ handlers['api/categories-get'] = async function ({ : result.list.map(categoryModel.toExternal); }; +handlers['api/category-groups-get'] = async function () { + checkFileOpen(); + return handlers['get-category-groups'](); +}; + handlers['api/category-group-create'] = withMutation(async function ({ group, }) { diff --git a/packages/loot-core/src/server/main.ts b/packages/loot-core/src/server/main.ts index 64cd29938bb685dfb44ffe9b9e33d6400a2dbb06..b5e3c0d49ad19aa1c7143e6ae12d0bb3afec1c52 100644 --- a/packages/loot-core/src/server/main.ts +++ b/packages/loot-core/src/server/main.ts @@ -361,6 +361,10 @@ handlers['category-delete'] = mutator(async function ({ id, transferId }) { }); }); +handlers['get-category-groups'] = async function () { + return await db.getCategoriesGrouped(); +}; + handlers['category-group-create'] = mutator(async function ({ name, isIncome, diff --git a/packages/loot-core/src/types/api-handlers.d.ts b/packages/loot-core/src/types/api-handlers.d.ts index 7ad399073d8f0cbae1b2b561213080efd6f18813..1f314fde6b704ca13452d016185e0d7fd28b0bba 100644 --- a/packages/loot-core/src/types/api-handlers.d.ts +++ b/packages/loot-core/src/types/api-handlers.d.ts @@ -109,6 +109,8 @@ export interface ApiHandlers { grouped; }) => Promise<Array<CategoryGroupEntity> | Array<CategoryEntity>>; + 'api/category-groups-get': () => Promise<CategoryGroupEntity[]>; + 'api/category-group-create': (arg: { group }) => Promise<string>; 'api/category-group-update': (arg: { id; fields }) => Promise<unknown>; diff --git a/upcoming-release-notes/2446.md b/upcoming-release-notes/2446.md new file mode 100644 index 0000000000000000000000000000000000000000..d37841b1cd7b74bec95110cd6f23788017d59b3a --- /dev/null +++ b/upcoming-release-notes/2446.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [psybers] +--- + +Provide "api/category-groups-get" API endpoint \ No newline at end of file