Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/production' into staging
Browse files Browse the repository at this point in the history
  • Loading branch information
daneryl committed Sep 27, 2024
2 parents a16ac90 + 05cd042 commit 4b93f32
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant';
import { MongoTemplatesDataSource } from 'api/templates.v2/database/MongoTemplatesDataSource';
import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults';
import { DefaultTemplatesDataSource } from 'api/templates.v2/database/data_source_defaults';
import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant';
import { DefaultEntitiesDataSource } from 'api/entities.v2/database/data_source_defaults';
import { TaskManager } from 'api/services/tasksmanager/TaskManager';
import { DefaultSettingsDataSource } from 'api/settings.v2/database/data_source_defaults';
import { DefaultTemplatesDataSource } from 'api/templates.v2/database/data_source_defaults';
import { MongoTemplatesDataSource } from 'api/templates.v2/database/MongoTemplatesDataSource';
import { GenerateAutomaticTranslationsCofig } from './GenerateAutomaticTranslationConfig';
import { MongoATConfigDataSource } from './infrastructure/MongoATConfigDataSource';
import { AJVATConfigValidator } from './infrastructure/AJVATConfigValidator';
import { SaveEntityTranslations } from './SaveEntityTranslations';
import { AJVTranslationResultValidator } from './infrastructure/AJVTranslationResultValidator';
import { ATExternalAPI } from './infrastructure/ATExternalAPI';
import { AJVEntityInputValidator } from './infrastructure/EntityInputValidator';
import { MongoATConfigDataSource } from './infrastructure/MongoATConfigDataSource';
import { ATTaskMessage, RequestEntityTranslation } from './RequestEntityTranslation';
import { SaveEntityTranslations } from './SaveEntityTranslations';
import { ATConfigService } from './services/GetAutomaticTranslationConfig';

const AutomaticTranslationFactory = {
defaultGenerateATConfig() {
Expand All @@ -26,6 +32,27 @@ const AutomaticTranslationFactory = {
new AJVTranslationResultValidator()
);
},

defaultATConfigService() {
const transactionManager = DefaultTransactionManager();
return new ATConfigService(
DefaultSettingsDataSource(transactionManager),
new MongoATConfigDataSource(getConnection(), transactionManager),
DefaultTemplatesDataSource(transactionManager),
new ATExternalAPI()
);
},

defaultRequestEntityTranslation() {
return new RequestEntityTranslation(
new TaskManager<ATTaskMessage>({
serviceName: RequestEntityTranslation.SERVICE_NAME,
}),
DefaultTemplatesDataSource(DefaultTransactionManager()),
AutomaticTranslationFactory.defaultATConfigService(),
new AJVEntityInputValidator()
);
},
};

export { AutomaticTranslationFactory };
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { EntityCreatedEvent } from 'api/entities/events/EntityCreatedEvent';
import { EventsBus } from 'api/eventsbus';
import { RequestEntityTranslation } from '../../RequestEntityTranslation';

export class ATEntityCreationListener {
private requestEntityTranslation: RequestEntityTranslation;

private eventBus: EventsBus;

constructor(requestEntityTranslation: RequestEntityTranslation, eventBus: EventsBus) {
this.requestEntityTranslation = requestEntityTranslation;
this.eventBus = eventBus;
}

start() {
this.eventBus.on(EntityCreatedEvent, async event => {
const entityFrom = event.entities.find(e => e.language === event.targetLanguageKey) || {};

entityFrom._id = entityFrom._id?.toString();
entityFrom.template = entityFrom.template?.toString();

await this.requestEntityTranslation.execute(entityFrom);
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { EntityCreatedEvent } from 'api/entities/events/EntityCreatedEvent';
import { EventsBus } from 'api/eventsbus';
import { RequestEntityTranslation } from 'api/externalIntegrations.v2/automaticTranslation/RequestEntityTranslation';
import { testingEnvironment } from 'api/utils/testingEnvironment';
import { AutomaticTranslationFactory } from 'api/externalIntegrations.v2/automaticTranslation/AutomaticTranslationFactory';
import { getFixturesFactory } from 'api/utils/fixturesFactory';
import { ATEntityCreationListener } from '../ATEntityCreationListener';

const factory = getFixturesFactory();

describe('ATEntityCreationListener', () => {
let listener: ATEntityCreationListener;
const eventBus: EventsBus = new EventsBus();
let requestEntityTranslation: RequestEntityTranslation;

beforeEach(async () => {
await testingEnvironment.setUp({
settings: [{ features: { automaticTranslation: { active: true } } }],
});
await testingEnvironment.setTenant('tenant');

requestEntityTranslation = AutomaticTranslationFactory.defaultRequestEntityTranslation();
jest.spyOn(requestEntityTranslation, 'execute');

listener = new ATEntityCreationListener(requestEntityTranslation, eventBus);
listener.start();
});

afterAll(async () => {
await testingEnvironment.tearDown();
});

describe('Request entity translation', () => {
it('should call RequestEntityTranslation on receiving entity creation event', async () => {
const entityEn = factory.entity('entity1', 'template1', {}, { language: 'en' });
const entityCreationEvent = new EntityCreatedEvent({
entities: [factory.entity('entity1', 'template1', {}, { language: 'es' }), entityEn],
targetLanguageKey: 'en',
});

await eventBus.emit(entityCreationEvent);

expect(requestEntityTranslation.execute).toHaveBeenCalledWith(entityEn);
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { SaveEntityTranslations } from 'api/externalIntegrations.v2/automaticTra
import { ATServiceListener } from '../ATServiceListener';

const prepareATFactory = (executeSpy: jest.Mock<any, any, any>) => {
// @ts-ignore
const ATFactory: typeof AutomaticTranslationFactory = {
defaultGenerateATConfig() {
return {} as GenerateAutomaticTranslationsCofig;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "uwazi",
"version": "1.186.0-rc6",
"version": "1.186.0-rc7",
"description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.",
"keywords": [
"react"
Expand Down

0 comments on commit 4b93f32

Please sign in to comment.