diff --git a/backend/src/entities/table-settings/personal-table-settings/use-cases/create-update-personal-table-settings.use.case.ts b/backend/src/entities/table-settings/personal-table-settings/use-cases/create-update-personal-table-settings.use.case.ts index 0c96e4ede..69d551a0a 100644 --- a/backend/src/entities/table-settings/personal-table-settings/use-cases/create-update-personal-table-settings.use.case.ts +++ b/backend/src/entities/table-settings/personal-table-settings/use-cases/create-update-personal-table-settings.use.case.ts @@ -5,8 +5,8 @@ import { IGlobalDatabaseContext } from '../../../../common/application/global-da import { BaseType } from '../../../../common/data-injection.tokens.js'; import { ConnectionEntity } from '../../../connection/connection.entity.js'; import { - CreatePersonalTableSettingsDs, - PersonalTableSettingsData, + CreatePersonalTableSettingsDs, + PersonalTableSettingsData, } from '../data-structures/create-personal-table-settings.ds.js'; import { FoundPersonalTableSettingsDto } from '../dto/found-personal-table-settings.dto.js'; import { buildNewPersonalTableSettingsEntity } from '../utils/build-new-personal-table-settings-entity.util.js'; @@ -14,92 +14,113 @@ import { ICreateUpdatePersonalTableSettings } from './personal-table-settings.us @Injectable({ scope: Scope.REQUEST }) export class CreateUpdatePersonalTableSettingsUseCase - extends AbstractUseCase - implements ICreateUpdatePersonalTableSettings + extends AbstractUseCase + implements ICreateUpdatePersonalTableSettings { - constructor( - @Inject(BaseType.GLOBAL_DB_CONTEXT) - protected _dbContext: IGlobalDatabaseContext, - ) { - super(); - } + constructor( + @Inject(BaseType.GLOBAL_DB_CONTEXT) + protected _dbContext: IGlobalDatabaseContext, + ) { + super(); + } - public async implementation( - personalTableSettingsData: CreatePersonalTableSettingsDs, - ): Promise { - const { - table_settings_metadata: { connection_id, master_password, table_name, user_id }, - table_settings_data, - } = personalTableSettingsData; + public async implementation( + personalTableSettingsData: CreatePersonalTableSettingsDs, + ): Promise { + const { + table_settings_metadata: { connection_id, master_password, table_name, user_id }, + table_settings_data, + } = personalTableSettingsData; - const foundConnection = await this._dbContext.connectionRepository.findAndDecryptConnection( - connection_id, - master_password, - ); + const foundConnection = await this._dbContext.connectionRepository.findAndDecryptConnection( + connection_id, + master_password, + ); - await this.validatePersonalTableSettingsData(table_settings_data, foundConnection, table_name); + await this.validatePersonalTableSettingsData(table_settings_data, foundConnection, table_name); - const foundTableSettings = await this._dbContext.personalTableSettingsRepository.findUserTableSettings( - user_id, - connection_id, - table_name, - ); + const foundTableSettings = await this._dbContext.personalTableSettingsRepository.findUserTableSettings( + user_id, + connection_id, + table_name, + ); - const settings = foundTableSettings || {}; - const newSettingsEntity = buildNewPersonalTableSettingsEntity(table_settings_data); - newSettingsEntity.connection_id = foundConnection.id; - newSettingsEntity.table_name = table_name; - newSettingsEntity.user_id = user_id; - Object.assign(settings, newSettingsEntity); - return await this._dbContext.personalTableSettingsRepository.save(settings); - } + const newSettingsEntity = buildNewPersonalTableSettingsEntity(table_settings_data); - private async validatePersonalTableSettingsData( - settingsData: PersonalTableSettingsData, - connection: ConnectionEntity, - tableName: string, - ): Promise { - const { columns_view, list_fields, list_per_page, ordering, ordering_field } = settingsData; - const dao = getDataAccessObject(connection); - const tableStructure = await dao.getTableStructure(tableName, null); - const tableColumnNames = tableStructure.map((col) => col.column_name); - const errors = []; + if (foundTableSettings) { + if (newSettingsEntity.columns_view !== undefined) { + foundTableSettings.columns_view = newSettingsEntity.columns_view; + } + if (newSettingsEntity.list_fields !== undefined) { + foundTableSettings.list_fields = newSettingsEntity.list_fields; + } + if (newSettingsEntity.list_per_page !== undefined) { + foundTableSettings.list_per_page = newSettingsEntity.list_per_page; + } + if (newSettingsEntity.ordering !== undefined) { + foundTableSettings.ordering = newSettingsEntity.ordering; + } + if (newSettingsEntity.ordering_field !== undefined) { + foundTableSettings.ordering_field = newSettingsEntity.ordering_field; + } + if (newSettingsEntity.original_names !== undefined) { + foundTableSettings.original_names = newSettingsEntity.original_names; + } + return await this._dbContext.personalTableSettingsRepository.save(foundTableSettings); + } else { + newSettingsEntity.connection_id = foundConnection.id; + newSettingsEntity.table_name = table_name; + newSettingsEntity.user_id = user_id; + return await this._dbContext.personalTableSettingsRepository.save(newSettingsEntity); + } + } - if (columns_view !== null && columns_view !== undefined) { - const invalidColumns = columns_view.filter((col) => !tableColumnNames.includes(col)); - if (invalidColumns.length > 0) { - errors.push(`Invalid columns in columns_view: ${invalidColumns.join(', ')}`); - } - } + private async validatePersonalTableSettingsData( + settingsData: PersonalTableSettingsData, + connection: ConnectionEntity, + tableName: string, + ): Promise { + const { columns_view, list_fields, list_per_page, ordering, ordering_field } = settingsData; + const dao = getDataAccessObject(connection); + const tableStructure = await dao.getTableStructure(tableName, null); + const tableColumnNames = tableStructure.map((col) => col.column_name); + const errors = []; - if (list_fields !== null && list_fields !== undefined) { - const invalidFields = list_fields.filter((field) => !tableColumnNames.includes(field)); - if (invalidFields.length > 0) { - errors.push(`Invalid columns in list_fields: ${invalidFields.join(', ')}`); - } - } + if (columns_view !== null && columns_view !== undefined) { + const invalidColumns = columns_view.filter((col) => !tableColumnNames.includes(col)); + if (invalidColumns.length > 0) { + errors.push(`Invalid columns in columns_view: ${invalidColumns.join(', ')}`); + } + } - if (list_per_page !== null && list_per_page !== undefined) { - if (typeof list_per_page !== 'number' || list_per_page < 1 || list_per_page > 1000) { - errors.push('list_per_page must be a number between 1 and 1000'); - } - } + if (list_fields !== null && list_fields !== undefined) { + const invalidFields = list_fields.filter((field) => !tableColumnNames.includes(field)); + if (invalidFields.length > 0) { + errors.push(`Invalid columns in list_fields: ${invalidFields.join(', ')}`); + } + } - if (ordering !== null && ordering !== undefined) { - const validOrderings = ['ASC', 'DESC']; - if (!validOrderings.includes(ordering)) { - errors.push(`ordering must be one of: ${validOrderings.join(', ')}`); - } - } + if (list_per_page !== null && list_per_page !== undefined) { + if (typeof list_per_page !== 'number' || list_per_page < 1 || list_per_page > 1000) { + errors.push('list_per_page must be a number between 1 and 1000'); + } + } - if (ordering_field !== null && ordering_field !== undefined) { - if (!tableColumnNames.includes(ordering_field)) { - errors.push(`Invalid ordering_field: ${ordering_field}`); - } - } + if (ordering !== null && ordering !== undefined) { + const validOrderings = ['ASC', 'DESC']; + if (!validOrderings.includes(ordering)) { + errors.push(`ordering must be one of: ${validOrderings.join(', ')}`); + } + } - if (errors.length > 0) { - throw new BadRequestException(`Validation failed: ${errors.join('; ')}`); - } - } + if (ordering_field !== null && ordering_field !== undefined) { + if (!tableColumnNames.includes(ordering_field)) { + errors.push(`Invalid ordering_field: ${ordering_field}`); + } + } + + if (errors.length > 0) { + throw new BadRequestException(`Validation failed: ${errors.join('; ')}`); + } + } } diff --git a/backend/test/ava-tests/saas-tests/table-settings-personal-e2e.test.ts b/backend/test/ava-tests/saas-tests/table-settings-personal-e2e.test.ts index d07404ad8..d5cf25394 100644 --- a/backend/test/ava-tests/saas-tests/table-settings-personal-e2e.test.ts +++ b/backend/test/ava-tests/saas-tests/table-settings-personal-e2e.test.ts @@ -29,198 +29,217 @@ let testUtils: TestUtils; let currentTest; test.before(async () => { - const moduleFixture = await Test.createTestingModule({ - imports: [ApplicationModule, DatabaseModule], - providers: [DatabaseService, TestUtils], - }).compile(); - app = moduleFixture.createNestApplication(); - testUtils = moduleFixture.get(TestUtils); - - app.use(cookieParser()); - app.useGlobalFilters(new AllExceptionsFilter(app.get(WinstonLogger))); - app.useGlobalPipes( - new ValidationPipe({ - exceptionFactory(validationErrors: ValidationError[] = []) { - return new ValidationException(validationErrors); - }, - }), - ); - await app.init(); - app.getHttpServer().listen(0); + const moduleFixture = await Test.createTestingModule({ + imports: [ApplicationModule, DatabaseModule], + providers: [DatabaseService, TestUtils], + }).compile(); + app = moduleFixture.createNestApplication(); + testUtils = moduleFixture.get(TestUtils); + + app.use(cookieParser()); + app.useGlobalFilters(new AllExceptionsFilter(app.get(WinstonLogger))); + app.useGlobalPipes( + new ValidationPipe({ + exceptionFactory(validationErrors: ValidationError[] = []) { + return new ValidationException(validationErrors); + }, + }), + ); + await app.init(); + app.getHttpServer().listen(0); }); test.after(async () => { - try { - await Cacher.clearAllCache(); - await app.close(); - } catch (e) { - console.error('After tests error ' + e); - } + try { + await Cacher.clearAllCache(); + await app.close(); + } catch (e) { + console.error('After tests error ' + e); + } }); currentTest = 'PUT /settings/personal/:connectionId'; test.serial(`${currentTest} should return created personal table settings`, async (t) => { - const connectionToTestDB = getTestData(mockFactory).connectionToPostgres; - const firstUserToken = (await registerUserAndReturnUserInfo(app)).token; - const { testTableName, testTableColumnName, testTableSecondColumnName } = await createTestTable(connectionToTestDB); - - const createConnectionResponse = await request(app.getHttpServer()) - .post('/connection') - .send(connectionToTestDB) - .set('Cookie', firstUserToken) - .set('Content-Type', 'application/json') - .set('Accept', 'application/json'); - const createConnectionRO = JSON.parse(createConnectionResponse.text); - t.is(createConnectionResponse.status, 201); - - const createPersonalTableSettingsDTO: CreatePersonalTableSettingsDto = { - columns_view: [testTableColumnName, testTableSecondColumnName, 'id'], - list_fields: [testTableSecondColumnName, testTableColumnName, 'id'], - list_per_page: 32, - ordering: QueryOrderingEnum.ASC, - ordering_field: testTableColumnName, - original_names: false, - }; - - const createPersonalTableSettingsResponse = await request(app.getHttpServer()) - .put(`/settings/personal/${createConnectionRO.id}`) - .query({ tableName: testTableName }) - .send(createPersonalTableSettingsDTO) - .set('Cookie', firstUserToken) - .set('Content-Type', 'application/json') - .set('Accept', 'application/json'); - - const createPersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse( - createPersonalTableSettingsResponse.text, - ); - t.is(createPersonalTableSettingsResponse.status, 200); - t.deepEqual(createPersonalTableSettingsRO.columns_view, createPersonalTableSettingsDTO.columns_view); - t.deepEqual(createPersonalTableSettingsRO.list_fields, createPersonalTableSettingsDTO.list_fields); - t.is(createPersonalTableSettingsRO.list_per_page, createPersonalTableSettingsDTO.list_per_page); - t.is(createPersonalTableSettingsRO.ordering, createPersonalTableSettingsDTO.ordering); - t.is(createPersonalTableSettingsRO.ordering_field, createPersonalTableSettingsDTO.ordering_field); - t.is(createPersonalTableSettingsRO.original_names, createPersonalTableSettingsDTO.original_names); - - // should update found personal table settings - const updatedPersonalTableSettingsDTO = { - list_per_page: 52, - ordering: QueryOrderingEnum.DESC, - }; - const updatePersonalTableSettingsResponse = await request(app.getHttpServer()) - .put(`/settings/personal/${createConnectionRO.id}`) - .query({ tableName: testTableName }) - .send(updatedPersonalTableSettingsDTO) - .set('Cookie', firstUserToken) - .set('Content-Type', 'application/json') - .set('Accept', 'application/json'); - - const updatePersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse( - updatePersonalTableSettingsResponse.text, - ); - t.is(updatePersonalTableSettingsResponse.status, 200); - t.deepEqual(updatePersonalTableSettingsRO.columns_view, createPersonalTableSettingsDTO.columns_view); - t.deepEqual(updatePersonalTableSettingsRO.list_fields, createPersonalTableSettingsDTO.list_fields); - t.is(updatePersonalTableSettingsRO.list_per_page, updatedPersonalTableSettingsDTO.list_per_page); - t.is(updatePersonalTableSettingsRO.ordering, updatedPersonalTableSettingsDTO.ordering); - t.is(updatePersonalTableSettingsRO.ordering_field, createPersonalTableSettingsDTO.ordering_field); - t.is(updatePersonalTableSettingsRO.original_names, createPersonalTableSettingsDTO.original_names); + const connectionToTestDB = getTestData(mockFactory).connectionToPostgres; + const firstUserToken = (await registerUserAndReturnUserInfo(app)).token; + const { testTableName, testTableColumnName, testTableSecondColumnName } = await createTestTable(connectionToTestDB); + + const createConnectionResponse = await request(app.getHttpServer()) + .post('/connection') + .send(connectionToTestDB) + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + const createConnectionRO = JSON.parse(createConnectionResponse.text); + t.is(createConnectionResponse.status, 201); + + const createPersonalTableSettingsDTO: CreatePersonalTableSettingsDto = { + columns_view: [testTableColumnName, testTableSecondColumnName, 'id'], + list_fields: ['id', testTableSecondColumnName, testTableColumnName], + list_per_page: 32, + ordering: QueryOrderingEnum.ASC, + ordering_field: testTableColumnName, + original_names: false, + }; + + const createPersonalTableSettingsResponse = await request(app.getHttpServer()) + .put(`/settings/personal/${createConnectionRO.id}`) + .query({ tableName: testTableName }) + .send(createPersonalTableSettingsDTO) + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + + const createPersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse( + createPersonalTableSettingsResponse.text, + ); + t.is(createPersonalTableSettingsResponse.status, 200); + t.deepEqual(createPersonalTableSettingsRO.columns_view, createPersonalTableSettingsDTO.columns_view); + t.deepEqual(createPersonalTableSettingsRO.list_fields, createPersonalTableSettingsDTO.list_fields); + t.is(createPersonalTableSettingsRO.list_per_page, createPersonalTableSettingsDTO.list_per_page); + t.is(createPersonalTableSettingsRO.ordering, createPersonalTableSettingsDTO.ordering); + t.is(createPersonalTableSettingsRO.ordering_field, createPersonalTableSettingsDTO.ordering_field); + t.is(createPersonalTableSettingsRO.original_names, createPersonalTableSettingsDTO.original_names); + + // should update found personal table settings + const updatedPersonalTableSettingsDTO = { + list_per_page: 52, + ordering: QueryOrderingEnum.DESC, + list_fields: [testTableSecondColumnName, testTableColumnName, 'id'], + }; + const updatePersonalTableSettingsResponse = await request(app.getHttpServer()) + .put(`/settings/personal/${createConnectionRO.id}`) + .query({ tableName: testTableName }) + .send(updatedPersonalTableSettingsDTO) + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + + const updatePersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse( + updatePersonalTableSettingsResponse.text, + ); + t.is(updatePersonalTableSettingsResponse.status, 200); + t.deepEqual(updatePersonalTableSettingsRO.columns_view, createPersonalTableSettingsDTO.columns_view); + t.deepEqual(updatePersonalTableSettingsRO.list_fields, updatedPersonalTableSettingsDTO.list_fields); + t.is(updatePersonalTableSettingsRO.list_per_page, updatedPersonalTableSettingsDTO.list_per_page); + t.is(updatePersonalTableSettingsRO.ordering, updatedPersonalTableSettingsDTO.ordering); + t.is(updatePersonalTableSettingsRO.ordering_field, createPersonalTableSettingsDTO.ordering_field); + t.is(updatePersonalTableSettingsRO.original_names, createPersonalTableSettingsDTO.original_names); + + // find updated personal table settings + const findPersonalTableSettingsResponse = await request(app.getHttpServer()) + .get(`/settings/personal/${createConnectionRO.id}`) + .query({ tableName: testTableName }) + .send() + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + + const findPersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse(findPersonalTableSettingsResponse.text); + t.is(findPersonalTableSettingsResponse.status, 200); + t.deepEqual(findPersonalTableSettingsRO.columns_view, createPersonalTableSettingsDTO.columns_view); + t.deepEqual(findPersonalTableSettingsRO.list_fields, updatedPersonalTableSettingsDTO.list_fields); + t.is(findPersonalTableSettingsRO.list_per_page, updatedPersonalTableSettingsDTO.list_per_page); + t.is(findPersonalTableSettingsRO.ordering, updatedPersonalTableSettingsDTO.ordering); + t.is(findPersonalTableSettingsRO.ordering_field, createPersonalTableSettingsDTO.ordering_field); + t.is(findPersonalTableSettingsRO.original_names, createPersonalTableSettingsDTO.original_names); }); currentTest = 'GET /settings/personal/:connectionId'; test.serial(`${currentTest} should return found personal table settings`, async (t) => { - const connectionToTestDB = getTestData(mockFactory).connectionToPostgres; - const firstUserToken = (await registerUserAndReturnUserInfo(app)).token; - const { testTableName, testTableColumnName, testTableSecondColumnName } = await createTestTable(connectionToTestDB); - - const createConnectionResponse = await request(app.getHttpServer()) - .post('/connection') - .send(connectionToTestDB) - .set('Cookie', firstUserToken) - .set('Content-Type', 'application/json') - .set('Accept', 'application/json'); - const createConnectionRO = JSON.parse(createConnectionResponse.text); - t.is(createConnectionResponse.status, 201); - - const createPersonalTableSettingsDTO: CreatePersonalTableSettingsDto = { - columns_view: [testTableColumnName, testTableSecondColumnName, 'id'], - list_fields: [testTableSecondColumnName, testTableColumnName, 'id'], - list_per_page: 32, - ordering: QueryOrderingEnum.ASC, - ordering_field: testTableColumnName, - original_names: false, - }; - - const createPersonalTableSettingsResponse = await request(app.getHttpServer()) - .put(`/settings/personal/${createConnectionRO.id}`) - .query({ tableName: testTableName }) - .send(createPersonalTableSettingsDTO) - .set('Cookie', firstUserToken) - .set('Content-Type', 'application/json') - .set('Accept', 'application/json'); - - const createPersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse( - createPersonalTableSettingsResponse.text, - ); - t.is(createPersonalTableSettingsResponse.status, 200); - t.deepEqual(createPersonalTableSettingsRO.columns_view, createPersonalTableSettingsDTO.columns_view); - t.deepEqual(createPersonalTableSettingsRO.list_fields, createPersonalTableSettingsDTO.list_fields); - t.is(createPersonalTableSettingsRO.list_per_page, createPersonalTableSettingsDTO.list_per_page); - t.is(createPersonalTableSettingsRO.ordering, createPersonalTableSettingsDTO.ordering); - t.is(createPersonalTableSettingsRO.ordering_field, createPersonalTableSettingsDTO.ordering_field); - t.is(createPersonalTableSettingsRO.original_names, createPersonalTableSettingsDTO.original_names); - - const findPersonalTableSettingsResponse = await request(app.getHttpServer()) - .get(`/settings/personal/${createConnectionRO.id}`) - .query({ tableName: testTableName }) - .send(createPersonalTableSettingsDTO) - .set('Cookie', firstUserToken) - .set('Content-Type', 'application/json') - .set('Accept', 'application/json'); - - const findPersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse(findPersonalTableSettingsResponse.text); - t.is(findPersonalTableSettingsResponse.status, 200); - t.deepEqual(findPersonalTableSettingsRO.columns_view, createPersonalTableSettingsDTO.columns_view); - t.deepEqual(findPersonalTableSettingsRO.list_fields, createPersonalTableSettingsDTO.list_fields); - t.is(findPersonalTableSettingsRO.list_per_page, createPersonalTableSettingsDTO.list_per_page); - t.is(findPersonalTableSettingsRO.ordering, createPersonalTableSettingsDTO.ordering); - t.is(findPersonalTableSettingsRO.ordering_field, createPersonalTableSettingsDTO.ordering_field); - t.is(findPersonalTableSettingsRO.original_names, createPersonalTableSettingsDTO.original_names); + const connectionToTestDB = getTestData(mockFactory).connectionToPostgres; + const firstUserToken = (await registerUserAndReturnUserInfo(app)).token; + const { testTableName, testTableColumnName, testTableSecondColumnName } = await createTestTable(connectionToTestDB); + + const createConnectionResponse = await request(app.getHttpServer()) + .post('/connection') + .send(connectionToTestDB) + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + const createConnectionRO = JSON.parse(createConnectionResponse.text); + t.is(createConnectionResponse.status, 201); + + const createPersonalTableSettingsDTO: CreatePersonalTableSettingsDto = { + columns_view: [testTableColumnName, testTableSecondColumnName, 'id'], + list_fields: [testTableSecondColumnName, testTableColumnName, 'id'], + list_per_page: 32, + ordering: QueryOrderingEnum.ASC, + ordering_field: testTableColumnName, + original_names: false, + }; + + const createPersonalTableSettingsResponse = await request(app.getHttpServer()) + .put(`/settings/personal/${createConnectionRO.id}`) + .query({ tableName: testTableName }) + .send(createPersonalTableSettingsDTO) + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + + const createPersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse( + createPersonalTableSettingsResponse.text, + ); + t.is(createPersonalTableSettingsResponse.status, 200); + t.deepEqual(createPersonalTableSettingsRO.columns_view, createPersonalTableSettingsDTO.columns_view); + t.deepEqual(createPersonalTableSettingsRO.list_fields, createPersonalTableSettingsDTO.list_fields); + t.is(createPersonalTableSettingsRO.list_per_page, createPersonalTableSettingsDTO.list_per_page); + t.is(createPersonalTableSettingsRO.ordering, createPersonalTableSettingsDTO.ordering); + t.is(createPersonalTableSettingsRO.ordering_field, createPersonalTableSettingsDTO.ordering_field); + t.is(createPersonalTableSettingsRO.original_names, createPersonalTableSettingsDTO.original_names); + + const findPersonalTableSettingsResponse = await request(app.getHttpServer()) + .get(`/settings/personal/${createConnectionRO.id}`) + .query({ tableName: testTableName }) + .send(createPersonalTableSettingsDTO) + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + + const findPersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse(findPersonalTableSettingsResponse.text); + t.is(findPersonalTableSettingsResponse.status, 200); + t.deepEqual(findPersonalTableSettingsRO.columns_view, createPersonalTableSettingsDTO.columns_view); + t.deepEqual(findPersonalTableSettingsRO.list_fields, createPersonalTableSettingsDTO.list_fields); + t.is(findPersonalTableSettingsRO.list_per_page, createPersonalTableSettingsDTO.list_per_page); + t.is(findPersonalTableSettingsRO.ordering, createPersonalTableSettingsDTO.ordering); + t.is(findPersonalTableSettingsRO.ordering_field, createPersonalTableSettingsDTO.ordering_field); + t.is(findPersonalTableSettingsRO.original_names, createPersonalTableSettingsDTO.original_names); }); test.serial(`${currentTest} should return empty object when personal table settings wasn't created`, async (t) => { - const connectionToTestDB = getTestData(mockFactory).connectionToPostgres; - const firstUserToken = (await registerUserAndReturnUserInfo(app)).token; - const { testTableName, testTableColumnName, testTableSecondColumnName } = await createTestTable(connectionToTestDB); - - const createConnectionResponse = await request(app.getHttpServer()) - .post('/connection') - .send(connectionToTestDB) - .set('Cookie', firstUserToken) - .set('Content-Type', 'application/json') - .set('Accept', 'application/json'); - const createConnectionRO = JSON.parse(createConnectionResponse.text); - t.is(createConnectionResponse.status, 201); - - const createPersonalTableSettingsDTO: CreatePersonalTableSettingsDto = { - columns_view: [testTableColumnName, testTableSecondColumnName, 'id'], - list_fields: [testTableSecondColumnName, testTableColumnName, 'id'], - list_per_page: 32, - ordering: QueryOrderingEnum.ASC, - ordering_field: testTableColumnName, - original_names: false, - }; - - const findPersonalTableSettingsResponse = await request(app.getHttpServer()) - .get(`/settings/personal/${createConnectionRO.id}`) - .query({ tableName: testTableName }) - .send(createPersonalTableSettingsDTO) - .set('Cookie', firstUserToken) - .set('Content-Type', 'application/json') - .set('Accept', 'application/json'); - - const findPersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse(findPersonalTableSettingsResponse.text); - t.is(findPersonalTableSettingsResponse.status, 200); - t.deepEqual(findPersonalTableSettingsRO, {}); + const connectionToTestDB = getTestData(mockFactory).connectionToPostgres; + const firstUserToken = (await registerUserAndReturnUserInfo(app)).token; + const { testTableName, testTableColumnName, testTableSecondColumnName } = await createTestTable(connectionToTestDB); + + const createConnectionResponse = await request(app.getHttpServer()) + .post('/connection') + .send(connectionToTestDB) + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + const createConnectionRO = JSON.parse(createConnectionResponse.text); + t.is(createConnectionResponse.status, 201); + + const createPersonalTableSettingsDTO: CreatePersonalTableSettingsDto = { + columns_view: [testTableColumnName, testTableSecondColumnName, 'id'], + list_fields: [testTableSecondColumnName, testTableColumnName, 'id'], + list_per_page: 32, + ordering: QueryOrderingEnum.ASC, + ordering_field: testTableColumnName, + original_names: false, + }; + + const findPersonalTableSettingsResponse = await request(app.getHttpServer()) + .get(`/settings/personal/${createConnectionRO.id}`) + .query({ tableName: testTableName }) + .send(createPersonalTableSettingsDTO) + .set('Cookie', firstUserToken) + .set('Content-Type', 'application/json') + .set('Accept', 'application/json'); + + const findPersonalTableSettingsRO: FoundPersonalTableSettingsDto = JSON.parse(findPersonalTableSettingsResponse.text); + t.is(findPersonalTableSettingsResponse.status, 200); + t.deepEqual(findPersonalTableSettingsRO, {}); });