diff --git a/backend/src/entities/table-categories/table-categories.controller.ts b/backend/src/entities/table-categories/table-categories.controller.ts index 83e562693..1c0787dc5 100644 --- a/backend/src/entities/table-categories/table-categories.controller.ts +++ b/backend/src/entities/table-categories/table-categories.controller.ts @@ -10,6 +10,7 @@ import { CreateOrUpdateTableCategoriesDS } from './data-sctructures/create-or-up import { CreateTableCategoryDto } from './dto/create-table-category.dto.js'; import { FoundTableCategoryRo } from './dto/found-table-category.ro.js'; import { ICreateTableCategories, IFindTableCategories } from './use-cases/table-categories-use-cases.interface.js'; +import { InTransactionEnum } from '../../enums/in-transaction.enum.js'; @UseInterceptors(SentryInterceptor) @Controller('table-categories') @@ -45,7 +46,7 @@ export class TableCategoriesController { master_password: masterPwd, table_categories: requestBody, }; - return await this.createTableCategoriesUseCase.execute(inputData); + return await this.createTableCategoriesUseCase.execute(inputData, InTransactionEnum.ON); } @ApiOperation({ summary: 'Find table categories' }) diff --git a/backend/src/entities/table-categories/use-cases/table-categories-use-cases.interface.ts b/backend/src/entities/table-categories/use-cases/table-categories-use-cases.interface.ts index 4823a7cc6..5f2856eb8 100644 --- a/backend/src/entities/table-categories/use-cases/table-categories-use-cases.interface.ts +++ b/backend/src/entities/table-categories/use-cases/table-categories-use-cases.interface.ts @@ -1,8 +1,12 @@ +import { InTransactionEnum } from '../../../enums/in-transaction.enum.js'; import { CreateOrUpdateTableCategoriesDS } from '../data-sctructures/create-or-update-table-categories.ds.js'; import { FoundTableCategoryRo } from '../dto/found-table-category.ro.js'; export interface ICreateTableCategories { - execute(inputData: CreateOrUpdateTableCategoriesDS): Promise>; + execute( + inputData: CreateOrUpdateTableCategoriesDS, + inTransaction: InTransactionEnum, + ): Promise>; } export interface IFindTableCategories { diff --git a/backend/test/ava-tests/saas-tests/table-categories-e2e.test.ts b/backend/test/ava-tests/saas-tests/table-categories-e2e.test.ts index 2bdf2201d..489d47c73 100644 --- a/backend/test/ava-tests/saas-tests/table-categories-e2e.test.ts +++ b/backend/test/ava-tests/saas-tests/table-categories-e2e.test.ts @@ -267,6 +267,35 @@ test.serial(`${currentTest} find table categories`, async (t) => { t.is(findTableCategoriesRO[2].category_color, '#3357FF'); t.is(findTableCategoriesRO[2].category_id, 'cat-003'); t.deepEqual(findTableCategoriesRO[2].tables, [firstTesTableName, secondTesTableName]); + + // should recreate categories on the new request + const recreateTableCategoriesResponse = await request(app.getHttpServer()) + .put(`/table-categories/${createConnectionRO.id}`) + .send([categoriesDTO[0]]) + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + + const recreateTableCategoriesRO = JSON.parse(recreateTableCategoriesResponse.text); + + t.is(recreateTableCategoriesResponse.status, 200); + + // get should return updated categories + const getAfterRecreateTableCategoriesResponse = await request(app.getHttpServer()) + .get(`/table-categories/${createConnectionRO.id}`) + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + + const getAfterRecreateTableCategoriesRO = JSON.parse(getAfterRecreateTableCategoriesResponse.text); + + t.is(getAfterRecreateTableCategoriesResponse.status, 200); + + t.is(getAfterRecreateTableCategoriesRO.length, 1); + t.is(getAfterRecreateTableCategoriesRO[0].category_name, 'Category 1'); + t.is(getAfterRecreateTableCategoriesRO[0].category_color, '#FF5733'); + t.is(getAfterRecreateTableCategoriesRO[0].category_id, 'cat-001'); + t.deepEqual(getAfterRecreateTableCategoriesRO[0].tables, [firstTesTableName]); } catch (e) { console.error(e); t.fail();