From 974d71d925e0560511e0ad7987b2b1ebbec0d7ee Mon Sep 17 00:00:00 2001 From: Federico Nocetti Date: Fri, 13 Oct 2023 12:16:47 -0300 Subject: [PATCH 01/14] 6195 improve transaction abort (#6196) * Use session.inTransaction to check before aborting * Transaction manager debug-logs transaction retriable errors * refactor StandardLogger into several classes * Logger injects writers * Instantiate TransactionManager using factory * Add logger to transaction manager tests --------- Co-authored-by: LaszloKecskes --- .../specs/MongoPermissionsDataSource.spec.ts | 8 +- .../specs/AuthorizationService.spec.ts | 33 +++---- .../database/MongoTransactionManager.ts | 10 +- .../database/data_source_defaults.ts | 4 +- .../database/specs/MongoDataSource.spec.ts | 14 +-- .../specs/MongoDataSourceSync.spec.ts | 8 +- .../specs/MongoTransactionManager.spec.ts | 32 ++++--- .../specs/MongoEntitiesDataSource.spec.ts | 18 ++-- .../EntityRelationshipsUpdateService.spec.ts | 6 +- app/api/entities/v2_support.ts | 9 +- .../specs/MongoFilesDataSource.spec.ts | 6 +- app/api/files/v2_support.ts | 5 +- .../specs/CreateTranslationsService.spec.ts | 5 +- .../specs/DeleteTranslationsService.spec.ts | 5 +- .../specs/GetTranslationsService.spec.ts | 5 +- .../specs/UpsertTranslationsService.spec.ts | 5 +- app/api/i18n/v2_support.ts | 23 ++--- app/api/log.v2/contracts/Logger.ts | 10 +- app/api/log.v2/infrastructure/LogEntry.ts | 23 +++++ app/api/log.v2/infrastructure/LogLevels.ts | 18 ++++ app/api/log.v2/infrastructure/LogWriter.ts | 5 + .../log.v2/infrastructure/StandardLogger.ts | 94 +++++-------------- .../infrastructure/specs/Logger.spec.ts | 31 +++--- .../writers/StandardJSONWriter.ts | 13 +++ .../infrastructure/writers/StandardWriter.ts | 8 ++ app/api/queue.v2/configuration/factories.ts | 8 +- .../MongoRelationshipsDataSource.spec.ts | 8 +- app/api/relationships.v2/routes/routes.ts | 7 +- .../services/service_factories.ts | 3 +- .../specs/CreateRelationshipService.spec.ts | 6 +- .../specs/DeleteRelationshipService.spec.ts | 10 +- .../specs/DenormalizationService.spec.ts | 6 +- .../specs/GetRelationshipService.spec.ts | 6 +- app/api/relationtypes/v2_support.ts | 7 +- app/api/search/entitiesIndex.js | 12 +-- app/api/search/v2_support.ts | 6 +- app/api/sync/specs/syncWorker.spec.ts | 5 +- .../specs/MongoTemplatesDataSource.spec.ts | 26 ++--- .../specs/CreateTemplateService.spec.ts | 8 +- app/api/templates/v2_support.ts | 12 +-- database/elastic_mapping/elasticMapFactory.ts | 7 +- 41 files changed, 261 insertions(+), 274 deletions(-) create mode 100644 app/api/log.v2/infrastructure/LogEntry.ts create mode 100644 app/api/log.v2/infrastructure/LogLevels.ts create mode 100644 app/api/log.v2/infrastructure/LogWriter.ts create mode 100644 app/api/log.v2/infrastructure/writers/StandardJSONWriter.ts create mode 100644 app/api/log.v2/infrastructure/writers/StandardWriter.ts diff --git a/app/api/authorization.v2/database/specs/MongoPermissionsDataSource.spec.ts b/app/api/authorization.v2/database/specs/MongoPermissionsDataSource.spec.ts index f345050f52..1a0b1e10e3 100644 --- a/app/api/authorization.v2/database/specs/MongoPermissionsDataSource.spec.ts +++ b/app/api/authorization.v2/database/specs/MongoPermissionsDataSource.spec.ts @@ -1,12 +1,11 @@ import { Db } from 'mongodb'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { MongoResultSet } from 'api/common.v2/database/MongoResultSet'; import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB, { DBFixture } from 'api/utils/testing_db'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { MongoPermissionsDataSource } from '../MongoPermissionsDataSource'; const factory = getFixturesFactory(); @@ -82,10 +81,7 @@ describe('MongoPermissionsDataSource', () => { ])( 'should return the permissions for entities with the given sharedIds', async ({ sharedIds, expected }) => { - const dataSource = new MongoPermissionsDataSource( - db!, - new MongoTransactionManager(getClient()) - ); + const dataSource = new MongoPermissionsDataSource(db!, DefaultTransactionManager()); const resultSet = dataSource.getByEntities(sharedIds); expect(resultSet).toBeInstanceOf(MongoResultSet); const result = await resultSet.all(); diff --git a/app/api/authorization.v2/services/specs/AuthorizationService.spec.ts b/app/api/authorization.v2/services/specs/AuthorizationService.spec.ts index 4fbe646419..7607d046f5 100644 --- a/app/api/authorization.v2/services/specs/AuthorizationService.spec.ts +++ b/app/api/authorization.v2/services/specs/AuthorizationService.spec.ts @@ -1,13 +1,13 @@ import { MongoPermissionsDataSource } from 'api/authorization.v2/database/MongoPermissionsDataSource'; import { UnauthorizedError } from 'api/authorization.v2/errors/UnauthorizedError'; -import { getClient, getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { Relationship } from 'api/relationships.v2/model/Relationship'; import { MongoRelationshipsDataSource } from 'api/relationships.v2/database/MongoRelationshipsDataSource'; import { User, UserRole } from 'api/users.v2/model/User'; import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import { DBFixture } from 'api/utils/testing_db'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { AccessLevels, AuthorizationService } from '../AuthorizationService'; const factory = getFixturesFactory(); @@ -58,7 +58,7 @@ describe("When there's no authenticated user", () => { describe('and the entity is not public', () => { it('should return false', async () => { const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), undefined ); expect(await auth.isAuthorized('read', ['entity1'])).toBe(false); @@ -67,7 +67,7 @@ describe("When there's no authenticated user", () => { it('should throw an error on validation', async () => { const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), undefined ); await expect(async () => auth.validateAccess('read', ['entity1'])).rejects.toThrow( @@ -82,7 +82,7 @@ describe("When there's no authenticated user", () => { describe('and the entity is public', () => { it('should only allow to read', async () => { const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), undefined ); expect(await auth.isAuthorized('read', ['entity3'])).toBe(true); @@ -93,7 +93,7 @@ describe("When there's no authenticated user", () => { describe('and not all the entities are public', () => { it('should not allow to read nor write', async () => { const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), undefined ); expect(await auth.isAuthorized('read', ['entity3', 'entity1'])).toBe(false); @@ -103,7 +103,7 @@ describe("When there's no authenticated user", () => { it('should allow empty read', async () => { const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), undefined ); expect(await auth.isAuthorized('read', [])).toBe(true); @@ -116,7 +116,7 @@ describe("When there's an authenticated user", () => { it('should return true', async () => { const adminUser = new User(factory.id('admin').toHexString(), role, []); const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), adminUser ); expect(await auth.isAuthorized('read', ['entity1'])).toBe(true); @@ -128,7 +128,7 @@ describe("When there's an authenticated user", () => { it('should not throw an error', async () => { const adminUser = new User(factory.id('admin').toHexString(), role, []); const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), adminUser ); @@ -161,7 +161,7 @@ describe("When there's an authenticated user", () => { 'should return [$result] if [$user] wants to [$level] from/to $entities', async ({ user, entities, level, result }) => { const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), new User(factory.id(user).toHexString(), 'collaborator', []) ); @@ -175,7 +175,7 @@ describe("When there's an authenticated user", () => { { entities: ['entity3'], level: 'write', result: true }, ])('should consider the user groups', async ({ entities, level, result }) => { const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), new User(factory.id('grouped user').toHexString(), 'collaborator', [ factory.id('group1').toHexString(), factory.id('group2').toHexString(), @@ -246,7 +246,7 @@ describe('filterEntities()', () => { 'should filter entities for a/an $usertype to $level', async ({ user, level, expectedResult }) => { const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), user ); @@ -261,10 +261,7 @@ describe('filterRelationships()', () => { let allRelationships: Relationship[]; beforeAll(async () => { - const ds = new MongoRelationshipsDataSource( - getConnection(), - new MongoTransactionManager(getClient()) - ); + const ds = new MongoRelationshipsDataSource(getConnection(), DefaultTransactionManager()); allRelationships = await ds.getAll().all(); }); @@ -300,7 +297,7 @@ describe('filterRelationships()', () => { }, ])('should filter for $case', async ({ user, level, expectedIds }) => { const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), user ); @@ -321,7 +318,7 @@ describe('filterRelationships()', () => { ])('$role should be able to $level everything', async ({ role: username, level }) => { const user = new User(factory.idString(username), username, []); const auth = new AuthorizationService( - new MongoPermissionsDataSource(getConnection(), new MongoTransactionManager(getClient())), + new MongoPermissionsDataSource(getConnection(), DefaultTransactionManager()), user ); diff --git a/app/api/common.v2/database/MongoTransactionManager.ts b/app/api/common.v2/database/MongoTransactionManager.ts index 62f3d54131..c92923538f 100644 --- a/app/api/common.v2/database/MongoTransactionManager.ts +++ b/app/api/common.v2/database/MongoTransactionManager.ts @@ -1,18 +1,22 @@ import { MongoClient, ClientSession } from 'mongodb'; +import { Logger } from 'api/log.v2/contracts/Logger'; import { TransactionManager } from '../contracts/TransactionManager'; export class MongoTransactionManager implements TransactionManager { private mongoClient: MongoClient; + private logger: Logger; + private session?: ClientSession; private onCommitHandlers: ((returnValue: any) => Promise)[]; private finished = false; - constructor(mongoClient: MongoClient) { + constructor(mongoClient: MongoClient, logger: Logger) { this.onCommitHandlers = []; this.mongoClient = mongoClient; + this.logger = logger; } async executeOnCommitHandlers(returnValue: unknown) { @@ -35,6 +39,7 @@ export class MongoTransactionManager implements TransactionManager { this.finished = true; } catch (error) { if (error.hasErrorLabel && error.hasErrorLabel('UnknownTransactionCommitResult')) { + this.logger.debug(error); await this.commitWithRetry(); } else { throw error; @@ -57,7 +62,7 @@ export class MongoTransactionManager implements TransactionManager { await this.commitWithRetry(); return returnValue; } catch (error) { - if (error.code !== 251) { + if (this.session?.inTransaction()) { await this.abortTransaction(); } @@ -70,6 +75,7 @@ export class MongoTransactionManager implements TransactionManager { return await this.runInTransaction(callback); } catch (error) { if (retries > 0 && error.hasErrorLabel && error.hasErrorLabel('TransientTransactionError')) { + this.logger.debug(error); return this.runWithRetry(callback, retries - 1); } diff --git a/app/api/common.v2/database/data_source_defaults.ts b/app/api/common.v2/database/data_source_defaults.ts index 8268b03075..4295e3ca1c 100644 --- a/app/api/common.v2/database/data_source_defaults.ts +++ b/app/api/common.v2/database/data_source_defaults.ts @@ -1,3 +1,4 @@ +import { DefaultLogger } from 'api/log.v2/infrastructure/StandardLogger'; import { IdGenerator } from '../contracts/IdGenerator'; import { getClient } from './getConnectionForCurrentTenant'; import { MongoIdHandler } from './MongoIdGenerator'; @@ -5,7 +6,8 @@ import { MongoTransactionManager } from './MongoTransactionManager'; const DefaultTransactionManager = () => { const client = getClient(); - return new MongoTransactionManager(client); + const logger = DefaultLogger(); + return new MongoTransactionManager(client, logger); }; const DefaultIdGenerator: IdGenerator = MongoIdHandler; diff --git a/app/api/common.v2/database/specs/MongoDataSource.spec.ts b/app/api/common.v2/database/specs/MongoDataSource.spec.ts index fdb76a5ec2..6c39148244 100644 --- a/app/api/common.v2/database/specs/MongoDataSource.spec.ts +++ b/app/api/common.v2/database/specs/MongoDataSource.spec.ts @@ -3,8 +3,8 @@ import testingDB from 'api/utils/testing_db'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import { ObjectId } from 'mongodb'; import { MongoDataSource } from '../MongoDataSource'; -import { MongoTransactionManager } from '../MongoTransactionManager'; -import { getClient, getConnection } from '../getConnectionForCurrentTenant'; +import { getConnection } from '../getConnectionForCurrentTenant'; +import { DefaultTransactionManager } from '../data_source_defaults'; const blankState = [ { @@ -133,7 +133,7 @@ describe('session scoped collection', () => { it.each(casesForUpdates)( '$method should write changes transactionally', async ({ callback, expectedOnAbort, expectedOnSuccess }) => { - const transactionManager1 = new MongoTransactionManager(getClient()); + const transactionManager1 = DefaultTransactionManager(); const dataSource1 = new DataSource(getConnection(), transactionManager1); try { @@ -150,7 +150,7 @@ describe('session scoped collection', () => { ); } - const transactionManager2 = new MongoTransactionManager(getClient()); + const transactionManager2 = DefaultTransactionManager(); const dataSource2 = new DataSource(getConnection(), transactionManager2); await transactionManager2.run(async () => { @@ -203,7 +203,7 @@ describe('session scoped collection', () => { it.each(casesForReads)( '$method should read data from the transaction', async ({ callback, expectedInTransaction }) => { - const transactionManager1 = new MongoTransactionManager(getClient()); + const transactionManager1 = DefaultTransactionManager(); const dataSource1 = new DataSource(getConnection(), transactionManager1); let result; @@ -238,7 +238,7 @@ describe('session scoped collection', () => { it.each(otherCases)( '$method should return the information according to the transaction state', async ({ callback, expectedInTransaction, expectedNoTransaction }) => { - const transactionManager1 = new MongoTransactionManager(getClient()); + const transactionManager1 = DefaultTransactionManager(); const dataSource1 = new DataSource(getConnection(), transactionManager1); let result; @@ -254,7 +254,7 @@ describe('session scoped collection', () => { expect(result).toEqual(expectedInTransaction); } - const transactionManager2 = new MongoTransactionManager(getClient()); + const transactionManager2 = DefaultTransactionManager(); const dataSource2 = new DataSource(getConnection(), transactionManager2); expect(await callback(dataSource2)).toEqual(expectedNoTransaction); diff --git a/app/api/common.v2/database/specs/MongoDataSourceSync.spec.ts b/app/api/common.v2/database/specs/MongoDataSourceSync.spec.ts index e60962a869..3b75ef45b1 100644 --- a/app/api/common.v2/database/specs/MongoDataSourceSync.spec.ts +++ b/app/api/common.v2/database/specs/MongoDataSourceSync.spec.ts @@ -3,9 +3,9 @@ import { getIdMapper } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB from 'api/utils/testing_db'; import { ObjectId } from 'mongodb'; -import { getClient, getConnection } from '../getConnectionForCurrentTenant'; +import { getConnection } from '../getConnectionForCurrentTenant'; import { MongoDataSource } from '../MongoDataSource'; -import { MongoTransactionManager } from '../MongoTransactionManager'; +import { DefaultTransactionManager } from '../data_source_defaults'; const id = getIdMapper(); @@ -642,7 +642,7 @@ describe('collection with automatic log to updatelogs', () => { expectedResult, expectedDBStateOnTransactionError = updateLogsBlankState, }) => { - const transactionManager1 = new MongoTransactionManager(getClient()); + const transactionManager1 = DefaultTransactionManager(); const dataSource1 = new DataSource(getConnection(), transactionManager1); try { @@ -659,7 +659,7 @@ describe('collection with automatic log to updatelogs', () => { ); } - const transactionManager2 = new MongoTransactionManager(getClient()); + const transactionManager2 = DefaultTransactionManager(); const dataSource2 = new DataSource(getConnection(), transactionManager2); const result = await transactionManager2.run(async () => callback(dataSource2)); diff --git a/app/api/common.v2/database/specs/MongoTransactionManager.spec.ts b/app/api/common.v2/database/specs/MongoTransactionManager.spec.ts index 28751e8abc..d2be93b0dc 100644 --- a/app/api/common.v2/database/specs/MongoTransactionManager.spec.ts +++ b/app/api/common.v2/database/specs/MongoTransactionManager.spec.ts @@ -2,8 +2,9 @@ import { getIdMapper } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB from 'api/utils/testing_db'; -import { MongoError } from 'mongodb'; -import { getClient } from '../getConnectionForCurrentTenant'; +import { MongoClient, MongoError } from 'mongodb'; +import { StandardLogger } from 'api/log.v2/infrastructure/StandardLogger'; +import { getClient, getTenant } from '../getConnectionForCurrentTenant'; import { MongoTransactionManager } from '../MongoTransactionManager'; const ids = getIdMapper(); @@ -61,9 +62,12 @@ class Transactional3 extends TestBase { } } +const createTransactionManager = (client?: MongoClient) => + new MongoTransactionManager(client ?? getClient(), new StandardLogger(() => {}, getTenant())); + describe('When every operation goes well', () => { it('should be reflected in all of the collections affected', async () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = createTransactionManager(); const source1 = new Transactional1(transactionManager); const source2 = new Transactional2(transactionManager); const source3 = new Transactional3(transactionManager); @@ -88,7 +92,7 @@ describe('When every operation goes well', () => { describe('When one operation fails', () => { // eslint-disable-next-line max-statements it('should not write any changes to the database and re-throw the error', async () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = createTransactionManager(); const error = new Error('Simulated error'); const source1 = new Transactional1(transactionManager); const source2 = new Transactional2(transactionManager); @@ -133,7 +137,7 @@ describe('When one operation fails', () => { await testingDB.mongodb?.collection('collection1').createIndex({ name: 1 }, { unique: true }); - const tm = new MongoTransactionManager(getClient()); + const tm = createTransactionManager(); const transactional = new Transactional4(tm); try { @@ -183,7 +187,7 @@ describe('when calling run() when a transaction is running', () => { it.each<(typeof cases)[number]>(cases)( 'should throw "transaction in progress"', async ({ cb }) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = createTransactionManager(); try { await cb(transactionManager); @@ -196,7 +200,7 @@ describe('when calling run() when a transaction is running', () => { describe('when calling run() after the transaction was commited', () => { it('should throw "transaction finished"', async () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = createTransactionManager(); try { await transactionManager.run(async () => Promise.resolve()); @@ -209,7 +213,7 @@ describe('when calling run() after the transaction was commited', () => { describe('when registering onCommitted event handlers within the run() callback', () => { it('should trigger the handlers after committing', async () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = createTransactionManager(); const checkpoints = [1]; @@ -235,7 +239,7 @@ describe('when registering onCommitted event handlers within the run() callback' }); it('should not trigger the handlers if aborted', async () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = createTransactionManager(); const checkpoints = [1]; @@ -265,7 +269,7 @@ describe('when registering onCommitted event handlers within the run() callback' }); it('should manually trigger the onCommit handlers', async () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = createTransactionManager(); const checkpoints = [1]; @@ -285,7 +289,7 @@ describe('when registering onCommitted event handlers within the run() callback' describe('when registering onCommitted event handlers with the runHandlingOnCommited() call', () => { it('should trigger the handlers with the result after committing', async () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = createTransactionManager(); const checkpoints = [1]; let transactionResult: string = ''; @@ -312,7 +316,7 @@ describe('when registering onCommitted event handlers with the runHandlingOnComm // https://www.mongodb.com/docs/manual/core/transactions-in-applications/#std-label-transient-transaction-error describe('when the some operation throws a TransientTransactionError', () => { it('should retry the whole transaction', async () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = createTransactionManager(); let throwed = false; const checkpoints: number[] = []; @@ -334,7 +338,7 @@ describe('when the some operation throws a TransientTransactionError', () => { }); it('should retry the transaction a finite amount of times', async () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = createTransactionManager(); const errors: Error[] = []; try { await transactionManager.run(async () => { @@ -370,7 +374,7 @@ describe('when the commit operation throws a UnknownTransactionCommitResult', () endSession: () => {}, }), }; - const transactionManager = new MongoTransactionManager(clientMock as any); + const transactionManager = createTransactionManager(clientMock as any); const checkpoints: number[] = []; await transactionManager diff --git a/app/api/entities.v2/database/specs/MongoEntitiesDataSource.spec.ts b/app/api/entities.v2/database/specs/MongoEntitiesDataSource.spec.ts index af910530bc..6b16d872d3 100644 --- a/app/api/entities.v2/database/specs/MongoEntitiesDataSource.spec.ts +++ b/app/api/entities.v2/database/specs/MongoEntitiesDataSource.spec.ts @@ -1,5 +1,4 @@ -import { getClient, getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { partialImplementation } from 'api/common.v2/testing/partialImplementation'; import { MongoSettingsDataSource } from 'api/settings.v2/database/MongoSettingsDataSource'; import { MongoTemplatesDataSource } from 'api/templates.v2/database/MongoTemplatesDataSource'; @@ -8,6 +7,7 @@ import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB from 'api/utils/testing_db'; import { MetadataSchema } from 'shared/types/commonTypes'; import { EntitySchema } from 'shared/types/entityType'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { MongoEntitiesDataSource } from '../MongoEntitiesDataSource'; const factory = getFixturesFactory(); @@ -154,7 +154,7 @@ describe('Relationship fields caching strategy', () => { it('should invalidate the cache for the provided entity-property pairs in all languages', async () => { const settingsDsMock = partialImplementation({}); const db = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const ds = new MongoEntitiesDataSource( db, new MongoTemplatesDataSource(db, transactionManager), @@ -197,7 +197,7 @@ describe('Relationship fields caching strategy', () => { it('should invalidate the cache for the provided properties in the provided template, in all languages', async () => { const settingsDsMock = partialImplementation({}); const db = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const ds = new MongoEntitiesDataSource( db, new MongoTemplatesDataSource(db, transactionManager), @@ -269,7 +269,7 @@ describe('Relationship fields caching strategy', () => { beforeEach(async () => { const settingsDsMock = partialImplementation({}); const db = getConnection(); - const tm = new MongoTransactionManager(getClient()); + const tm = DefaultTransactionManager(); const ds = new MongoEntitiesDataSource( db, new MongoTemplatesDataSource(db, tm), @@ -377,7 +377,7 @@ describe('When checking for the existence of entities', () => { 'should return $expected checking for sharedIds in $ids', async ({ ids, expected }) => { const db = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const ds = new MongoEntitiesDataSource( db, new MongoTemplatesDataSource(db, transactionManager), @@ -396,7 +396,7 @@ describe('When checking for the existence of entities', () => { it('should return the sharedIds of the entities that have a particular id within their denormalized values in a metatata prop', async () => { const db = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const ds = new MongoEntitiesDataSource( db, new MongoTemplatesDataSource(db, transactionManager), @@ -417,7 +417,7 @@ it('should return the sharedIds of the entities that have a particular id within it('should update the denormalizations value in all related entities', async () => { const db = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const ds = new MongoEntitiesDataSource( db, new MongoTemplatesDataSource(db, transactionManager), @@ -495,7 +495,7 @@ it('should update the denormalizations value in all related entities', async () it('should return records containing the obsoleteMetadata', async () => { const db = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const ds = new MongoEntitiesDataSource( db, new MongoTemplatesDataSource(db, transactionManager), diff --git a/app/api/entities.v2/services/specs/EntityRelationshipsUpdateService.spec.ts b/app/api/entities.v2/services/specs/EntityRelationshipsUpdateService.spec.ts index f76b267dc4..89d2ad3513 100644 --- a/app/api/entities.v2/services/specs/EntityRelationshipsUpdateService.spec.ts +++ b/app/api/entities.v2/services/specs/EntityRelationshipsUpdateService.spec.ts @@ -1,12 +1,12 @@ import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; -import { getClient, getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { MongoEntitiesDataSource } from 'api/entities.v2/database/MongoEntitiesDataSource'; import { MongoSettingsDataSource } from 'api/settings.v2/database/MongoSettingsDataSource'; import { MongoTemplatesDataSource } from 'api/templates.v2/database/MongoTemplatesDataSource'; import { MongoRelationshipsDataSource } from 'api/relationships.v2/database/MongoRelationshipsDataSource'; import testingDB from 'api/utils/testing_db'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { EntityRelationshipsUpdateService } from '../EntityRelationshipsUpdateService'; const factory = getFixturesFactory(); @@ -136,7 +136,7 @@ afterAll(async () => { }); function buildService() { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const settingsDataSource = new MongoSettingsDataSource(getConnection(), transactionManager); const templateDataSource = new MongoTemplatesDataSource(getConnection(), transactionManager); const entityDataSource = new MongoEntitiesDataSource( diff --git a/app/api/entities/v2_support.ts b/app/api/entities/v2_support.ts index 87059867f5..5c74c71bdf 100644 --- a/app/api/entities/v2_support.ts +++ b/app/api/entities/v2_support.ts @@ -1,14 +1,13 @@ import { DenormalizationService } from 'api/relationships.v2/services/service_factories'; import { DefaultSettingsDataSource } from 'api/settings.v2/database/data_source_defaults'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { EntitySchema } from 'shared/types/entityType'; import { propertyTypes } from 'shared/propertyTypes'; import { TemplateSchema } from 'shared/types/templateType'; import { DefaultRelationshipDataSource } from 'api/relationships.v2/database/data_source_defaults'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; const deleteRelatedNewRelationships = async (sharedId: string) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); if (await DefaultSettingsDataSource(transactionManager).readNewRelationshipsAllowed()) { const datasource = DefaultRelationshipDataSource(transactionManager); await datasource.deleteByEntities([sharedId]); @@ -22,7 +21,7 @@ const denormalizeAfterEntityCreation = async ({ sharedId: string; language: string; }) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); if (await DefaultSettingsDataSource(transactionManager).readNewRelationshipsAllowed()) { const denormalizationService = await DenormalizationService(transactionManager); await denormalizationService.denormalizeAfterCreatingEntities([sharedId], language); @@ -37,7 +36,7 @@ const denormalizeAfterEntityUpdate = async ({ sharedId: string; language: string; }) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); if (await DefaultSettingsDataSource(transactionManager).readNewRelationshipsAllowed()) { const denormalizationService = await DenormalizationService(transactionManager); await denormalizationService.denormalizeAfterUpdatingEntities([sharedId], language); diff --git a/app/api/files.v2/database/specs/MongoFilesDataSource.spec.ts b/app/api/files.v2/database/specs/MongoFilesDataSource.spec.ts index 15bdb5fb67..3704efae91 100644 --- a/app/api/files.v2/database/specs/MongoFilesDataSource.spec.ts +++ b/app/api/files.v2/database/specs/MongoFilesDataSource.spec.ts @@ -1,7 +1,7 @@ -import { getConnection, getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { MongoFilesDataSource } from '../MongoFilesDataSource'; const factory = getFixturesFactory(); @@ -24,7 +24,7 @@ afterAll(async () => { describe('MongoFilesDataSource', () => { it('should return true if the file exists and belongs to the entity', async () => { - const ds = new MongoFilesDataSource(getConnection(), new MongoTransactionManager(getClient())); + const ds = new MongoFilesDataSource(getConnection(), DefaultTransactionManager()); expect( await ds.filesExistForEntities([ diff --git a/app/api/files/v2_support.ts b/app/api/files/v2_support.ts index 4a82e183e9..d22d0ee43a 100644 --- a/app/api/files/v2_support.ts +++ b/app/api/files/v2_support.ts @@ -1,12 +1,11 @@ -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { DefaultRelationshipDataSource } from 'api/relationships.v2/database/data_source_defaults'; import { DenormalizationService } from 'api/relationships.v2/services/service_factories'; import { DefaultSettingsDataSource } from 'api/settings.v2/database/data_source_defaults'; export const V2 = { async deleteTextReferencesToFiles(_ids: string[]) { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); if (!(await DefaultSettingsDataSource(transactionManager).readNewRelationshipsAllowed())) { return; diff --git a/app/api/i18n.v2/services/specs/CreateTranslationsService.spec.ts b/app/api/i18n.v2/services/specs/CreateTranslationsService.spec.ts index 9316f7fc0f..edebd43300 100644 --- a/app/api/i18n.v2/services/specs/CreateTranslationsService.spec.ts +++ b/app/api/i18n.v2/services/specs/CreateTranslationsService.spec.ts @@ -1,5 +1,3 @@ -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; import { DefaultTranslationsDataSource } from 'api/i18n.v2/database/data_source_defaults'; import { LanguageDoesNotExist, @@ -10,6 +8,7 @@ import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB, { DBFixture } from 'api/utils/testing_db'; import { ObjectId } from 'mongodb'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { CreateTranslationsService } from '../CreateTranslationsService'; import { ValidateTranslationsService } from '../ValidateTranslationsService'; @@ -17,7 +16,7 @@ const collectionInDb = (collection = 'translationsV2') => testingDB.mongodb?.collection(collection)!; const createService = () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); return new CreateTranslationsService( DefaultTranslationsDataSource(transactionManager), new ValidateTranslationsService( diff --git a/app/api/i18n.v2/services/specs/DeleteTranslationsService.spec.ts b/app/api/i18n.v2/services/specs/DeleteTranslationsService.spec.ts index 8bc84dbbd9..ed1d60aa4a 100644 --- a/app/api/i18n.v2/services/specs/DeleteTranslationsService.spec.ts +++ b/app/api/i18n.v2/services/specs/DeleteTranslationsService.spec.ts @@ -1,16 +1,15 @@ -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; import { DefaultTranslationsDataSource } from 'api/i18n.v2/database/data_source_defaults'; import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB, { DBFixture } from 'api/utils/testing_db'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { DeleteTranslationsService } from '../DeleteTranslationsService'; const collectionInDb = (collection = 'translationsV2') => testingDB.mongodb?.collection(collection)!; const createService = () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); return new DeleteTranslationsService( DefaultTranslationsDataSource(transactionManager), transactionManager diff --git a/app/api/i18n.v2/services/specs/GetTranslationsService.spec.ts b/app/api/i18n.v2/services/specs/GetTranslationsService.spec.ts index 5fb3e28216..610c980129 100644 --- a/app/api/i18n.v2/services/specs/GetTranslationsService.spec.ts +++ b/app/api/i18n.v2/services/specs/GetTranslationsService.spec.ts @@ -1,13 +1,12 @@ -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; import { DefaultTranslationsDataSource } from 'api/i18n.v2/database/data_source_defaults'; import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import { DBFixture } from 'api/utils/testing_db'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { GetTranslationsService } from '../GetTranslationsService'; const createService = () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); return new GetTranslationsService(DefaultTranslationsDataSource(transactionManager)); }; diff --git a/app/api/i18n.v2/services/specs/UpsertTranslationsService.spec.ts b/app/api/i18n.v2/services/specs/UpsertTranslationsService.spec.ts index 2647552be5..8dbeb6f627 100644 --- a/app/api/i18n.v2/services/specs/UpsertTranslationsService.spec.ts +++ b/app/api/i18n.v2/services/specs/UpsertTranslationsService.spec.ts @@ -1,11 +1,10 @@ -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; import { DefaultTranslationsDataSource } from 'api/i18n.v2/database/data_source_defaults'; import { LanguageDoesNotExist } from 'api/i18n.v2/errors/translationErrors'; import { DefaultSettingsDataSource } from 'api/settings.v2/database/data_source_defaults'; import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB, { DBFixture } from 'api/utils/testing_db'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { CreateTranslationsData } from '../CreateTranslationsService'; import { UpsertTranslationsService } from '../UpsertTranslationsService'; import { ValidateTranslationsService } from '../ValidateTranslationsService'; @@ -14,7 +13,7 @@ const collectionInDb = (collection = 'translationsV2') => testingDB.mongodb?.collection(collection)!; const createService = () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); return new UpsertTranslationsService( DefaultTranslationsDataSource(transactionManager), DefaultSettingsDataSource(transactionManager), diff --git a/app/api/i18n/v2_support.ts b/app/api/i18n/v2_support.ts index b91314b61c..a2c4161d2b 100644 --- a/app/api/i18n/v2_support.ts +++ b/app/api/i18n/v2_support.ts @@ -1,7 +1,6 @@ import { ResultSet } from 'api/common.v2/contracts/ResultSet'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; -import { getClient, getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { MongoTranslationsSyncDataSource } from 'api/i18n.v2/database/MongoTranslationsSyncDataSource'; import { DefaultTranslationsDataSource } from 'api/i18n.v2/database/data_source_defaults'; import { Translation } from 'api/i18n.v2/model/Translation'; @@ -45,7 +44,7 @@ export const resultsToV1TranslationType = async ( tranlationsResult: ResultSet, onlyLanguage?: LanguageISO6391 ) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const settings = DefaultSettingsDataSource(transactionManager); let languageKeys = await settings.getLanguageKeys(); if (onlyLanguage) { @@ -100,7 +99,7 @@ export const resultsToV1TranslationType = async ( }; export const createTranslationsV2 = async (translation: TranslationType) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); await new CreateTranslationsService( DefaultTranslationsDataSource(transactionManager), new ValidateTranslationsService( @@ -112,7 +111,7 @@ export const createTranslationsV2 = async (translation: TranslationType) => { }; export const upsertTranslationsV2 = async (translations: TranslationType[]) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); await new UpsertTranslationsService( DefaultTranslationsDataSource(transactionManager), DefaultSettingsDataSource(transactionManager), @@ -130,7 +129,7 @@ export const upsertTranslationsV2 = async (translations: TranslationType[]) => { }; export const deleteTranslationsByContextIdV2 = async (contextId: string) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); await new DeleteTranslationsService( DefaultTranslationsDataSource(transactionManager), transactionManager @@ -138,7 +137,7 @@ export const deleteTranslationsByContextIdV2 = async (contextId: string) => { }; export const deleteTranslationsByLanguageV2 = async (language: LanguageISO6391) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); return new DeleteTranslationsService( DefaultTranslationsDataSource(transactionManager), transactionManager @@ -148,23 +147,21 @@ export const deleteTranslationsByLanguageV2 = async (language: LanguageISO6391) export const getTranslationsV2ByContext = async (context: string) => resultsToV1TranslationType( new GetTranslationsService( - DefaultTranslationsDataSource(new MongoTransactionManager(getClient())) + DefaultTranslationsDataSource(DefaultTransactionManager()) ).getByContext(context) ); export const getTranslationsV2ByLanguage = async (language: LanguageISO6391) => resultsToV1TranslationType( new GetTranslationsService( - DefaultTranslationsDataSource(new MongoTransactionManager(getClient())) + DefaultTranslationsDataSource(DefaultTransactionManager()) ).getByLanguage(language), language ); export const getTranslationsV2 = async () => resultsToV1TranslationType( - new GetTranslationsService( - DefaultTranslationsDataSource(new MongoTransactionManager(getClient())) - ).getAll() + new GetTranslationsService(DefaultTranslationsDataSource(DefaultTransactionManager())).getAll() ); export const updateContextV2 = async ( @@ -173,7 +170,7 @@ export const updateContextV2 = async ( keysToDelete: string[], valueChanges: IndexedContextValues ) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); await new UpsertTranslationsService( DefaultTranslationsDataSource(transactionManager), DefaultSettingsDataSource(transactionManager), diff --git a/app/api/log.v2/contracts/Logger.ts b/app/api/log.v2/contracts/Logger.ts index c4d57c53cf..86c5a56c7e 100644 --- a/app/api/log.v2/contracts/Logger.ts +++ b/app/api/log.v2/contracts/Logger.ts @@ -1,7 +1,7 @@ export interface Logger { - debug(message: string | string[], asJSON?: boolean): void; - info(message: string | string[], asJSON?: boolean): void; - warning(message: string | string[], asJSON?: boolean): void; - error(message: string | string[], asJSON?: boolean): void; - critical(message: string | string[], asJSON?: boolean): void; + debug(message: string | string[]): void; + info(message: string | string[]): void; + warning(message: string | string[]): void; + error(message: string | string[]): void; + critical(message: string | string[]): void; } diff --git a/app/api/log.v2/infrastructure/LogEntry.ts b/app/api/log.v2/infrastructure/LogEntry.ts new file mode 100644 index 0000000000..1cca1c8076 --- /dev/null +++ b/app/api/log.v2/infrastructure/LogEntry.ts @@ -0,0 +1,23 @@ +import { Tenant } from 'api/tenants/tenantContext'; +import { LogLevel } from './LogLevels'; + +export class LogEntry { + message: string; + + timestamp: number; + + level: LogLevel; + + tenant: Tenant; + + constructor(message: string, timestamp: number, level: LogLevel, tenant: Tenant) { + this.message = message; + this.timestamp = timestamp; + this.level = level; + this.tenant = tenant; + } + + timeToString(): string { + return new Date(this.timestamp).toISOString(); + } +} diff --git a/app/api/log.v2/infrastructure/LogLevels.ts b/app/api/log.v2/infrastructure/LogLevels.ts new file mode 100644 index 0000000000..d58b73a9ce --- /dev/null +++ b/app/api/log.v2/infrastructure/LogLevels.ts @@ -0,0 +1,18 @@ +export class LogLevel { + name: string; + + severity: number; + + constructor(name: string, severity: number) { + this.name = name; + this.severity = severity; + } +} + +export const LogLevels: Record = { + DEBUG: new LogLevel('DEBUG', 10), + INFO: new LogLevel('INFO', 20), + WARNING: new LogLevel('WARNING', 30), + ERROR: new LogLevel('ERROR', 40), + CRITICAL: new LogLevel('CRITICAL', 50), +}; diff --git a/app/api/log.v2/infrastructure/LogWriter.ts b/app/api/log.v2/infrastructure/LogWriter.ts new file mode 100644 index 0000000000..6dbb43da9c --- /dev/null +++ b/app/api/log.v2/infrastructure/LogWriter.ts @@ -0,0 +1,5 @@ +import { LogEntry } from './LogEntry'; + +export interface LogWriter { + (log: LogEntry): void; +} diff --git a/app/api/log.v2/infrastructure/StandardLogger.ts b/app/api/log.v2/infrastructure/StandardLogger.ts index 3bca5971b4..b63aab2a99 100644 --- a/app/api/log.v2/infrastructure/StandardLogger.ts +++ b/app/api/log.v2/infrastructure/StandardLogger.ts @@ -1,99 +1,49 @@ -/* eslint-disable max-classes-per-file */ import { getTenant } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { Tenant } from 'api/tenants/tenantContext'; import { Logger } from '../contracts/Logger'; - -class LogLevel { - name: string; - - severity: number; - - constructor(name: string, severity: number) { - this.name = name; - this.severity = severity; - } -} - -const LogLevels: Record = { - DEBUG: new LogLevel('DEBUG', 10), - INFO: new LogLevel('INFO', 20), - WARNING: new LogLevel('WARNING', 30), - ERROR: new LogLevel('ERROR', 40), - CRITICAL: new LogLevel('CRITICAL', 50), -}; - -class LogEntry { - message: string; - - timestamp: number; - - level: LogLevel; - - tenant: Tenant; - - constructor(message: string, timestamp: number, level: LogLevel, tenant: Tenant) { - this.message = message; - this.timestamp = timestamp; - this.level = level; - this.tenant = tenant; - } - - private timeToString(): string { - return new Date(this.timestamp).toISOString(); - } - - toString(): string { - return `${this.timeToString()} - [${this.level.name}] - [${this.tenant.name}]:${this.message}`; - } - - toJSONString(): string { - return JSON.stringify({ - time: this.timeToString(), - level: this.level.name, - tenant: this.tenant.name, - message: this.message, - }); - } -} +import { LogLevel, LogLevels } from './LogLevels'; +import { LogEntry } from './LogEntry'; +import { LogWriter } from './LogWriter'; +import { StandardJSONWriter } from './writers/StandardJSONWriter'; class StandardLogger implements Logger { + private write: LogWriter; + private tenant: Tenant; - constructor(tenant: Tenant) { + constructor(writer: LogWriter, tenant: Tenant) { + this.write = writer; this.tenant = tenant; } - private log(level: LogLevel, _message: string | string[], asJSON: boolean = false): void { + private log(level: LogLevel, _message: string | string[]): void { const message = Array.isArray(_message) ? _message.join('\n') : _message; const entry = new LogEntry(message, Date.now(), level, this.tenant); - if (asJSON) { - process.stdout.write(`${entry.toJSONString()}\n`); - } else { - process.stdout.write(`${entry.toString()}\n`); - } + + this.write(entry); } - debug(message: string | string[], asJSON: boolean = false): void { - this.log(LogLevels.DEBUG, message, asJSON); + debug(message: string | string[]): void { + this.log(LogLevels.DEBUG, message); } - info(message: string | string[], asJSON: boolean = false): void { - this.log(LogLevels.INFO, message, asJSON); + info(message: string | string[]): void { + this.log(LogLevels.INFO, message); } - warning(message: string | string[], asJSON: boolean = false): void { - this.log(LogLevels.WARNING, message, asJSON); + warning(message: string | string[]): void { + this.log(LogLevels.WARNING, message); } - error(message: string | string[], asJSON: boolean = false): void { - this.log(LogLevels.ERROR, message, asJSON); + error(message: string | string[]): void { + this.log(LogLevels.ERROR, message); } - critical(message: string | string[], asJSON: boolean = false): void { - this.log(LogLevels.CRITICAL, message, asJSON); + critical(message: string | string[]): void { + this.log(LogLevels.CRITICAL, message); } } -const DefaultLogger = () => new StandardLogger(getTenant()); +const DefaultLogger = () => new StandardLogger(StandardJSONWriter, getTenant()); export { StandardLogger, DefaultLogger }; diff --git a/app/api/log.v2/infrastructure/specs/Logger.spec.ts b/app/api/log.v2/infrastructure/specs/Logger.spec.ts index ede6c48ea4..7bedc2d496 100644 --- a/app/api/log.v2/infrastructure/specs/Logger.spec.ts +++ b/app/api/log.v2/infrastructure/specs/Logger.spec.ts @@ -1,5 +1,7 @@ import { Tenant } from 'api/tenants/tenantContext'; import { StandardLogger } from '../StandardLogger'; +import { StandardJSONWriter } from '../writers/StandardJSONWriter'; +import { StandardWriter } from '../writers/StandardWriter'; const tenant: Tenant = { name: 'testTenant', @@ -11,7 +13,8 @@ const tenant: Tenant = { activityLogs: 'testTenant/activityLogs', }; -const logging = new StandardLogger(tenant); +const jsonLogger = new StandardLogger(StandardJSONWriter, tenant); +const standardLogger = new StandardLogger(StandardWriter, tenant); const mockedTimeStamp = Date.UTC(1999, 11, 31, 23, 59); const mockedDateString = '1999-12-31T23:59:00.000Z'; @@ -36,75 +39,75 @@ describe('Logger', () => { it.each([ { + logger: standardLogger, level: 'debug', message: 'debug message', - asJSON: false, expected: `${mockedDateString} - [DEBUG] - [testTenant]:debug message\n`, }, { + logger: jsonLogger, level: 'debug', message: 'debug message', - asJSON: true, expected: `{"time":"${mockedDateString}","level":"DEBUG","tenant":"testTenant","message":"debug message"}\n`, }, { + logger: standardLogger, level: 'info', message: 'info message', - asJSON: false, expected: `${mockedDateString} - [INFO] - [testTenant]:info message\n`, }, { + logger: jsonLogger, level: 'info', message: 'info message', - asJSON: true, expected: `{"time":"${mockedDateString}","level":"INFO","tenant":"testTenant","message":"info message"}\n`, }, { + logger: standardLogger, level: 'warning', message: 'warning message', - asJSON: false, expected: `${mockedDateString} - [WARNING] - [testTenant]:warning message\n`, }, { + logger: jsonLogger, level: 'warning', message: 'warning message', - asJSON: true, expected: `{"time":"${mockedDateString}","level":"WARNING","tenant":"testTenant","message":"warning message"}\n`, }, { + logger: standardLogger, level: 'error', message: 'error message', - asJSON: false, expected: `${mockedDateString} - [ERROR] - [testTenant]:error message\n`, }, { + logger: jsonLogger, level: 'error', message: 'error message', - asJSON: true, expected: `{"time":"${mockedDateString}","level":"ERROR","tenant":"testTenant","message":"error message"}\n`, }, { + logger: standardLogger, level: 'critical', message: 'critical message', - asJSON: false, expected: `${mockedDateString} - [CRITICAL] - [testTenant]:critical message\n`, }, { + logger: jsonLogger, level: 'critical', message: 'critical message', - asJSON: true, expected: `{"time":"${mockedDateString}","level":"CRITICAL","tenant":"testTenant","message":"critical message"}\n`, }, - ])('should log $level', ({ level, message, asJSON, expected }) => { + ])('should log $level', ({ logger, level, message, expected }) => { // @ts-ignore - logging[level](message, asJSON); + logger[level](message); expect(stdoutMock).toHaveBeenCalledWith(expected); }); it('should be able to log multiple lines together', () => { const message = ['multiple', 'line', 'message']; + standardLogger.debug(message); const expected = `${mockedDateString} - [DEBUG] - [testTenant]:multiple\nline\nmessage\n`; - logging.debug(message); expect(stdoutMock).toHaveBeenCalledWith(expected); }); }); diff --git a/app/api/log.v2/infrastructure/writers/StandardJSONWriter.ts b/app/api/log.v2/infrastructure/writers/StandardJSONWriter.ts new file mode 100644 index 0000000000..5fa8a7e3e5 --- /dev/null +++ b/app/api/log.v2/infrastructure/writers/StandardJSONWriter.ts @@ -0,0 +1,13 @@ +import { LogEntry } from '../LogEntry'; +import { LogWriter } from '../LogWriter'; + +export const StandardJSONWriter: LogWriter = (log: LogEntry) => { + process.stdout.write( + `${JSON.stringify({ + time: log.timeToString(), + level: log.level.name, + tenant: log.tenant.name, + message: log.message, + })}\n` + ); +}; diff --git a/app/api/log.v2/infrastructure/writers/StandardWriter.ts b/app/api/log.v2/infrastructure/writers/StandardWriter.ts new file mode 100644 index 0000000000..9546514184 --- /dev/null +++ b/app/api/log.v2/infrastructure/writers/StandardWriter.ts @@ -0,0 +1,8 @@ +import { LogEntry } from '../LogEntry'; +import { LogWriter } from '../LogWriter'; + +export const StandardWriter: LogWriter = (log: LogEntry) => { + process.stdout.write( + `${`${log.timeToString()} - [${log.level.name}] - [${log.tenant.name}]:${log.message}`}\n` + ); +}; diff --git a/app/api/queue.v2/configuration/factories.ts b/app/api/queue.v2/configuration/factories.ts index 23dfa58158..b356f33642 100644 --- a/app/api/queue.v2/configuration/factories.ts +++ b/app/api/queue.v2/configuration/factories.ts @@ -5,6 +5,7 @@ import { getSharedClient, getSharedConnection, } from 'api/common.v2/database/getConnectionForCurrentTenant'; +import { DefaultLogger } from 'api/log.v2/infrastructure/StandardLogger'; import { JobsRouter } from '../infrastructure/JobsRouter'; import { MongoQueueAdapter } from '../infrastructure/MongoQueueAdapter'; import { NamespacedDispatcher } from '../infrastructure/NamespacedDispatcher'; @@ -12,12 +13,15 @@ import { NamespacedDispatcher } from '../infrastructure/NamespacedDispatcher'; export function DefaultQueueAdapter() { return new MongoQueueAdapter( getSharedConnection(), - new MongoTransactionManager(getSharedClient()) + new MongoTransactionManager(getSharedClient(), DefaultLogger()) ); } export function DefaultTestingQueueAdapter() { - return new MongoQueueAdapter(getConnection(), new MongoTransactionManager(getClient())); + return new MongoQueueAdapter( + getConnection(), + new MongoTransactionManager(getClient(), DefaultLogger()) + ); } export async function DefaultDispatcher(tenant: string) { diff --git a/app/api/relationships.v2/database/specs/MongoRelationshipsDataSource.spec.ts b/app/api/relationships.v2/database/specs/MongoRelationshipsDataSource.spec.ts index ff497c5713..c7d6e1fe16 100644 --- a/app/api/relationships.v2/database/specs/MongoRelationshipsDataSource.spec.ts +++ b/app/api/relationships.v2/database/specs/MongoRelationshipsDataSource.spec.ts @@ -1,10 +1,9 @@ -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; import { MatchQueryNode } from 'api/relationships.v2/model/MatchQueryNode'; import { TraversalQueryNode } from 'api/relationships.v2/model/TraversalQueryNode'; import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB from 'api/utils/testing_db'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { MongoRelationshipsDataSource } from '../MongoRelationshipsDataSource'; const factory = getFixturesFactory(); @@ -88,10 +87,7 @@ let ds: MongoRelationshipsDataSource; beforeEach(async () => { await testingEnvironment.setUp(fixtures); - ds = new MongoRelationshipsDataSource( - testingDB.mongodb!, - new MongoTransactionManager(getClient()) - ); + ds = new MongoRelationshipsDataSource(testingDB.mongodb!, DefaultTransactionManager()); }); afterAll(async () => { diff --git a/app/api/relationships.v2/routes/routes.ts b/app/api/relationships.v2/routes/routes.ts index 247d34374d..3c0da160e3 100644 --- a/app/api/relationships.v2/routes/routes.ts +++ b/app/api/relationships.v2/routes/routes.ts @@ -4,14 +4,13 @@ import { Application, NextFunction, Request, Response } from 'express'; import { needsAuthorization } from 'api/auth'; import { DefaultSettingsDataSource } from 'api/settings.v2/database/data_source_defaults'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { parseQuery } from 'api/utils'; import { GetMigrationHubRecordsResponse } from 'shared/types/api.v2/migrationHubRecords.get'; import { MigrationResponse } from 'shared/types/api.v2/relationships.migrate'; import { TestOneHubResponse } from 'shared/types/api.v2/relationships.testOneHub'; import { CreateRelationshipMigRationFieldResponse } from 'shared/types/api.v2/relationshipMigrationField.create'; import { GetRelationshipMigrationFieldsResponse } from 'shared/types/api.v2/relationshipMigrationField.get'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { CreateRelationshipMigrationFieldService, CreateRelationshipService, @@ -34,9 +33,7 @@ import { validateGetMigrationHubRecordsRequest } from './validators/getMigration const featureRequired = async (_req: Request, res: Response, next: NextFunction) => { if ( - !(await DefaultSettingsDataSource( - new MongoTransactionManager(getClient()) - ).readNewRelationshipsAllowed()) + !(await DefaultSettingsDataSource(DefaultTransactionManager()).readNewRelationshipsAllowed()) ) { return res.sendStatus(404); } diff --git a/app/api/relationships.v2/services/service_factories.ts b/app/api/relationships.v2/services/service_factories.ts index 81299d0a1f..58d3368ed8 100644 --- a/app/api/relationships.v2/services/service_factories.ts +++ b/app/api/relationships.v2/services/service_factories.ts @@ -17,7 +17,6 @@ import { User } from 'api/users.v2/model/User'; import { Request } from 'express'; import { UserRole } from 'shared/types/userSchema'; -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { tenants } from 'api/tenants'; import { MongoIdHandler } from 'api/common.v2/database/MongoIdGenerator'; import { DefaultDispatcher } from 'api/queue.v2/configuration/factories'; @@ -70,7 +69,7 @@ const createUpdateStrategy = async ( strategyKey: string | undefined, updater: GenericEntityRelationshipsUpdateService ) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); switch (strategyKey) { case QueuedRelationshipPropertyUpdateStrategy.name: diff --git a/app/api/relationships.v2/services/specs/CreateRelationshipService.spec.ts b/app/api/relationships.v2/services/specs/CreateRelationshipService.spec.ts index 2517af54e6..ed4a66739e 100644 --- a/app/api/relationships.v2/services/specs/CreateRelationshipService.spec.ts +++ b/app/api/relationships.v2/services/specs/CreateRelationshipService.spec.ts @@ -1,7 +1,6 @@ import { AuthorizationService } from 'api/authorization.v2/services/AuthorizationService'; -import { getConnection, getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { MongoIdHandler } from 'api/common.v2/database/MongoIdGenerator'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; import { partialImplementation } from 'api/common.v2/testing/partialImplementation'; import { MongoEntitiesDataSource } from 'api/entities.v2/database/MongoEntitiesDataSource'; import { MissingEntityError } from 'api/entities.v2/errors/entityErrors'; @@ -15,6 +14,7 @@ import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB, { DBFixture } from 'api/utils/testing_db'; import { ObjectId } from 'mongodb'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { CreateRelationshipService } from '../CreateRelationshipService'; import { DenormalizationService } from '../DenormalizationService'; @@ -39,7 +39,7 @@ const denormalizationServiceMock = partialImplementation const createService = () => { const connection = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const SettingsDataSource = new MongoSettingsDataSource(connection, transactionManager); validateAccessMock.mockReset(); diff --git a/app/api/relationships.v2/services/specs/DeleteRelationshipService.spec.ts b/app/api/relationships.v2/services/specs/DeleteRelationshipService.spec.ts index 7976618b32..25d7acdf3b 100644 --- a/app/api/relationships.v2/services/specs/DeleteRelationshipService.spec.ts +++ b/app/api/relationships.v2/services/specs/DeleteRelationshipService.spec.ts @@ -1,14 +1,14 @@ import { MongoPermissionsDataSource } from 'api/authorization.v2/database/MongoPermissionsDataSource'; import { AuthorizationService } from 'api/authorization.v2/services/AuthorizationService'; -import { getConnection, getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { MongoIdHandler } from 'api/common.v2/database/MongoIdGenerator'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; import { partialImplementation } from 'api/common.v2/testing/partialImplementation'; import { User } from 'api/users.v2/model/User'; import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB from 'api/utils/testing_db'; import { ObjectId } from 'mongodb'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { MongoRelationshipsDataSource } from '../../database/MongoRelationshipsDataSource'; import { MissingRelationshipError } from '../../errors/relationshipErrors'; import { DeleteRelationshipService } from '../DeleteRelationshipService'; @@ -81,7 +81,7 @@ describe('delete()', () => { }); const connection = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const service = new DeleteRelationshipService( new MongoRelationshipsDataSource(connection, transactionManager), transactionManager, @@ -111,7 +111,7 @@ describe('delete()', () => { }); const connection = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const service = new DeleteRelationshipService( new MongoRelationshipsDataSource(connection, transactionManager), transactionManager, @@ -157,7 +157,7 @@ describe('delete()', () => { }); const connection = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const service = new DeleteRelationshipService( new MongoRelationshipsDataSource(connection, transactionManager), transactionManager, diff --git a/app/api/relationships.v2/services/specs/DenormalizationService.spec.ts b/app/api/relationships.v2/services/specs/DenormalizationService.spec.ts index 7c93a0d0c4..54f4148983 100644 --- a/app/api/relationships.v2/services/specs/DenormalizationService.spec.ts +++ b/app/api/relationships.v2/services/specs/DenormalizationService.spec.ts @@ -1,5 +1,4 @@ -import { getClient, getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { MongoEntitiesDataSource } from 'api/entities.v2/database/MongoEntitiesDataSource'; import { MongoRelationshipsDataSource } from 'api/relationships.v2/database/MongoRelationshipsDataSource'; import { MongoSettingsDataSource } from 'api/settings.v2/database/MongoSettingsDataSource'; @@ -9,6 +8,7 @@ import { testingEnvironment } from 'api/utils/testingEnvironment'; import testingDB, { DBFixture } from 'api/utils/testing_db'; import { Db } from 'mongodb'; import { partialImplementation } from 'api/common.v2/testing/partialImplementation'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { DenormalizationService } from '../DenormalizationService'; import { RelationshipPropertyUpdateStrategy } from '../propertyUpdateStrategies/RelationshipPropertyUpdateStrategy'; @@ -319,7 +319,7 @@ beforeEach(async () => { updateByTemplateMock = jest.fn(); db = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); triggerCommit = async () => transactionManager.executeOnCommitHandlers(undefined); const relationshipsDataSource = new MongoRelationshipsDataSource(db, transactionManager); const templatesDataSource = new MongoTemplatesDataSource(db, transactionManager); diff --git a/app/api/relationships.v2/services/specs/GetRelationshipService.spec.ts b/app/api/relationships.v2/services/specs/GetRelationshipService.spec.ts index d6de993c22..863b1256e9 100644 --- a/app/api/relationships.v2/services/specs/GetRelationshipService.spec.ts +++ b/app/api/relationships.v2/services/specs/GetRelationshipService.spec.ts @@ -1,7 +1,6 @@ import { MongoPermissionsDataSource } from 'api/authorization.v2/database/MongoPermissionsDataSource'; import { AuthorizationService } from 'api/authorization.v2/services/AuthorizationService'; -import { getClient, getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { MongoEntitiesDataSource } from 'api/entities.v2/database/MongoEntitiesDataSource'; import { MongoRelationshipsDataSource } from 'api/relationships.v2/database/MongoRelationshipsDataSource'; import { MongoRelationshipTypesDataSource } from 'api/relationshiptypes.v2/database/MongoRelationshipTypesDataSource'; @@ -11,6 +10,7 @@ import { User } from 'api/users.v2/model/User'; import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; import { DBFixture } from 'api/utils/testing_db'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { GetRelationshipService } from '../GetRelationshipService'; const fixtureFactory = getFixturesFactory(); @@ -49,7 +49,7 @@ const fixtures: DBFixture = { const createService = (_user?: User) => { const user = _user || new User(fixtureFactory.id('user').toString(), 'admin', []); const connection = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const relationshipsDS = new MongoRelationshipsDataSource(connection, transactionManager); const relationshipTypesDS = new MongoRelationshipTypesDataSource(connection, transactionManager); const templatesDS = new MongoTemplatesDataSource(connection, transactionManager); diff --git a/app/api/relationtypes/v2_support.ts b/app/api/relationtypes/v2_support.ts index dde216e096..70c82d6f3e 100644 --- a/app/api/relationtypes/v2_support.ts +++ b/app/api/relationtypes/v2_support.ts @@ -1,12 +1,11 @@ import { ObjectId } from 'mongodb'; import { DefaultSettingsDataSource } from 'api/settings.v2/database/data_source_defaults'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { DefaultRelationshipDataSource } from 'api/relationships.v2/database/data_source_defaults'; import { CreateTemplateService } from 'api/templates.v2/services/service_factories'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; const getNewRelationshipCount = async (id: ObjectId) => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const newRelationshipsAllowed = await DefaultSettingsDataSource(transactionManager).readNewRelationshipsAllowed(); const relationshipsDataSource = DefaultRelationshipDataSource(transactionManager); @@ -15,7 +14,7 @@ const getNewRelationshipCount = async (id: ObjectId) => { }; const relationTypeIsUsedInQueries = async (id: ObjectId): Promise => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const newRelationshipsAllowed = await DefaultSettingsDataSource(transactionManager).readNewRelationshipsAllowed(); if (!newRelationshipsAllowed) return false; diff --git a/app/api/search/entitiesIndex.js b/app/api/search/entitiesIndex.js index a4816e9818..e456622567 100644 --- a/app/api/search/entitiesIndex.js +++ b/app/api/search/entitiesIndex.js @@ -6,9 +6,9 @@ import { entityDefaultDocument } from 'shared/entityDefaultDocument'; import PromisePool from '@supercharge/promise-pool'; import { ElasticEntityMapper } from 'api/entities.v2/database/ElasticEntityMapper'; import { MongoTemplatesDataSource } from 'api/templates.v2/database/MongoTemplatesDataSource'; -import { getClient, getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { MongoSettingsDataSource } from 'api/settings.v2/database/MongoSettingsDataSource'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import elasticMapping from '../../../database/elastic_mapping/elastic_mapping'; import elasticMapFactory from '../../../database/elastic_mapping/elasticMapFactory'; import { elastic } from './elastic'; @@ -17,18 +17,14 @@ export class IndexError extends Error {} const preprocessEntitiesToIndex = async entitiesToIndex => { const db = getConnection(); - const client = getClient(); - const transactionManager = new MongoTransactionManager(client); + const transactionManager = DefaultTransactionManager(); const settingsDataSource = new MongoSettingsDataSource(db, transactionManager); if (!(await settingsDataSource.readNewRelationshipsAllowed())) { return entitiesToIndex; } - const templateDS = new MongoTemplatesDataSource( - getConnection(), - new MongoTransactionManager(getClient()) - ); + const templateDS = new MongoTemplatesDataSource(getConnection(), DefaultTransactionManager()); const transformer = new ElasticEntityMapper(templateDS); return Promise.all(entitiesToIndex.map(e => transformer.toElastic(e))); }; diff --git a/app/api/search/v2_support.ts b/app/api/search/v2_support.ts index 346e657ffc..929df5979d 100644 --- a/app/api/search/v2_support.ts +++ b/app/api/search/v2_support.ts @@ -1,6 +1,5 @@ -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; -import { getClient, getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { DefaultEntitiesDataSource } from 'api/entities.v2/database/data_source_defaults'; import { MongoSettingsDataSource } from 'api/settings.v2/database/MongoSettingsDataSource'; import { propertyTypes } from 'shared/propertyTypes'; @@ -8,9 +7,8 @@ import { PropertySchema } from 'shared/types/commonTypes'; async function checkFeatureEnabled() { const db = getConnection(); - const client = getClient(); - const transactionManager = new MongoTransactionManager(client); + const transactionManager = DefaultTransactionManager(); const settingsDataSource = new MongoSettingsDataSource(db, transactionManager); return settingsDataSource.readNewRelationshipsAllowed(); diff --git a/app/api/sync/specs/syncWorker.spec.ts b/app/api/sync/specs/syncWorker.spec.ts index 29a029b6e4..587b9c65aa 100644 --- a/app/api/sync/specs/syncWorker.spec.ts +++ b/app/api/sync/specs/syncWorker.spec.ts @@ -20,8 +20,6 @@ import db from 'api/utils/testing_db'; import { advancedSort } from 'app/utils/advancedSort'; import bodyParser from 'body-parser'; import express, { NextFunction, Request, RequestHandler, Response } from 'express'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { DefaultTranslationsDataSource } from 'api/i18n.v2/database/data_source_defaults'; import { CreateTranslationsService } from 'api/i18n.v2/services/CreateTranslationsService'; import { ValidateTranslationsService } from 'api/i18n.v2/services/ValidateTranslationsService'; @@ -32,6 +30,7 @@ import { Server } from 'http'; import 'isomorphic-fetch'; import _ from 'lodash'; import { FetchResponseError } from 'shared/JSONRequest'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { syncWorker } from '../syncWorker'; import { host1Fixtures, @@ -336,7 +335,7 @@ describe('syncWorker', () => { it('should syncronize translations v2 that match configured properties', async () => { await tenants.run(async () => { - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); await new CreateTranslationsService( DefaultTranslationsDataSource(transactionManager), new ValidateTranslationsService( diff --git a/app/api/templates.v2/database/specs/MongoTemplatesDataSource.spec.ts b/app/api/templates.v2/database/specs/MongoTemplatesDataSource.spec.ts index c63addc2a5..dd9623f143 100644 --- a/app/api/templates.v2/database/specs/MongoTemplatesDataSource.spec.ts +++ b/app/api/templates.v2/database/specs/MongoTemplatesDataSource.spec.ts @@ -1,10 +1,10 @@ -import { getClient, getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { TraversalQueryNode } from 'api/relationships.v2/model/TraversalQueryNode'; import { Property } from 'api/templates.v2/model/Property'; import { RelationshipProperty } from 'api/templates.v2/model/RelationshipProperty'; import { getFixturesFactory } from 'api/utils/fixturesFactory'; import { testingEnvironment } from 'api/utils/testingEnvironment'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { MongoTemplatesDataSource } from '../MongoTemplatesDataSource'; import { mapPropertyQuery } from '../QueryMapper'; @@ -71,10 +71,7 @@ afterAll(async () => { describe('getAllProperties()', () => { it('should return all the properties properly typed', async () => { - const dataSource = new MongoTemplatesDataSource( - getConnection(), - new MongoTransactionManager(getClient()) - ); + const dataSource = new MongoTemplatesDataSource(getConnection(), DefaultTransactionManager()); const result = await dataSource.getAllProperties().all(); expect(result.length).toBe(4); expect(result[0]).toBeInstanceOf(RelationshipProperty); @@ -104,10 +101,7 @@ describe('getAllProperties()', () => { describe('when requesting the relationship properties configured in the system', () => { it('should return all the relationship properties', async () => { - const dataSource = new MongoTemplatesDataSource( - getConnection(), - new MongoTransactionManager(getClient()) - ); + const dataSource = new MongoTemplatesDataSource(getConnection(), DefaultTransactionManager()); const result = await dataSource.getAllRelationshipProperties().all(); expect(result.length).toBe(3); result.forEach(property => { @@ -139,7 +133,7 @@ describe('when requesting a property by name', () => { const props: { [name: string]: Property } = {}; beforeAll(async () => { - tds = new MongoTemplatesDataSource(getConnection(), new MongoTransactionManager(getClient())); + tds = new MongoTemplatesDataSource(getConnection(), DefaultTransactionManager()); props.newRelationship = await tds.getPropertyByName('relationshipProp2'); props.text = await tds.getPropertyByName('textprop'); }); @@ -173,10 +167,7 @@ describe('when requesting a property by name', () => { describe('getByIds()', () => { it('should return the templates', async () => { - const dataSource = new MongoTemplatesDataSource( - getConnection(), - new MongoTransactionManager(getClient()) - ); + const dataSource = new MongoTemplatesDataSource(getConnection(), DefaultTransactionManager()); const result = await dataSource .getByIds([factory.id('template1').toString(), factory.id('template2').toString()]) .all(); @@ -195,10 +186,7 @@ describe('getByIds()', () => { describe('getById()', () => { it('should return the template', async () => { - const dataSource = new MongoTemplatesDataSource( - getConnection(), - new MongoTransactionManager(getClient()) - ); + const dataSource = new MongoTemplatesDataSource(getConnection(), DefaultTransactionManager()); const result = await dataSource.getById(factory.id('template1').toString()); expect(result).toMatchObject({ id: factory.id('template1').toString(), diff --git a/app/api/templates.v2/services/specs/CreateTemplateService.spec.ts b/app/api/templates.v2/services/specs/CreateTemplateService.spec.ts index b3e783dabb..90af1364ec 100644 --- a/app/api/templates.v2/services/specs/CreateTemplateService.spec.ts +++ b/app/api/templates.v2/services/specs/CreateTemplateService.spec.ts @@ -1,5 +1,4 @@ -import { getClient, getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { ValidationError } from 'api/common.v2/validation/ValidationError'; import { MongoRelationshipTypesDataSource } from 'api/relationshiptypes.v2/database/MongoRelationshipTypesDataSource'; import { MongoTemplatesDataSource } from 'api/templates.v2/database/MongoTemplatesDataSource'; @@ -11,6 +10,7 @@ import { DenormalizationService } from 'api/relationships.v2/services/Denormaliz import { MongoRelationshipsDataSource } from 'api/relationships.v2/database/MongoRelationshipsDataSource'; import { OnlineRelationshipPropertyUpdateStrategy } from 'api/relationships.v2/services/propertyUpdateStrategies/OnlineRelationshipPropertyUpdateStrategy'; import { EntityRelationshipsUpdateService } from 'api/entities.v2/services/EntityRelationshipsUpdateService'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { CreateTemplateService } from '../CreateTemplateService'; const fixturesFactory = getFixturesFactory(); @@ -43,7 +43,7 @@ afterAll(async () => { function setUpService() { const connection = getConnection(); - const transactionManager = new MongoTransactionManager(getClient()); + const transactionManager = DefaultTransactionManager(); const templatesDS = new MongoTemplatesDataSource(connection, transactionManager); const relTypeDS = new MongoRelationshipTypesDataSource(connection, transactionManager); const settingsDS = new MongoSettingsDataSource(connection, transactionManager); @@ -64,7 +64,7 @@ function setUpService() { new OnlineRelationshipPropertyUpdateStrategy( async () => {}, new EntityRelationshipsUpdateService(entityDS, templatesDS, relationshipsDS), - new MongoTransactionManager(getClient()), + DefaultTransactionManager(), entityDS ) ); diff --git a/app/api/templates/v2_support.ts b/app/api/templates/v2_support.ts index 911a65eeee..fd0be085bd 100644 --- a/app/api/templates/v2_support.ts +++ b/app/api/templates/v2_support.ts @@ -1,16 +1,14 @@ -import { getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; import { WithId } from 'api/odm'; import { DefaultSettingsDataSource } from 'api/settings.v2/database/data_source_defaults'; import { validateCreateNewRelationshipProperty } from 'api/templates.v2/routes/validators/createNewRelationshipProperty'; import { CreateTemplateService } from 'api/templates.v2/services/service_factories'; import { ensure } from 'shared/tsUtils'; import { TemplateSchema } from 'shared/types/templateType'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import templates from './templates'; const processNewRelationshipProperties = async (template: TemplateSchema) => { - const client = getClient(); - const transactionManager = new MongoTransactionManager(client); + const transactionManager = DefaultTransactionManager(); if (!(await DefaultSettingsDataSource(transactionManager).readNewRelationshipsAllowed())) { return template; } @@ -42,8 +40,7 @@ const processNewRelationshipPropertiesOnUpdate = async ( _oldTemplate: TemplateSchema, _newTemplate: TemplateSchema ) => { - const client = getClient(); - const transactionManager = new MongoTransactionManager(client); + const transactionManager = DefaultTransactionManager(); if (!(await DefaultSettingsDataSource(transactionManager).readNewRelationshipsAllowed())) { return _newTemplate; } @@ -55,8 +52,7 @@ const processNewRelationshipPropertiesOnUpdate = async ( }; const processNewRelationshipPropertiesOnDelete = async (templateId: TemplateSchema['_id']) => { - const client = getClient(); - const transactionManager = new MongoTransactionManager(client); + const transactionManager = DefaultTransactionManager(); if (!(await DefaultSettingsDataSource(transactionManager).readNewRelationshipsAllowed())) { return; } diff --git a/database/elastic_mapping/elasticMapFactory.ts b/database/elastic_mapping/elasticMapFactory.ts index ad3927a252..09bc2b03c7 100644 --- a/database/elastic_mapping/elasticMapFactory.ts +++ b/database/elastic_mapping/elasticMapFactory.ts @@ -1,15 +1,14 @@ -import { getConnection, getClient } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { MongoTransactionManager } from 'api/common.v2/database/MongoTransactionManager'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; import { MongoSettingsDataSource } from 'api/settings.v2/database/MongoSettingsDataSource'; import { RelationshipPropertyMappingFactory } from 'api/templates.v2/database/mappings/RelationshipPropertyMappingFactory'; import { MongoTemplatesDataSource } from 'api/templates.v2/database/MongoTemplatesDataSource'; import { TemplateSchema } from 'shared/types/templateType'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; import { propertyMappings } from './mappings'; const createNewRelationshipMappingFactory = async () => { const db = getConnection(); - const client = getClient(); - const transactionManager = new MongoTransactionManager(client); + const transactionManager = DefaultTransactionManager(); const settingsDataSource = new MongoSettingsDataSource(db, transactionManager); if (!(await settingsDataSource.readNewRelationshipsAllowed())) { From ec7a13a10dd6efa32fe4303c5e3cf19e93897a03 Mon Sep 17 00:00:00 2001 From: Santiago <71732018+Zasa-san@users.noreply.github.com> Date: Sat, 14 Oct 2023 14:40:48 -0300 Subject: [PATCH 02/14] IX V2 - Control table resorting (#6193) * use state + memo to avoid resorting * restored original behavior * handle sidepanel state internally w/o revalidate * sidepanel returns updated entity for table update * update table on entity update * update table on suggestion accept * expanded e2e --- .../V2/Routes/Settings/IX/IXSuggestions.tsx | 15 +- .../Settings/IX/components/PDFSidepanel.tsx | 23 ++- .../Routes/Settings/IX/components/helpers.ts | 95 ++++++++++ .../Settings/IX/components/specs/fixtures.ts | 164 ++++++++++++++++++ .../specs/updateSuggestions.spec.ts | 35 ++++ .../specs/updateSuggestionsByEntity.spec.ts | 63 +++++++ ...ith the pdf and selection rectangle #0.png | Bin 158600 -> 90755 bytes .../e2e/settings/information-extraction.cy.ts | 86 ++++++--- 8 files changed, 449 insertions(+), 32 deletions(-) create mode 100644 app/react/V2/Routes/Settings/IX/components/helpers.ts create mode 100644 app/react/V2/Routes/Settings/IX/components/specs/fixtures.ts create mode 100644 app/react/V2/Routes/Settings/IX/components/specs/updateSuggestions.spec.ts create mode 100644 app/react/V2/Routes/Settings/IX/components/specs/updateSuggestionsByEntity.spec.ts diff --git a/app/react/V2/Routes/Settings/IX/IXSuggestions.tsx b/app/react/V2/Routes/Settings/IX/IXSuggestions.tsx index cca18144da..38d0e7fe8d 100644 --- a/app/react/V2/Routes/Settings/IX/IXSuggestions.tsx +++ b/app/react/V2/Routes/Settings/IX/IXSuggestions.tsx @@ -1,6 +1,6 @@ /* eslint-disable max-lines */ /* eslint-disable max-statements */ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { IncomingHttpHeaders } from 'http'; import { LoaderFunction, @@ -28,6 +28,7 @@ import { SuggestionsTitle } from './components/SuggestionsTitle'; import { FiltersSidepanel } from './components/FiltersSidepanel'; import { suggestionsTableColumnsBuilder } from './components/TableElements'; import { PDFSidepanel } from './components/PDFSidepanel'; +import { updateSuggestions, updateSuggestionsByEntity } from './components/helpers'; const SUGGESTIONS_PER_PAGE = 100; const SORTABLE_PROPERTIES = ['entityTitle', 'segment', 'currentValue']; @@ -60,6 +61,9 @@ const IXSuggestions = () => { currentStatus: ixStatus; }; + const [currentSuggestions, setCurrentSuggestions] = useState(suggestions); + useMemo(() => setCurrentSuggestions(suggestions), [suggestions]); + const location = useLocation(); const navigate = useNavigate(); const [searchParams] = useSearchParams(); @@ -126,7 +130,7 @@ const IXSuggestions = () => { entityId: acceptedSuggestion.entityId, })) ); - revalidate(); + setCurrentSuggestions(updateSuggestions(currentSuggestions, acceptedSuggestions)); setNotifications({ type: 'success', text: Suggestion accepted., @@ -167,7 +171,7 @@ const IXSuggestions = () => { Showing   - {from}-{from + suggestions.length - 1} + {from}-{from + currentSuggestions.length - 1}   of @@ -201,7 +205,7 @@ const IXSuggestions = () => { - data={suggestions} + data={currentSuggestions} columns={suggestionsTableColumnsBuilder( filteredTemplates(), acceptSuggestions, @@ -310,6 +314,9 @@ const IXSuggestions = () => { showSidepanel={sidepanel === 'pdf'} setShowSidepanel={closeSidepanel} suggestion={sidepanelSuggestion} + onEntitySave={updatedEntity => + setCurrentSuggestions(updateSuggestionsByEntity(currentSuggestions, updatedEntity)) + } /> ); diff --git a/app/react/V2/Routes/Settings/IX/components/PDFSidepanel.tsx b/app/react/V2/Routes/Settings/IX/components/PDFSidepanel.tsx index b475946d09..d7efacdb89 100644 --- a/app/react/V2/Routes/Settings/IX/components/PDFSidepanel.tsx +++ b/app/react/V2/Routes/Settings/IX/components/PDFSidepanel.tsx @@ -2,7 +2,7 @@ /* eslint-disable react/jsx-props-no-spreading */ /* eslint-disable max-statements */ import React, { useEffect, useRef, useState } from 'react'; -import { useLoaderData, useRevalidator } from 'react-router-dom'; +import { useLoaderData } from 'react-router-dom'; import { useForm } from 'react-hook-form'; import { useSetRecoilState } from 'recoil'; import { TextSelection } from 'react-text-selection-handler/dist/TextSelection'; @@ -26,6 +26,7 @@ interface PDFSidepanelProps { showSidepanel: boolean; setShowSidepanel: React.Dispatch>; suggestion: EntitySuggestionType | undefined; + onEntitySave: (entity: ClientEntitySchema) => any; } enum HighlightColors { @@ -144,13 +145,16 @@ const coerceValue = async ( return undefined; }; -const PDFSidepanel = ({ showSidepanel, setShowSidepanel, suggestion }: PDFSidepanelProps) => { +const PDFSidepanel = ({ + showSidepanel, + setShowSidepanel, + suggestion, + onEntitySave, +}: PDFSidepanelProps) => { const { templates } = useLoaderData() as { templates: ClientTemplateSchema[]; }; - const revalidator = useRevalidator(); - const pdfContainerRef = useRef(null); const [pdf, setPdf] = useState(); const [pdfContainerHeight, setPdfContainerHeight] = useState(0); @@ -241,10 +245,17 @@ const PDFSidepanel = ({ showSidepanel, setShowSidepanel, suggestion }: PDFSidepa (savedEntity as FetchResponseError)?.json.prettyMessage; setNotifications({ type: 'error', text: 'An error occurred', details }); - revalidator.revalidate(); } else if (savedFile || savedEntity) { + if (savedFile) { + setPdf(savedFile); + } + + if (savedEntity) { + setEntity(savedEntity); + onEntitySave(savedEntity); + } + setNotifications({ type: 'success', text: 'Saved successfully.' }); - revalidator.revalidate(); } setShowSidepanel(false); diff --git a/app/react/V2/Routes/Settings/IX/components/helpers.ts b/app/react/V2/Routes/Settings/IX/components/helpers.ts new file mode 100644 index 0000000000..059eb72c04 --- /dev/null +++ b/app/react/V2/Routes/Settings/IX/components/helpers.ts @@ -0,0 +1,95 @@ +import { ClientEntitySchema } from 'app/istore'; +import { EntitySuggestionType } from 'shared/types/suggestionType'; + +// eslint-disable-next-line max-statements +const updateSuggestionsByEntity = ( + currentSuggestions: EntitySuggestionType[], + updatedEntity?: ClientEntitySchema +): EntitySuggestionType[] => { + if (!updatedEntity) { + return currentSuggestions; + } + + const suggestionToUpdate = currentSuggestions.find( + currentSuggestion => currentSuggestion.entityId === updatedEntity._id + ); + + const propertyToUpdate = suggestionToUpdate?.propertyName; + + if (!suggestionToUpdate || !propertyToUpdate) { + return currentSuggestions; + } + + if (propertyToUpdate === 'title' && updatedEntity.title) { + const newTitle = updatedEntity.title; + suggestionToUpdate.currentValue = newTitle; + suggestionToUpdate.entityTitle = newTitle; + suggestionToUpdate.state.match = suggestionToUpdate.suggestedValue === newTitle; + } + + if ( + propertyToUpdate !== 'title' && + updatedEntity.metadata && + updatedEntity.metadata[propertyToUpdate]?.length + ) { + const newValue = updatedEntity.metadata[propertyToUpdate]![0].value; + suggestionToUpdate.currentValue = newValue; + suggestionToUpdate.state.match = suggestionToUpdate.suggestedValue === newValue; + } + + if ( + propertyToUpdate !== 'title' && + (!updatedEntity.metadata || !updatedEntity.metadata[propertyToUpdate]?.length) + ) { + suggestionToUpdate.currentValue = ''; + suggestionToUpdate.state.match = suggestionToUpdate.suggestedValue === ''; + } + + const suggestions = currentSuggestions.map(currentSuggestion => { + if (currentSuggestion._id === suggestionToUpdate._id) { + return suggestionToUpdate; + } + return currentSuggestion; + }); + + return suggestions; +}; + +const updateSuggestions = ( + currentSuggestions: EntitySuggestionType[], + suggestionsToAccept: EntitySuggestionType[] | [] +): EntitySuggestionType[] => { + if (!suggestionsToAccept.length) { + return currentSuggestions; + } + + const acceptedSuggestions = suggestionsToAccept.map(suggestionToAccept => { + const updated = { ...suggestionToAccept }; + updated.state.match = true; + updated.currentValue = suggestionToAccept.suggestedValue; + + if ( + suggestionToAccept.propertyName === 'title' && + typeof suggestionToAccept.suggestedValue === 'string' + ) { + updated.entityTitle = suggestionToAccept.suggestedValue; + } + + return updated; + }); + + const merged = [ + ...currentSuggestions + .concat(acceptedSuggestions) + .reduce( + (map, suggestion) => + map.set(suggestion._id, Object.assign(map.get(suggestion._id) || {}, suggestion)), + new Map() + ) + .values(), + ]; + + return merged; +}; + +export { updateSuggestions, updateSuggestionsByEntity }; diff --git a/app/react/V2/Routes/Settings/IX/components/specs/fixtures.ts b/app/react/V2/Routes/Settings/IX/components/specs/fixtures.ts new file mode 100644 index 0000000000..d8734ae188 --- /dev/null +++ b/app/react/V2/Routes/Settings/IX/components/specs/fixtures.ts @@ -0,0 +1,164 @@ +const suggestion1 = { + _id: '1', + language: 'es', + propertyName: 'title', + error: '', + segment: 'suggested value', + suggestedValue: 'suggested value', + state: { + match: false, + labeled: true, + withValue: true, + withSuggestion: true, + hasContext: true, + obsolete: false, + processing: false, + error: false, + }, + selectionRectangles: [ + { + left: 0, + top: 0, + width: 250, + height: 250, + page: '1', + }, + ], + currentValue: 'Entity 1', + entityTitle: 'Entity 1', + entityId: 'entity1', + extractorId: '1', + entityTemplateId: '1', + sharedId: '1', + fileId: '1', + date: 1, +}; + +const suggestion2 = { + _id: '2', + language: 'es', + propertyName: 'title', + error: '', + segment: 'Entity 2', + suggestedValue: 'Entity 2', + state: { + match: true, + labeled: true, + withValue: true, + withSuggestion: true, + hasContext: true, + obsolete: false, + processing: false, + error: false, + }, + selectionRectangles: [ + { + left: 0, + top: 0, + width: 250, + height: 250, + page: '1', + }, + ], + currentValue: 'Entity 2', + entityTitle: 'Entity 2', + entityId: 'entity2', + extractorId: '1', + entityTemplateId: '1', + sharedId: '2', + fileId: '2', + date: 1, +}; + +const suggestion3 = { + _id: '3', + language: 'es', + propertyName: 'document_date', + segment: 'Some value that contains a date', + suggestedValue: 100, + state: { + match: true, + labeled: true, + withValue: true, + withSuggestion: true, + hasContext: true, + obsolete: false, + processing: false, + error: false, + }, + selectionRectangles: [ + { + left: 0, + top: 0, + width: 250, + height: 250, + page: '1', + }, + ], + currentValue: 100, + entityTitle: 'Entity 2', + entityId: 'entity2', + extractorId: '2', + entityTemplateId: '2', + sharedId: '2', + fileId: '3', + date: 1, +}; + +const suggestion4 = { + _id: '4', + language: 'es', + propertyName: 'document_date', + segment: 'Some value that contains a date', + suggestedValue: 500, + state: { + match: false, + labeled: true, + withValue: true, + withSuggestion: true, + hasContext: true, + obsolete: false, + processing: false, + error: false, + }, + selectionRectangles: [ + { + left: 0, + top: 0, + width: 250, + height: 250, + page: '1', + }, + ], + currentValue: 100, + entityTitle: 'Entity 5', + entityId: 'entity5', + extractorId: '2', + entityTemplateId: '2', + sharedId: '5', + fileId: '5', + date: 1, +}; + +const entity1 = { + _id: 'entity1', + language: 'es', + sharedId: '1', + title: 'Entity 1', +}; + +const entity2 = { + _id: 'entity2', + language: 'es', + sharedId: '2', + title: 'Entity 2', + metadata: { + document_date: [ + { + value: 100, + }, + ], + }, +}; + +export { suggestion1, suggestion2, suggestion3, suggestion4, entity1, entity2 }; diff --git a/app/react/V2/Routes/Settings/IX/components/specs/updateSuggestions.spec.ts b/app/react/V2/Routes/Settings/IX/components/specs/updateSuggestions.spec.ts new file mode 100644 index 0000000000..dec0269433 --- /dev/null +++ b/app/react/V2/Routes/Settings/IX/components/specs/updateSuggestions.spec.ts @@ -0,0 +1,35 @@ +import { updateSuggestions } from '../helpers'; +import { suggestion1, suggestion2, suggestion3, suggestion4 } from './fixtures'; + +describe('updateSuggestions', () => { + beforeAll(() => { + jest.clearAllMocks(); + jest.resetModules(); + }); + + it('should update existing suggestions making them accepted', () => { + const accepted = updateSuggestions([suggestion1, suggestion2], [suggestion1]); + expect(accepted).toEqual([ + { + ...suggestion1, + state: { ...suggestion1.state, match: true }, + currentValue: 'suggested value', + entityTitle: 'suggested value', + }, + suggestion2, + ]); + }); + + it('should work with properties other than title', () => { + const accepted = updateSuggestions([suggestion3, suggestion4], [suggestion4]); + expect(accepted).toEqual([ + suggestion3, + { + ...suggestion4, + state: { ...suggestion4.state, match: true }, + currentValue: 500, + entityTitle: 'Entity 5', + }, + ]); + }); +}); diff --git a/app/react/V2/Routes/Settings/IX/components/specs/updateSuggestionsByEntity.spec.ts b/app/react/V2/Routes/Settings/IX/components/specs/updateSuggestionsByEntity.spec.ts new file mode 100644 index 0000000000..d23dcb9ebb --- /dev/null +++ b/app/react/V2/Routes/Settings/IX/components/specs/updateSuggestionsByEntity.spec.ts @@ -0,0 +1,63 @@ +import { updateSuggestionsByEntity } from '../helpers'; +import { suggestion1, suggestion2, suggestion3, entity1, entity2 } from './fixtures'; + +describe('updateSuggestionsByEntity', () => { + it('should update the suggestions current value', () => { + const result = updateSuggestionsByEntity([suggestion1, suggestion2], { + ...entity1, + title: 'New title for entity 1', + }); + + expect(result).toEqual([ + { + ...suggestion1, + currentValue: 'New title for entity 1', + entityTitle: 'New title for entity 1', + }, + suggestion2, + ]); + }); + + it('should update the match status', () => { + const result = updateSuggestionsByEntity([suggestion1, suggestion2], { + ...entity1, + title: 'suggested value', + }); + + expect(result).toEqual([ + { + ...suggestion1, + currentValue: 'suggested value', + entityTitle: 'suggested value', + state: { ...suggestion1.state, match: true }, + }, + suggestion2, + ]); + }); + + it('should work with metadata properties', () => { + const result = updateSuggestionsByEntity([suggestion1, suggestion3], { + ...entity2, + metadata: { + document_date: [ + { + value: 200, + }, + ], + }, + }); + + expect(result).toEqual([ + suggestion1, + { + ...suggestion3, + currentValue: 200, + suggestedValue: 100, + state: { + ...suggestion3.state, + match: false, + }, + }, + ]); + }); +}); diff --git a/cypress/e2e/settings/__image_snapshots__/Information Extraction PDF sidepanel should display the PDF sidepanel with the pdf and selection rectangle #0.png b/cypress/e2e/settings/__image_snapshots__/Information Extraction PDF sidepanel should display the PDF sidepanel with the pdf and selection rectangle #0.png index 302da530ef9a39948338eef84bdba099dc207383..f6435ec6d02f20ea795b987efcdac9e9adcf1d12 100644 GIT binary patch literal 90755 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 w?Y9d_y`%q_AZG9eV%_vd8q7>RV)+9Ubp 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

e^FHVRSCZ}ZShKtol!!nLTC6%r;_JvQT`_g*h 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 literal 158600 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 diff --git a/cypress/e2e/settings/information-extraction.cy.ts b/cypress/e2e/settings/information-extraction.cy.ts index 2eb9c70e14..41d364e538 100644 --- a/cypress/e2e/settings/information-extraction.cy.ts +++ b/cypress/e2e/settings/information-extraction.cy.ts @@ -221,15 +221,30 @@ describe('Information Extraction', () => { cy.contains('button', 'Find suggestions').click(); cy.wait('@trainSuggestions'); cy.contains('Training model...'); - cy.contains('Finding suggestions...'); + cy.contains('2023'); }); - it('should accept a single suggestion', () => { - cy.intercept('POST', 'api/suggestions/accept').as('accept'); - cy.contains('button', 'Accept', { timeout: 10000 }).eq(0).click(); - cy.wait('@accept'); - cy.checkA11y(); + it('should accept a single suggestion without affecting the order', () => { + cy.contains('Lorem Ipsum').parent().siblings().contains('button', 'Accept').click(); + + cy.contains('Suggestion accepted.'); cy.contains('button', 'Dismiss').click(); + + const titles = [ + 'Apitz Barbera y otros. Resolución de la Presidenta de 18 de diciembre de 2009', + 'Batman v Superman: Dawn of Justice', + '2023', + 'Spider-Man: Shattered Dimensions', + 'The Spectacular Spider-Man', + 'Uwazi Heroes Investigation', + ]; + + cy.get('tr > td:nth-child(2) > div').each((element, index) => { + const text = element.get(0).innerText; + expect(text).to.be.equal(titles[index]); + }); + + cy.checkA11y(); }); it('should use filters', () => { @@ -246,17 +261,17 @@ describe('Information Extraction', () => { describe('PDF sidepanel', () => { it('should display the PDF sidepanel with the pdf and selection rectangle', () => { cy.contains('button', 'Open PDF').click(); - cy.contains('h1', 'Spider-Man__Into_the_Spider-Verse.pdf'); + cy.contains('h1', 'SamplePDF.pdf'); cy.get('aside').within(() => { cy.get('input').should('have.value', '2023'); }); cy.get('div.highlight-rectangle').should('be.visible'); - cy.contains('span', 'Spider-Man: Into the Spider-Verse'); + cy.contains('span', 'Lorem Ipsum'); cy.get('aside').toMatchImageSnapshot(); }); it('should not render pdf pages that are not visible', () => { - cy.get('[data-region-selector-id="3"]').within(() => { + cy.get('[data-region-selector-id="2"]').within(() => { cy.get('div').should('be.empty'); }); }); @@ -266,38 +281,65 @@ describe('Information Extraction', () => { cy.get('div.highlight-rectangle').should('have.length', 0); }); + it('should clear the filters', () => { + cy.contains('button', 'Cancel').click(); + cy.contains('button', 'Stats & Filters').click(); + cy.contains('button', 'Clear all').click(); + }); + it('should click to fill with a new text', () => { - //@ts-ignore - cy.contains('span[role="presentation"]', 'Spider-Man: Into the Spider-Verse').setSelection( - 'Spider-Man: Into the Spider-Verse' - ); + cy.contains('The Spectacular Spider-Man').parent().siblings().last().click(); + cy.get('aside').within(() => { + cy.get('input').clear(); + }); + + cy.contains('span[role="presentation"]', 'The Spectacular Spider-Man') + .eq(0) + //@ts-ignore + .setSelection('The Spectacular Spider-Man'); + cy.contains('button', 'Click to fill').click(); cy.get('div.highlight-rectangle').should('be.visible'); cy.get('aside').within(() => { - cy.get('input').should('have.value', 'Spider-Man: Into the Spider-Verse'); + cy.get('input').should('have.value', 'The Spectacular Spider-Man'); }); }); it('should manually edit the field and save', () => { cy.get('aside').within(() => { - cy.get('input').type(' edited'); + cy.get('input').clear(); + cy.get('input').type('A title'); cy.contains('button', 'Accept').click(); }); cy.contains('Saved successfully'); cy.contains('button', 'Dismiss').click(); - cy.contains('button', 'Stats & Filters').click(); - cy.contains('button', 'Clear all').click(); - cy.get('tbody').within(() => { - cy.get('tr:nth-child(3)').within(() => { - cy.get('td:nth-child(2)').should('contain', 'Spider-Man: Into the Spider-Verse edited'); - }); + cy.contains('A title'); + }); + + it('should check that the table updated and the ordering is not affected', () => { + const titles = [ + '2023', + 'Apitz Barbera y otros. Resolución de la Presidenta de 18 de diciembre de 2009', + 'Batman v Superman: Dawn of Justice', + 'Spider-Man: Shattered Dimensions', + 'A title', + 'Uwazi Heroes Investigation', + ]; + + cy.get('tr > td:nth-child(2) > div').each((element, index) => { + const text = element.get(0).innerText; + expect(text).to.be.equal(titles[index]); }); }); it('should open the pdf on the page of the selection', () => { cy.contains('a', 'Metadata Extraction').eq(0).click(); cy.contains('Fechas from relevant templates').siblings().last().click(); - cy.contains('Spider-Man: Into the Spider-Verse edited').parent().siblings().last().click(); + cy.contains('Apitz Barbera y otros. Resolución de la Presidenta de 18 de diciembre de 2009') + .parent() + .siblings() + .last() + .click(); cy.get('aside').within(() => { cy.get('input').should('have.value', '2018-12-01'); cy.contains('New York City teenager Miles Morales'); From b1dae8693c6a2e24c166bbf0ddc571c0b04e8646 Mon Sep 17 00:00:00 2001 From: Santiago Date: Tue, 17 Oct 2023 16:38:11 -0300 Subject: [PATCH 03/14] migrate e2e to cypress --- cypress/e2e/copy-from.cy.ts | 118 +++++++++++++++++++++++++++++++++++ e2e/suite1/copy-from.test.ts | 76 ---------------------- 2 files changed, 118 insertions(+), 76 deletions(-) create mode 100644 cypress/e2e/copy-from.cy.ts delete mode 100644 e2e/suite1/copy-from.test.ts diff --git a/cypress/e2e/copy-from.cy.ts b/cypress/e2e/copy-from.cy.ts new file mode 100644 index 0000000000..192f22c35b --- /dev/null +++ b/cypress/e2e/copy-from.cy.ts @@ -0,0 +1,118 @@ +import { clearCookiesAndLogin } from './helpers/login'; + +describe('Copy from entity', () => { + before(() => { + const env = { DATABASE_NAME: 'uwazi_e2e', INDEX_NAME: 'uwazi_e2e' }; + cy.exec('yarn e2e-puppeteer-fixtures', { env }); + clearCookiesAndLogin(); + }); + + describe('Creating a new entity', () => { + it('should copy the metadata from an existing entity to create a new one', () => { + cy.contains('button', 'Create entity').click(); + cy.get('[name="library.sidepanel.metadata.title"]').type('New orden de la corte'); + cy.get('#metadataForm').find('select').select('Ordenes de la corte'); + cy.get('#metadataForm').find('.form-group.select').find('select').select('d3b1s0w3lzi'); + + cy.contains('button', 'Copy From').click(); + cy.get('div.copy-from').within(() => { + cy.get('input').type( + 'Artavia Murillo y otros. Resolución de la CorteIDH de 26 de febrero de 2016' + ); + cy.contains( + '.item-name', + 'Artavia Murillo y otros. Resolución de la CorteIDH de 26 de febrero de 2016' + ).click(); + cy.contains('button', 'Copy Highlighted').click(); + }); + cy.get('div.copy-from').should('not.exist'); + + cy.contains('button', 'Save').click(); + }); + + it('should view the new entity', () => { + cy.contains('Entity created').click(); + cy.contains('h2', 'New orden de la corte').click(); + cy.get('.side-panel.metadata-sidepanel.is-active').within(() => { + cy.contains('a', 'View').click(); + }); + cy.contains('h1', 'New orden de la corte'); + }); + + it('should check the data for the new entity', () => { + cy.get('.entity-metadata').within(() => { + cy.get('.metadata-name-mecanismo').within(() => { + cy.contains('Corte Interamericana de Derechos Humanos'); + }); + + cy.get('.metadata-name-fecha').within(() => { + cy.contains('Feb 26, 2016'); + }); + + cy.get('.metadata-name-pa_s').within(() => { + cy.contains('Costa Rica'); + }); + + cy.get('.metadata-name-firmantes').within(() => { + cy.contains('Alberto Pérez Pérez'); + cy.contains('Diego García-Sayán'); + cy.contains('Eduardo Ferrer Mac-Gregor Poisot'); + cy.contains('Eduardo Vio Grossi'); + cy.contains('Humberto Antonio Sierra Porto'); + cy.contains('Roberto de Figueiredo Caldas'); + }); + + cy.get('.metadata-name-tipo').within(() => { + cy.contains('Supervisión de cumplimiento de Sentencia'); + }); + + cy.get('.metadata-name-categor_a').within(() => { + cy.contains('Categoría 1'); + }); + }); + }); + }); + + // describe('editing an existing entity', () => { + // it('should edit an entity by using copy from', () => { + // cy.contains('a', 'Library').click(); + // cy.contains( + // 'h2', + // 'Artavia Murillo y otros. Resolución de la CorteIDH de 26 de febrero de 2016' + // ).click(); + // cy.contains('button', 'Edit').click(); + // cy.contains('button', 'Copy From').click(); + + // cy.get('div.copy-from').within(() => { + // cy.get('input').type( + // 'Apitz Barbera y otros. Resolución de la Presidenta de 18 de diciembre de 2009' + // ); + // cy.contains( + // '.item-name', + // 'Apitz Barbera y otros. Resolución de la Presidenta de 18 de diciembre de 2009' + // ).click(); + // cy.contains('button', 'Copy Highlighted').click(); + // }); + // cy.get('div.copy-from').should('not.exist'); + + // cy.get('[name="library.sidepanel.metadata.title"]').clear(); + // cy.get('[name="library.sidepanel.metadata.title"]').type('Edited orden de la corte'); + // cy.get('#metadataForm') + // .contains('.multiselectItem-name', 'Comisión Interamericana de Derechos Humanos') + // .click(); + + // cy.contains('button', 'Save').click(); + // }); + + // it('should view the edited entity', () => { + // cy.contains('Entity updated').click(); + // cy.contains('h2', 'Edited orden de la corte').click(); + // cy.get('.side-panel.metadata-sidepanel.is-active').within(() => { + // cy.contains('a', 'View').click(); + // }); + // cy.contains('h1', 'Edited orden de la corte'); + // }); + + // it('should check the data for the edited entity', () => {}); + // }); +}); diff --git a/e2e/suite1/copy-from.test.ts b/e2e/suite1/copy-from.test.ts deleted file mode 100644 index b2fb41df61..0000000000 --- a/e2e/suite1/copy-from.test.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { adminLogin, logout } from '../helpers/login'; -import proxyMock from '../helpers/proxyMock'; -import insertFixtures from '../helpers/insertFixtures'; -import disableTransitions from '../helpers/disableTransitions'; -import { host } from '../config'; - -describe('Copy from', () => { - beforeAll(async () => { - await insertFixtures(); - await proxyMock(); - await adminLogin(); - await page.goto(`${host}/library`); - await disableTransitions(); - }); - - afterAll(async () => { - await logout(); - }); - - it('should create a new entity', async () => { - await expect(page).toClick( - 'div.item-document:nth-child(3) > div:nth-child(1) > h2:nth-child(1)', - { text: 'Artavia Murillo y otros' } - ); - await expect(page).toClick('.sidepanel-footer > .btn-cluster > a', { text: 'View' }); - await expect(page).toClick('.tab-link', { - text: 'Relationships', - }); - await expect(page).toClick('.entity-footer > .btn-cluster > .edit-metadata', { text: 'Edit' }); - await expect(page).toClick('button', { - text: 'Add entities / documents', - }); - await expect(page).toClick('button', { - text: 'Create Entity', - }); - await expect(page).toFill('textarea[name="relationships.metadata.title"]', 'Test title'); - await expect(page).toSelect('select', 'Causa'); - }); - - it('should copy the metadata from an existing entity', async () => { - await expect(page).toClick('button', { - text: 'Copy From', - }); - await expect(page).toFill( - 'aside.connections-metadata div.search-box > div > input', - 'artavia', - { delay: 100 } - ); - await expect(page).toClick('div.copy-from .item-info', { text: 'Artavia Murillo et al' }); - await expect(page).toClick('button', { text: 'Copy Highlighted' }); - await expect(page).toClick( - 'div.btn-cluster:nth-child(2) > button:nth-child(2) > span:nth-child(1) ', - { - text: 'Save', - } - ); - await expect(page).toClick('.alert.alert-success'); - await expect(page).toClick('.entity-footer > div > button', { text: 'Save' }); - }); - - it('should check the data', async () => { - await expect(page).toClick('div.item-info', { text: 'Test title' }); - await expect(page).toMatchElement('.metadata-type-relationship > dd:nth-child(2) ', { - text: 'Costa Rica', - }); - await expect(page).toMatchElement('.metadata-type-select > dd:nth-child(2)', { - text: 'Activo', - }); - await expect(page).toMatchElement('.metadata-type-multiselect > dd:nth-child(2)', { - text: 'Derechos reproductivos', - }); - await expect(page).toMatchElement('dl.metadata-type-multidate:nth-child(8) > dd:nth-child(2)', { - text: 'Dec 19, 2011', - }); - }); -}); From 6f592e2b1121824df017d7f1572a0bed89f1de6c Mon Sep 17 00:00:00 2001 From: Santiago Date: Tue, 17 Oct 2023 16:40:55 -0300 Subject: [PATCH 04/14] Revert "migrate e2e to cypress" This reverts commit b1dae8693c6a2e24c166bbf0ddc571c0b04e8646. --- cypress/e2e/copy-from.cy.ts | 118 ----------------------------------- e2e/suite1/copy-from.test.ts | 76 ++++++++++++++++++++++ 2 files changed, 76 insertions(+), 118 deletions(-) delete mode 100644 cypress/e2e/copy-from.cy.ts create mode 100644 e2e/suite1/copy-from.test.ts diff --git a/cypress/e2e/copy-from.cy.ts b/cypress/e2e/copy-from.cy.ts deleted file mode 100644 index 192f22c35b..0000000000 --- a/cypress/e2e/copy-from.cy.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { clearCookiesAndLogin } from './helpers/login'; - -describe('Copy from entity', () => { - before(() => { - const env = { DATABASE_NAME: 'uwazi_e2e', INDEX_NAME: 'uwazi_e2e' }; - cy.exec('yarn e2e-puppeteer-fixtures', { env }); - clearCookiesAndLogin(); - }); - - describe('Creating a new entity', () => { - it('should copy the metadata from an existing entity to create a new one', () => { - cy.contains('button', 'Create entity').click(); - cy.get('[name="library.sidepanel.metadata.title"]').type('New orden de la corte'); - cy.get('#metadataForm').find('select').select('Ordenes de la corte'); - cy.get('#metadataForm').find('.form-group.select').find('select').select('d3b1s0w3lzi'); - - cy.contains('button', 'Copy From').click(); - cy.get('div.copy-from').within(() => { - cy.get('input').type( - 'Artavia Murillo y otros. Resolución de la CorteIDH de 26 de febrero de 2016' - ); - cy.contains( - '.item-name', - 'Artavia Murillo y otros. Resolución de la CorteIDH de 26 de febrero de 2016' - ).click(); - cy.contains('button', 'Copy Highlighted').click(); - }); - cy.get('div.copy-from').should('not.exist'); - - cy.contains('button', 'Save').click(); - }); - - it('should view the new entity', () => { - cy.contains('Entity created').click(); - cy.contains('h2', 'New orden de la corte').click(); - cy.get('.side-panel.metadata-sidepanel.is-active').within(() => { - cy.contains('a', 'View').click(); - }); - cy.contains('h1', 'New orden de la corte'); - }); - - it('should check the data for the new entity', () => { - cy.get('.entity-metadata').within(() => { - cy.get('.metadata-name-mecanismo').within(() => { - cy.contains('Corte Interamericana de Derechos Humanos'); - }); - - cy.get('.metadata-name-fecha').within(() => { - cy.contains('Feb 26, 2016'); - }); - - cy.get('.metadata-name-pa_s').within(() => { - cy.contains('Costa Rica'); - }); - - cy.get('.metadata-name-firmantes').within(() => { - cy.contains('Alberto Pérez Pérez'); - cy.contains('Diego García-Sayán'); - cy.contains('Eduardo Ferrer Mac-Gregor Poisot'); - cy.contains('Eduardo Vio Grossi'); - cy.contains('Humberto Antonio Sierra Porto'); - cy.contains('Roberto de Figueiredo Caldas'); - }); - - cy.get('.metadata-name-tipo').within(() => { - cy.contains('Supervisión de cumplimiento de Sentencia'); - }); - - cy.get('.metadata-name-categor_a').within(() => { - cy.contains('Categoría 1'); - }); - }); - }); - }); - - // describe('editing an existing entity', () => { - // it('should edit an entity by using copy from', () => { - // cy.contains('a', 'Library').click(); - // cy.contains( - // 'h2', - // 'Artavia Murillo y otros. Resolución de la CorteIDH de 26 de febrero de 2016' - // ).click(); - // cy.contains('button', 'Edit').click(); - // cy.contains('button', 'Copy From').click(); - - // cy.get('div.copy-from').within(() => { - // cy.get('input').type( - // 'Apitz Barbera y otros. Resolución de la Presidenta de 18 de diciembre de 2009' - // ); - // cy.contains( - // '.item-name', - // 'Apitz Barbera y otros. Resolución de la Presidenta de 18 de diciembre de 2009' - // ).click(); - // cy.contains('button', 'Copy Highlighted').click(); - // }); - // cy.get('div.copy-from').should('not.exist'); - - // cy.get('[name="library.sidepanel.metadata.title"]').clear(); - // cy.get('[name="library.sidepanel.metadata.title"]').type('Edited orden de la corte'); - // cy.get('#metadataForm') - // .contains('.multiselectItem-name', 'Comisión Interamericana de Derechos Humanos') - // .click(); - - // cy.contains('button', 'Save').click(); - // }); - - // it('should view the edited entity', () => { - // cy.contains('Entity updated').click(); - // cy.contains('h2', 'Edited orden de la corte').click(); - // cy.get('.side-panel.metadata-sidepanel.is-active').within(() => { - // cy.contains('a', 'View').click(); - // }); - // cy.contains('h1', 'Edited orden de la corte'); - // }); - - // it('should check the data for the edited entity', () => {}); - // }); -}); diff --git a/e2e/suite1/copy-from.test.ts b/e2e/suite1/copy-from.test.ts new file mode 100644 index 0000000000..b2fb41df61 --- /dev/null +++ b/e2e/suite1/copy-from.test.ts @@ -0,0 +1,76 @@ +import { adminLogin, logout } from '../helpers/login'; +import proxyMock from '../helpers/proxyMock'; +import insertFixtures from '../helpers/insertFixtures'; +import disableTransitions from '../helpers/disableTransitions'; +import { host } from '../config'; + +describe('Copy from', () => { + beforeAll(async () => { + await insertFixtures(); + await proxyMock(); + await adminLogin(); + await page.goto(`${host}/library`); + await disableTransitions(); + }); + + afterAll(async () => { + await logout(); + }); + + it('should create a new entity', async () => { + await expect(page).toClick( + 'div.item-document:nth-child(3) > div:nth-child(1) > h2:nth-child(1)', + { text: 'Artavia Murillo y otros' } + ); + await expect(page).toClick('.sidepanel-footer > .btn-cluster > a', { text: 'View' }); + await expect(page).toClick('.tab-link', { + text: 'Relationships', + }); + await expect(page).toClick('.entity-footer > .btn-cluster > .edit-metadata', { text: 'Edit' }); + await expect(page).toClick('button', { + text: 'Add entities / documents', + }); + await expect(page).toClick('button', { + text: 'Create Entity', + }); + await expect(page).toFill('textarea[name="relationships.metadata.title"]', 'Test title'); + await expect(page).toSelect('select', 'Causa'); + }); + + it('should copy the metadata from an existing entity', async () => { + await expect(page).toClick('button', { + text: 'Copy From', + }); + await expect(page).toFill( + 'aside.connections-metadata div.search-box > div > input', + 'artavia', + { delay: 100 } + ); + await expect(page).toClick('div.copy-from .item-info', { text: 'Artavia Murillo et al' }); + await expect(page).toClick('button', { text: 'Copy Highlighted' }); + await expect(page).toClick( + 'div.btn-cluster:nth-child(2) > button:nth-child(2) > span:nth-child(1) ', + { + text: 'Save', + } + ); + await expect(page).toClick('.alert.alert-success'); + await expect(page).toClick('.entity-footer > div > button', { text: 'Save' }); + }); + + it('should check the data', async () => { + await expect(page).toClick('div.item-info', { text: 'Test title' }); + await expect(page).toMatchElement('.metadata-type-relationship > dd:nth-child(2) ', { + text: 'Costa Rica', + }); + await expect(page).toMatchElement('.metadata-type-select > dd:nth-child(2)', { + text: 'Activo', + }); + await expect(page).toMatchElement('.metadata-type-multiselect > dd:nth-child(2)', { + text: 'Derechos reproductivos', + }); + await expect(page).toMatchElement('dl.metadata-type-multidate:nth-child(8) > dd:nth-child(2)', { + text: 'Dec 19, 2011', + }); + }); +}); From e27a694e360e3315a5039da098019aa790621ebb Mon Sep 17 00:00:00 2001 From: Santiago <71732018+Zasa-san@users.noreply.github.com> Date: Thu, 19 Oct 2023 16:20:13 -0300 Subject: [PATCH 05/14] Copy from field behavior fixes (#6209) * pass the original entity to copyfrom form * migrate test to cypress * use formState to avoid losing user inputs * format entity before updating it * continue with e2e tests * refactor component * updated expected value in test * type correction --- app/react/Entities/components/EntityViewer.js | 2 +- .../Metadata/components/CopyFromEntity.tsx | 41 ++++-- .../components/specs/CopyFromEntity.spec.tsx | 10 +- cypress/e2e/copy-from.cy.ts | 135 ++++++++++++++++++ e2e/suite1/copy-from.test.ts | 76 ---------- 5 files changed, 173 insertions(+), 91 deletions(-) create mode 100644 cypress/e2e/copy-from.cy.ts delete mode 100644 e2e/suite1/copy-from.test.ts diff --git a/app/react/Entities/components/EntityViewer.js b/app/react/Entities/components/EntityViewer.js index e7fe1606df..dead05089e 100644 --- a/app/react/Entities/components/EntityViewer.js +++ b/app/react/Entities/components/EntityViewer.js @@ -342,7 +342,7 @@ class EntityViewer extends Component {

>; - originalEntity: EntitySchema; + originalEntity: ClientEntitySchema; formModel: string; }; type CopyFromEntityState = { - selectedEntity: EntitySchema; + selectedEntity: ClientEntitySchema; propsToCopy: Array; lastSearch?: string; }; class CopyFromEntity extends Component { + templates: TemplateSchema[]; + constructor(props: CopyFromEntityProps) { super(props); this.state = { propsToCopy: [], selectedEntity: {}, lastSearch: undefined }; + this.templates = this.props.templates.toJS(); this.onSelect = this.onSelect.bind(this); this.cancel = this.cancel.bind(this); this.copy = this.copy.bind(this); @@ -38,13 +41,12 @@ class CopyFromEntity extends Component this.onFinishedSearch = this.onFinishedSearch.bind(this); } - onSelect(selectedEntity: EntitySchema) { + onSelect(selectedEntity: ClientEntitySchema) { const copyFromTemplateId = selectedEntity.template; - const templates = this.props.templates.toJS(); const originalTemplate = this.props.originalEntity.template; const propsToCopy = comonProperties - .comonProperties(templates, [originalTemplate, copyFromTemplateId], ['generatedid']) + .comonProperties(this.templates, [originalTemplate, copyFromTemplateId], ['generatedid']) .map(p => p.name); this.setState({ selectedEntity, propsToCopy }); @@ -60,20 +62,33 @@ class CopyFromEntity extends Component return; } + const entityTemplate = this.templates.find( + template => template._id === this.props.originalEntity.template + ); + + const originalEntity: ClientEntitySchema = wrapEntityMetadata( + this.props.originalEntity, + entityTemplate + ); + const updatedEntity = this.state.propsToCopy.reduce( - (entity: EntitySchema, propName: string) => { + (entity: ClientEntitySchema, propName: string) => { if (!entity.metadata) { - entity.metadata = {}; + return { ...entity, metadata: {} }; } - entity.metadata[propName] = this.state.selectedEntity.metadata![propName]; - return entity; + const updatedMetadata = this.state.selectedEntity.metadata![propName]; + + return { + ...entity, + metadata: { ...entity.metadata, [propName]: updatedMetadata }, + }; }, - { ...this.props.originalEntity, metadata: { ...this.props.originalEntity.metadata } } + { ...originalEntity } ); actions - .loadFetchedInReduxForm(this.props.formModel, updatedEntity, this.props.templates.toJS()) + .loadFetchedInReduxForm(this.props.formModel, updatedEntity, this.templates) .forEach(action => store?.dispatch(action)); this.props.onSelect([]); diff --git a/app/react/Metadata/components/specs/CopyFromEntity.spec.tsx b/app/react/Metadata/components/specs/CopyFromEntity.spec.tsx index 4ad6aa8155..36ebf357ac 100644 --- a/app/react/Metadata/components/specs/CopyFromEntity.spec.tsx +++ b/app/react/Metadata/components/specs/CopyFromEntity.spec.tsx @@ -95,7 +95,15 @@ describe('CopyFromEntity', () => { silent: true, type: 'rrf/change', value: { - metadata: { one: 'number one', two: 'number two', id: 'ABC123' }, + metadata: { + id: { + value: 'ABC123', + }, + one: { + value: 'number one', + }, + two: 'number two', + }, template: 'template_1', title: 'I want to be like you', }, diff --git a/cypress/e2e/copy-from.cy.ts b/cypress/e2e/copy-from.cy.ts new file mode 100644 index 0000000000..c2827f49ea --- /dev/null +++ b/cypress/e2e/copy-from.cy.ts @@ -0,0 +1,135 @@ +import { clearCookiesAndLogin } from './helpers/login'; + +describe('Copy from entity', () => { + before(() => { + const env = { DATABASE_NAME: 'uwazi_e2e', INDEX_NAME: 'uwazi_e2e' }; + cy.exec('yarn e2e-puppeteer-fixtures', { env }); + clearCookiesAndLogin(); + }); + + describe('Creating a new entity', () => { + it('should copy the metadata from an existing entity to create a new one', () => { + cy.contains('button', 'Create entity').click(); + cy.get('[name="library.sidepanel.metadata.title"]').type('New orden de la corte'); + cy.get('#metadataForm').find('select').select('Ordenes de la corte'); + cy.get('#metadataForm').find('.form-group.select').find('select').select('d3b1s0w3lzi'); + + cy.contains('button', 'Copy From').click(); + cy.get('div.copy-from').within(() => { + cy.get('input').type( + 'Artavia Murillo y otros. Resolución de la CorteIDH de 26 de febrero de 2016' + ); + cy.contains( + '.item-name', + 'Artavia Murillo y otros. Resolución de la CorteIDH de 26 de febrero de 2016' + ).click(); + cy.contains('button', 'Copy Highlighted').click(); + }); + cy.get('div.copy-from').should('not.exist'); + + cy.contains('button', 'Save').click(); + }); + + it('should view the new entity', () => { + cy.contains('Entity created').click(); + cy.contains('h2', 'New orden de la corte').click(); + cy.get('.side-panel.metadata-sidepanel.is-active').within(() => { + cy.contains('a', 'View').click(); + }); + cy.contains('h1', 'New orden de la corte'); + }); + + it('should check the data for the new entity', () => { + cy.get('.entity-metadata').within(() => { + cy.get('.metadata-name-mecanismo').within(() => { + cy.contains('Corte Interamericana de Derechos Humanos'); + }); + + cy.get('.metadata-name-fecha').within(() => { + cy.contains('Feb 26, 2016'); + }); + + cy.get('.metadata-name-pa_s').within(() => { + cy.contains('Costa Rica'); + }); + + cy.get('.metadata-name-firmantes').within(() => { + cy.contains('Alberto Pérez Pérez'); + cy.contains('Diego García-Sayán'); + cy.contains('Eduardo Ferrer Mac-Gregor Poisot'); + cy.contains('Eduardo Vio Grossi'); + cy.contains('Humberto Antonio Sierra Porto'); + cy.contains('Roberto de Figueiredo Caldas'); + }); + + cy.get('.metadata-name-tipo').within(() => { + cy.contains('Supervisión de cumplimiento de Sentencia'); + }); + + cy.get('.metadata-name-categor_a').within(() => { + cy.contains('Categoría 1'); + }); + }); + }); + }); + + describe('editing an existing entity', () => { + it('should edit an entity by using copy from', () => { + cy.contains('a', 'Library').click(); + cy.contains( + 'h2', + 'Artavia Murillo y otros. Resolución de la CorteIDH de 26 de febrero de 2016' + ).click(); + cy.contains('button', 'Edit').click(); + cy.contains('button', 'Copy From').click(); + + cy.get('div.copy-from').within(() => { + cy.get('input').type( + 'Apitz Barbera y otros. Resolución de la Presidenta de 18 de diciembre de 2009' + ); + cy.contains( + '.item-name', + 'Apitz Barbera y otros. Resolución de la Presidenta de 18 de diciembre de 2009' + ).click(); + cy.contains('button', 'Copy Highlighted').click(); + }); + cy.get('div.copy-from').should('not.exist'); + + cy.get('[name="library.sidepanel.metadata.title"]').clear(); + cy.get('[name="library.sidepanel.metadata.title"]').type('Edited orden de la corte'); + cy.get('#metadataForm') + .contains('.multiselectItem-name', 'Comisión Interamericana de Derechos Humanos') + .click(); + + cy.contains('button', 'Save').click(); + }); + + it('should view the edited entity', () => { + cy.contains('Entity updated').click(); + cy.contains('h2', 'Edited orden de la corte').click(); + cy.get('.side-panel.metadata-sidepanel.is-active').within(() => { + cy.contains('a', 'View').click(); + }); + cy.contains('h1', 'Edited orden de la corte'); + }); + + it('should check the data for the edited entity', () => { + cy.get('.metadata.tab-content-visible').within(() => { + cy.contains('h1', 'Edited orden de la corte'); + + cy.get('.metadata-name-mecanismo').within(() => { + cy.contains('Comisión Interamericana de Derechos Humanos'); + cy.contains('Corte Interamericana de Derechos Humanos'); + }); + + cy.get('.metadata-name-fecha').contains('Dec 1, 2018'); + + cy.get('.metadata-name-pa_s').contains('Venezuela'); + + cy.get('.metadata-name-firmantes').contains('Cecilia Medina Quiroga'); + + cy.get('.metadata-name-tipo').contains('Supervisión de cumplimiento de Sentencia'); + }); + }); + }); +}); diff --git a/e2e/suite1/copy-from.test.ts b/e2e/suite1/copy-from.test.ts deleted file mode 100644 index b2fb41df61..0000000000 --- a/e2e/suite1/copy-from.test.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { adminLogin, logout } from '../helpers/login'; -import proxyMock from '../helpers/proxyMock'; -import insertFixtures from '../helpers/insertFixtures'; -import disableTransitions from '../helpers/disableTransitions'; -import { host } from '../config'; - -describe('Copy from', () => { - beforeAll(async () => { - await insertFixtures(); - await proxyMock(); - await adminLogin(); - await page.goto(`${host}/library`); - await disableTransitions(); - }); - - afterAll(async () => { - await logout(); - }); - - it('should create a new entity', async () => { - await expect(page).toClick( - 'div.item-document:nth-child(3) > div:nth-child(1) > h2:nth-child(1)', - { text: 'Artavia Murillo y otros' } - ); - await expect(page).toClick('.sidepanel-footer > .btn-cluster > a', { text: 'View' }); - await expect(page).toClick('.tab-link', { - text: 'Relationships', - }); - await expect(page).toClick('.entity-footer > .btn-cluster > .edit-metadata', { text: 'Edit' }); - await expect(page).toClick('button', { - text: 'Add entities / documents', - }); - await expect(page).toClick('button', { - text: 'Create Entity', - }); - await expect(page).toFill('textarea[name="relationships.metadata.title"]', 'Test title'); - await expect(page).toSelect('select', 'Causa'); - }); - - it('should copy the metadata from an existing entity', async () => { - await expect(page).toClick('button', { - text: 'Copy From', - }); - await expect(page).toFill( - 'aside.connections-metadata div.search-box > div > input', - 'artavia', - { delay: 100 } - ); - await expect(page).toClick('div.copy-from .item-info', { text: 'Artavia Murillo et al' }); - await expect(page).toClick('button', { text: 'Copy Highlighted' }); - await expect(page).toClick( - 'div.btn-cluster:nth-child(2) > button:nth-child(2) > span:nth-child(1) ', - { - text: 'Save', - } - ); - await expect(page).toClick('.alert.alert-success'); - await expect(page).toClick('.entity-footer > div > button', { text: 'Save' }); - }); - - it('should check the data', async () => { - await expect(page).toClick('div.item-info', { text: 'Test title' }); - await expect(page).toMatchElement('.metadata-type-relationship > dd:nth-child(2) ', { - text: 'Costa Rica', - }); - await expect(page).toMatchElement('.metadata-type-select > dd:nth-child(2)', { - text: 'Activo', - }); - await expect(page).toMatchElement('.metadata-type-multiselect > dd:nth-child(2)', { - text: 'Derechos reproductivos', - }); - await expect(page).toMatchElement('dl.metadata-type-multidate:nth-child(8) > dd:nth-child(2)', { - text: 'Dec 19, 2011', - }); - }); -}); From 401ce40daab525dcd90f90505e9f2611d4b56fbc Mon Sep 17 00:00:00 2001 From: Alberto Casado Torres Date: Fri, 20 Oct 2023 14:14:53 +0200 Subject: [PATCH 06/14] Updated migration 147 to use the new translations structure (#6201) * Updated migration 147 to use the new translations structure * update compare translations script * revert variable destructuring * fixed migration errors * fixed migrastions numbers * correct order of migrations --------- Co-authored-by: mfacar --- .../index.js | 2 +- .../147-remove_obsolete_mongo_index.spec.js} | 2 +- .../specs/fixtures.js | 0 .../147-update_translations/index.js | 108 ---------------- .../specs/147-update_translations.spec.js | 75 ------------ .../147-update_translations/specs/fixtures.js | 115 ------------------ .../148-update_translations/index.js | 80 ++++++++++++ .../specs/148-update_translations.spec.js | 46 +++++++ .../148-update_translations/specs/fixtures.js | 51 ++++++++ scripts/compareTranslations.js | 33 +++-- 10 files changed, 194 insertions(+), 318 deletions(-) rename app/api/migrations/migrations/{146-remove_obsolete_mongo_index => 147-remove_obsolete_mongo_index}/index.js (98%) rename app/api/migrations/migrations/{146-remove_obsolete_mongo_index/specs/146-remove_obsolete_mongo_index.spec.js => 147-remove_obsolete_mongo_index/specs/147-remove_obsolete_mongo_index.spec.js} (98%) rename app/api/migrations/migrations/{146-remove_obsolete_mongo_index => 147-remove_obsolete_mongo_index}/specs/fixtures.js (100%) delete mode 100644 app/api/migrations/migrations/147-update_translations/index.js delete mode 100644 app/api/migrations/migrations/147-update_translations/specs/147-update_translations.spec.js delete mode 100644 app/api/migrations/migrations/147-update_translations/specs/fixtures.js create mode 100644 app/api/migrations/migrations/148-update_translations/index.js create mode 100644 app/api/migrations/migrations/148-update_translations/specs/148-update_translations.spec.js create mode 100644 app/api/migrations/migrations/148-update_translations/specs/fixtures.js diff --git a/app/api/migrations/migrations/146-remove_obsolete_mongo_index/index.js b/app/api/migrations/migrations/147-remove_obsolete_mongo_index/index.js similarity index 98% rename from app/api/migrations/migrations/146-remove_obsolete_mongo_index/index.js rename to app/api/migrations/migrations/147-remove_obsolete_mongo_index/index.js index 4cde56b82a..69d109e5b2 100644 --- a/app/api/migrations/migrations/146-remove_obsolete_mongo_index/index.js +++ b/app/api/migrations/migrations/147-remove_obsolete_mongo_index/index.js @@ -11,7 +11,7 @@ const handleCollection = async (collection, indexNames) => { }; export default { - delta: 146, + delta: 147, name: 'remove_obsolete_mongo_index', diff --git a/app/api/migrations/migrations/146-remove_obsolete_mongo_index/specs/146-remove_obsolete_mongo_index.spec.js b/app/api/migrations/migrations/147-remove_obsolete_mongo_index/specs/147-remove_obsolete_mongo_index.spec.js similarity index 98% rename from app/api/migrations/migrations/146-remove_obsolete_mongo_index/specs/146-remove_obsolete_mongo_index.spec.js rename to app/api/migrations/migrations/147-remove_obsolete_mongo_index/specs/147-remove_obsolete_mongo_index.spec.js index 6ff488671c..aa07cb03d3 100644 --- a/app/api/migrations/migrations/146-remove_obsolete_mongo_index/specs/146-remove_obsolete_mongo_index.spec.js +++ b/app/api/migrations/migrations/147-remove_obsolete_mongo_index/specs/147-remove_obsolete_mongo_index.spec.js @@ -33,7 +33,7 @@ describe('migration remove_obsolete_mongo_index', () => { }); it('should have a delta number', () => { - expect(migration.delta).toBe(146); + expect(migration.delta).toBe(147); }); it('should remove the targeted indices', async () => { diff --git a/app/api/migrations/migrations/146-remove_obsolete_mongo_index/specs/fixtures.js b/app/api/migrations/migrations/147-remove_obsolete_mongo_index/specs/fixtures.js similarity index 100% rename from app/api/migrations/migrations/146-remove_obsolete_mongo_index/specs/fixtures.js rename to app/api/migrations/migrations/147-remove_obsolete_mongo_index/specs/fixtures.js diff --git a/app/api/migrations/migrations/147-update_translations/index.js b/app/api/migrations/migrations/147-update_translations/index.js deleted file mode 100644 index 98b3dcded8..0000000000 --- a/app/api/migrations/migrations/147-update_translations/index.js +++ /dev/null @@ -1,108 +0,0 @@ -const newKeys = [ - { key: 'Suggestion accepted.' }, - { key: 'Showing' }, - { key: 'Accept suggestion' }, - { key: 'Stats & Filters' }, - { key: 'Labeled' }, - { key: 'Non-labeled' }, - { key: 'Pending' }, - { key: 'Clear all' }, - { key: 'Apply' }, - { key: 'Current value:' }, - { key: 'Suggestion:' }, - { key: 'Current Value/Suggestion' }, - { key: 'No context' }, -]; - -const deletedKeys = [ - { key: 'Reviewing' }, - { key: 'Confirm suggestion acceptance' }, - { key: 'Apply to all languages' }, - { key: 'Back to dashboard' }, - { key: 'Match / Label' }, - { key: 'Mismatch / Label' }, - { key: 'Match / Value' }, - { key: 'Mismatch / Value' }, - { key: 'Empty / Label' }, - { key: 'Empty / Value' }, - { key: 'State Legend' }, - { key: 'labelMatchDesc' }, - { key: 'labelMismatchDesc' }, - { key: 'labelEmptyDesc' }, - { key: 'valueMatchDesc' }, - { key: 'valueMismatchDesc' }, - { key: 'valueEmptyDesc' }, - { key: 'obsoleteDesc' }, - { key: 'emptyDesc' }, - { key: 'This will update the entity across all languages' }, - { key: 'Mismatch / Empty' }, - { key: 'Empty / Empty' }, - { key: 'emptyMismatchDesc' }, - { key: 'Non-matching' }, - { key: 'Empty / Obsolete' }, - { key: 'This will cancel the finding suggestion process' }, - { key: 'Add properties' }, - { key: 'Show Filters' }, -]; -const updateTranslation = (currentTranslation, keysToUpdate, loc) => { - const translation = { ...currentTranslation }; - const newTranslation = keysToUpdate.find(row => row.key === currentTranslation.key); - if (newTranslation) { - translation.key = newTranslation.newKey; - if (loc === 'en' || currentTranslation.value === newTranslation.oldValue) { - translation.value = newTranslation.newValue; - } - } - return translation; -}; - -export default { - delta: 147, - - reindex: false, - - name: 'update_translations', - - description: 'Updates some translations for new User/Groups UI in settings', - - async up(db) { - const keysToInsert = newKeys; - const keysToDelete = deletedKeys; - const translations = await db.collection('translations').find().toArray(); - const locToSystemContext = {}; - translations.forEach(tr => { - locToSystemContext[tr.locale] = tr.contexts.find(c => c.id === 'System'); - }); - - const alreadyInDB = []; - Object.entries(locToSystemContext).forEach(([loc, context]) => { - const contextValues = context.values.reduce((newValues, currentTranslation) => { - const deleted = keysToDelete.find( - deletedTranslation => deletedTranslation.key === currentTranslation.key - ); - if (!deleted) { - const translation = updateTranslation(currentTranslation, [], loc); - newValues.push(translation); - } - keysToInsert.forEach(newEntry => { - if (newEntry.key === currentTranslation.key) { - alreadyInDB.push(currentTranslation.key); - } - }); - return newValues; - }, []); - keysToInsert - .filter(k => !alreadyInDB.includes(k.key)) - .forEach(newEntry => { - contextValues.push({ key: newEntry.key, value: newEntry.key }); - }); - context.values = contextValues; - }); - - await Promise.all( - translations.map(tr => db.collection('translations').replaceOne({ _id: tr._id }, tr)) - ); - - process.stdout.write(`${this.name}...\r\n`); - }, -}; diff --git a/app/api/migrations/migrations/147-update_translations/specs/147-update_translations.spec.js b/app/api/migrations/migrations/147-update_translations/specs/147-update_translations.spec.js deleted file mode 100644 index 8c347dea29..0000000000 --- a/app/api/migrations/migrations/147-update_translations/specs/147-update_translations.spec.js +++ /dev/null @@ -1,75 +0,0 @@ -import testingDB from 'api/utils/testing_db'; -import migration from '../index.js'; -import fixtures, { templateContext } from './fixtures.js'; - -describe('migration update translations of settings new Users/Groups UI', () => { - beforeEach(async () => { - jest.spyOn(process.stdout, 'write').mockImplementation(() => {}); - await testingDB.setupFixturesAndContext(fixtures); - }); - - afterAll(async () => { - await testingDB.disconnect(); - }); - - it('should have a delta number', () => { - expect(migration.delta).toBe(147); - }); - - it('should update the keys that have changed', async () => { - await migration.up(testingDB.mongodb); - const allTranslations = await testingDB.mongodb.collection('translations').find().toArray(); - - const uwaziUI = allTranslations.filter(tr => - tr.contexts.filter(ctx => ctx.type === 'Uwazi UI') - ); - - const previousSystemValues = { - key: 'existing-key-in-system', - value: 'existing-key-in-system', - }; - - const addedKeys = [ - expect.objectContaining({ - key: 'Suggestion accepted.', - value: 'Suggestion accepted.', - }), - expect.objectContaining({ - key: 'Accept suggestion', - value: 'Accept suggestion', - }), - expect.objectContaining({ - key: 'Showing', - value: 'Showing', - }), - expect.objectContaining({ - key: 'Stats & Filters', - value: 'Stats & Filters', - }), - ]; - const defaultContextContent = expect.objectContaining({ - type: 'Uwazi UI', - values: expect.arrayContaining([previousSystemValues, ...addedKeys]), - }); - expect(uwaziUI).toMatchObject([ - expect.objectContaining({ - locale: 'en', - contexts: [defaultContextContent, templateContext], - }), - expect.objectContaining({ - locale: 'es', - contexts: [ - expect.objectContaining({ - type: 'Uwazi UI', - values: expect.arrayContaining([previousSystemValues, ...addedKeys]), - }), - templateContext, - ], - }), - expect.objectContaining({ - locale: 'pt', - contexts: [defaultContextContent, templateContext], - }), - ]); - }); -}); diff --git a/app/api/migrations/migrations/147-update_translations/specs/fixtures.js b/app/api/migrations/migrations/147-update_translations/specs/fixtures.js deleted file mode 100644 index f9a29257a5..0000000000 --- a/app/api/migrations/migrations/147-update_translations/specs/fixtures.js +++ /dev/null @@ -1,115 +0,0 @@ -import db from 'api/utils/testing_db'; - -const templateContext = { - id: db.id(), - label: 'default template', - type: 'Entity', - values: [ - { - key: 'default template', - value: 'default template', - }, - { - key: 'Title', - value: 'Title', - }, - ], -}; - -const fixturesDB = { - translations: [ - { - _id: db.id(), - locale: 'en', - contexts: [ - { - _id: db.id(), - type: 'Uwazi UI', - label: 'User Interface', - id: 'System', - values: [ - { - key: 'existing-key-in-system', - value: 'existing-key-in-system', - }, - { - _id: db.id(), - key: 'Can not delete template:', - value: 'Can not delete template: changed', - }, - { - _id: db.id(), - key: '- Site page:', - value: '- Site page:', - }, - { _id: db.id(), key: 'Document OCR trigger', value: 'Document OCR trigger' }, - ], - }, - templateContext, - ], - }, - { - _id: db.id(), - locale: 'es', - contexts: [ - { - _id: db.id(), - type: 'Uwazi UI', - label: 'User Interface', - id: 'System', - values: [ - { - key: 'existing-key-in-system', - value: 'existing-key-in-system', - }, - { - _id: db.id(), - key: 'Confirm delete relationship type:', - value: 'Confirmar eliminación de tipo de relación:', - }, - { - _id: db.id(), - key: '- Site page:', - value: '- Sito:', - }, - { _id: db.id(), key: 'Document OCR trigger', value: 'Document OCR trigger' }, - ], - }, - templateContext, - ], - }, - { - _id: db.id(), - locale: 'pt', - contexts: [ - { - _id: db.id(), - type: 'Uwazi UI', - label: 'User Interface', - id: 'System', - values: [ - { - key: 'existing-key-in-system', - value: 'existing-key-in-system', - }, - { - _id: db.id(), - key: 'Can not delete template:', - value: 'Can not delete template:', - }, - { - _id: db.id(), - key: '- Site page:', - value: '- Site page:', - }, - { _id: db.id(), key: 'Document OCR trigger', value: 'Document OCR trigger' }, - ], - }, - templateContext, - ], - }, - ], -}; - -export { templateContext }; -export default fixturesDB; diff --git a/app/api/migrations/migrations/148-update_translations/index.js b/app/api/migrations/migrations/148-update_translations/index.js new file mode 100644 index 0000000000..573009443e --- /dev/null +++ b/app/api/migrations/migrations/148-update_translations/index.js @@ -0,0 +1,80 @@ +const newKeys = [ + { key: 'Suggestion accepted.' }, + { key: 'Showing' }, + { key: 'Accept suggestion' }, + { key: 'Stats & Filters' }, + { key: 'Labeled' }, + { key: 'Non-labeled' }, + { key: 'Pending' }, + { key: 'Clear all' }, + { key: 'Apply' }, + { key: 'Current value:' }, + { key: 'Suggestion:' }, + { key: 'Current Value/Suggestion' }, + { key: 'No context' }, +]; + +const deletedKeys = [ + { key: 'Reviewing' }, + { key: 'Confirm suggestion acceptance' }, + { key: 'Apply to all languages' }, + { key: 'Back to dashboard' }, + { key: 'Match / Label' }, + { key: 'Mismatch / Label' }, + { key: 'Match / Value' }, + { key: 'Mismatch / Value' }, + { key: 'Empty / Label' }, + { key: 'Empty / Value' }, + { key: 'State Legend' }, + { key: 'labelMatchDesc' }, + { key: 'labelMismatchDesc' }, + { key: 'labelEmptyDesc' }, + { key: 'valueMatchDesc' }, + { key: 'valueMismatchDesc' }, + { key: 'valueEmptyDesc' }, + { key: 'obsoleteDesc' }, + { key: 'emptyDesc' }, + { key: 'This will update the entity across all languages' }, + { key: 'Mismatch / Empty' }, + { key: 'Empty / Empty' }, + { key: 'emptyMismatchDesc' }, + { key: 'Non-matching' }, + { key: 'Empty / Obsolete' }, + { key: 'This will cancel the finding suggestion process' }, + { key: 'Add properties' }, + { key: 'Show Filters' }, +]; + +export default { + delta: 148, + + reindex: false, + + name: 'update_translations', + + description: 'Updates some translations for new User/Groups UI in settings', + + async up(db) { + const settings = await db.collection('settings').findOne(); + const languages = settings.languages.map(l => l.key); + await db + .collection('translationsV2') + .deleteMany({ key: { $in: deletedKeys.map(k => k.key) }, 'context.id': 'System' }); + + const insertMany = languages.map(l => + db.collection('translationsV2').insertMany( + newKeys.map(k => ({ + key: k.key, + value: k.key, + language: l, + context: { id: 'System', type: 'Uwazi UI', label: 'User Interface' }, + })) + ) + ); + await Promise.all(insertMany); + + process.stdout.write(`${this.name}...\r\n`); + }, +}; + +export { newKeys, deletedKeys }; diff --git a/app/api/migrations/migrations/148-update_translations/specs/148-update_translations.spec.js b/app/api/migrations/migrations/148-update_translations/specs/148-update_translations.spec.js new file mode 100644 index 0000000000..c9a9cd8393 --- /dev/null +++ b/app/api/migrations/migrations/148-update_translations/specs/148-update_translations.spec.js @@ -0,0 +1,46 @@ +import testingDB from 'api/utils/testing_db'; +import migration, { newKeys, deletedKeys } from '../index.js'; +import fixtures from './fixtures.js'; + +describe('migration update translations of settings new Users/Groups UI', () => { + beforeAll(async () => { + jest.spyOn(process.stdout, 'write').mockImplementation(() => {}); + await testingDB.setupFixturesAndContext(fixtures); + await migration.up(testingDB.mongodb); + }); + + afterAll(async () => { + await testingDB.disconnect(); + }); + + it('should have a delta number', () => { + expect(migration.delta).toBe(148); + }); + + it('should delete old translations', async () => { + const translations = await testingDB.mongodb + .collection('translationsV2') + .find({ key: { $in: deletedKeys.map(k => k.key) } }) + .toArray(); + + expect(translations).toEqual([]); + }); + + it('should NOT delete other translations', async () => { + const translations = await testingDB.mongodb + .collection('translationsV2') + .find({ key: 'Im cool' }) + .toArray(); + + expect(translations.length).toBe(2); + }); + + it('should add new translations per language', async () => { + const translations = await testingDB.mongodb + .collection('translationsV2') + .find({ key: { $in: newKeys.map(k => k.key) } }) + .toArray(); + + expect(translations.length).toBe(newKeys.length * fixtures.settings[0].languages.length); + }); +}); diff --git a/app/api/migrations/migrations/148-update_translations/specs/fixtures.js b/app/api/migrations/migrations/148-update_translations/specs/fixtures.js new file mode 100644 index 0000000000..488d6db7b5 --- /dev/null +++ b/app/api/migrations/migrations/148-update_translations/specs/fixtures.js @@ -0,0 +1,51 @@ +import db from 'api/utils/testing_db'; + +const fixturesDB = { + settings: [{ _id: db.id(), languages: [{ key: 'en' }, { key: 'es' }] }], + translationsV2: [ + { + _id: db.id(), + language: 'en', + context: { id: 'System', label: 'User Interface', type: 'Uwazi UI' }, + key: 'Match / Label', + value: 'Match / Label', + }, + { + _id: db.id(), + language: 'en', + context: { id: 'System', label: 'User Interface', type: 'Uwazi UI' }, + key: 'Reviewing', + value: 'Reviewing', + }, + { + _id: db.id(), + language: 'es', + context: { id: 'System', label: 'User Interface', type: 'Uwazi UI' }, + key: 'Match / Label', + value: 'Match / Label', + }, + { + _id: db.id(), + language: 'es', + context: { id: 'System', label: 'User Interface', type: 'Uwazi UI' }, + key: 'Reviewing', + value: 'Reviewing', + }, + { + _id: db.id(), + language: 'en', + context: { id: 'System', label: 'User Interface', type: 'Uwazi UI' }, + key: 'Im cool', + value: 'Im cool', + }, + { + _id: db.id(), + language: 'es', + context: { id: 'System', label: 'User Interface', type: 'Uwazi UI' }, + key: 'Im cool', + value: 'Im cool', + }, + ], +}; + +export default fixturesDB; diff --git a/scripts/compareTranslations.js b/scripts/compareTranslations.js index 5902db31b4..5ec028d918 100644 --- a/scripts/compareTranslations.js +++ b/scripts/compareTranslations.js @@ -19,28 +19,24 @@ const getClient = async () => { const getTranslationsFromDB = async () => { const client = await getClient(); const db = client.db(process.env.DATABASE_NAME || 'uwazi_development'); - const translations = await db.collection('translations').find().toArray(); + const translations = await db.collection('translationsV2').find().toArray(); client.close(); - const locToSystemContext = {}; - translations.forEach(tr => { - const context = tr.contexts.find(c => c.id === 'System'); - const [keys, values, keyValues] = context.values.reduce( - (newValues, currentTranslation) => { - newValues[0].push(currentTranslation.key); - newValues[1].push(currentTranslation.value); - // eslint-disable-next-line no-param-reassign - newValues[2] = { ...newValues[2], [currentTranslation.key]: currentTranslation.value }; - return newValues; - }, - [[], [], {}] - ); - locToSystemContext[tr.locale] = { keys, values, keyValues }; - }); + const locToSystemContext = _.mapValues( + _.groupBy( + translations.filter(tr => tr.context.id === 'System'), + 'language' + ), + values => ({ + keys: values.map(tr => tr.key), + values: values.map(tr => tr.value), + keyValues: _.reduce(values, (keyValues, tr) => ({ ...keyValues, [tr.key]: tr.value }), {}), + }) + ); return locToSystemContext; }; -const getAvaiableLanguages = async () => +const getAvailableLanguages = async () => new Promise((resolve, reject) => { fs.readdir(TRANSLATIONS_DIR, (err, files) => { if (err) reject(err); @@ -157,7 +153,7 @@ async function compareTranslations(locale, update, outdir) { const valuesFromDB = dbTranslations.en.values; const dbKeyValues = dbTranslations.en.keyValues; - const languages = locale ? [locale] : await getAvaiableLanguages(); + const languages = locale ? [locale] : await getAvailableLanguages(); const result = await Promise.all( languages.map(language => processLanguage(keysFromDB, valuesFromDB, language)) ); @@ -194,6 +190,7 @@ async function compareTranslations(locale, update, outdir) { } } catch (e) { process.stdout.write(` === An error occurred === \n ${e}\n`); + process.exit(1); } } From b5159be10bdf5ef46ec516cbe7179ee780289918 Mon Sep 17 00:00:00 2001 From: OMKAR MAKHARE Date: Fri, 20 Oct 2023 18:13:35 +0530 Subject: [PATCH 07/14] Remove typo (#6208) Co-authored-by: LaszloKecskes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 011c8de3c2..3cdd18e35a 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ Some suites need MongoDB configured in Replica Set mode to run properly. The pro #### End to End (e2e) -For End-to-End testing, we have a full set of fixtures that test the overall functionality. Be advised that, for the time being, these tests are run ON THE SAME DATABASE as the default database (uwazi_developmet), so running these tests will DELETE any exisisting data and replace it with the testing fixtures. DO NOT RUN ON PRODUCTION ENVIRONMENTS! +For End-to-End testing, we have a full set of fixtures that test the overall functionality. Be advised that, for the time being, these tests are run ON THE SAME DATABASE as the default database (uwazi_developmet), so running these tests will DELETE any existing data and replace it with the testing fixtures. DO NOT RUN ON PRODUCTION ENVIRONMENTS! Running end to end tests require a running Uwazi app. From 2e4bc4bcb5440c20290be80f6238cff6e95cefd0 Mon Sep 17 00:00:00 2001 From: Alberto Casado Torres Date: Fri, 20 Oct 2023 16:33:18 +0200 Subject: [PATCH 08/14] cypres upgrade stabilization (#6167) * Increased wait treshold for the videos to be ready * updated cypress action version * testing wait for snapshot * testing different config * testing with xfvb * fixed action * restored github action * cypress viewport forced before screenshot * snapshots with smaller resolution * updated config and snapshots * keeping viewport heigh consistent * updated snapshot * testing scroll in to view * scrolling for snapshot * testing different ress * disabled animations * previous resolution * updated snapshots * updated snapshots * updated specs * updated snapshots * removed some snapshots * removed screenshot matching * fixed couple of e2e * clearing selection before new selection --- .github/workflows/ci_e2e_cypress.yml | 4 +- cypress.config.ts | 20 ++++++++ ...o an existing entity media property #0.png | Bin 174518 -> 174753 bytes ... media selection on entity creation #0.png | Bin 174518 -> 174749 bytes ...allow to replace it for a valid one #0.png | Bin 174518 -> 174749 bytes cypress/e2e/media-metadata.cy.ts | 46 +++++------------- ...ties should check the first entity #0.png | Bin 26798 -> 27800 bytes ... files should fill the Video field #0.png | Bin 244571 -> 243907 bytes cypress/e2e/pages/public-form.cy.ts | 6 +-- ...splay suggestions and be accessible #0.png | Bin 103000 -> 103193 bytes ... should enter the account settings #0.png | Bin 29002 -> 33054 bytes ...le menu should go back to the menu #0.png | Bin 22181 -> 22712 bytes ...ile menu should only show the menu #0.png | Bin 22181 -> 22712 bytes .../Users accesibility check #0.png | Bin 64165 -> 26002 bytes .../e2e/settings/information-extraction.cy.ts | 4 +- cypress/e2e/settings/languages.cy.ts | 3 -- .../e2e/settings/mobile-settings-menu.cy.ts | 8 +-- cypress/e2e/settings/users.cy.ts | 2 +- package.json | 4 +- 19 files changed, 45 insertions(+), 52 deletions(-) diff --git a/.github/workflows/ci_e2e_cypress.yml b/.github/workflows/ci_e2e_cypress.yml index 76917fe779..7966bdeb1f 100644 --- a/.github/workflows/ci_e2e_cypress.yml +++ b/.github/workflows/ci_e2e_cypress.yml @@ -100,11 +100,11 @@ jobs: run: sleep 5 && wget --waitretry=5 --retry-connrefused -v http://localhost:3000/ timeout-minutes: 2 - name: Cypress run - uses: cypress-io/github-action@v5 + uses: cypress-io/github-action@v6 with: browser: chrome component: false - config: defaultCommandTimeout=8000,requestTimeout=12000 + config-file: cypress.config.ts timeout-minutes: 25 env: DBHOST: localhost:27017 diff --git a/cypress.config.ts b/cypress.config.ts index e1ec1f61d1..2d1fb2dd38 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -6,6 +6,8 @@ const { initPlugin } = require('cypress-plugin-snapshots/plugin'); export default defineConfig({ viewportWidth: 1280, viewportHeight: 768, + defaultCommandTimeout: 10000, + requestTimeout: 12000, e2e: { baseUrl: 'http://localhost:3000', video: true, @@ -27,6 +29,24 @@ export default defineConfig({ } } }); + on('before:browser:launch', (browser, launchOptions) => { + if (browser.name === 'chrome' && browser.isHeadless) { + launchOptions.args.push('--window-size=1280,768'); + launchOptions.args.push('--force-device-scale-factor=1'); + } + + if (browser.name === 'electron' && browser.isHeadless) { + launchOptions.preferences.width = 1280; + launchOptions.preferences.height = 768; + } + + if (browser.name === 'firefox' && browser.isHeadless) { + launchOptions.args.push('--width=1280'); + launchOptions.args.push('--height=768'); + } + + return launchOptions; + }); }, }, component: { diff --git a/cypress/e2e/__image_snapshots__/Media metadata should allow add timelinks to an existing entity media property #0.png b/cypress/e2e/__image_snapshots__/Media metadata should allow add timelinks to an existing entity media property #0.png index c7a8222de242a7a9d08b99cf9cba3ec1a5abcf2d..26399d8d8b6b03cbfe62337d2ddf1e2f6b87e80a 100644 GIT binary patch delta 169988 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%0D#`>z0%1^^&01#7FPZ8eE!b{cY^p?&eupr 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