use of org.eclipse.sirius.components.collaborative.dto.CreateDocumentInput in project sirius-web by eclipse-sirius.
the class CreateDocumentEventHandlerTests method testCreateTwoDocumentWithSameName.
@Test
public void testCreateTwoDocumentWithSameName() {
IDocumentService documentService = new IDocumentService.NoOp() {
@Override
public Optional<Document> createDocument(String projectId, String name, String content) {
// $NON-NLS-1$ //$NON-NLS-2$
return Optional.of(new Document(UUID.randomUUID(), new Project(UUID.fromString(projectId), "", new Profile(UUID.randomUUID(), "username"), Visibility.PUBLIC), name, content));
}
};
IStereotypeDescriptionService stereotypeDescriptionService = new IStereotypeDescriptionService.NoOp() {
@Override
public Optional<StereotypeDescription> getStereotypeDescriptionById(String editingContextId, UUID stereotypeId) {
// $NON-NLS-1$
StereotypeDescription stereotypeDescription = new StereotypeDescription(stereotypeId, "label", () -> CONTENT);
return Optional.of(stereotypeDescription);
}
};
IServicesMessageService messageService = new NoOpServicesMessageService();
AdapterFactoryEditingDomain editingDomain = new EditingDomainFactory().create();
EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain);
CreateDocumentEventHandler handler = new CreateDocumentEventHandler(documentService, stereotypeDescriptionService, messageService, new SimpleMeterRegistry());
Many<ChangeDescription> changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer();
changeDescriptionSink.asFlux().subscribe(changeDescription -> {
assertThat(changeDescription.getKind()).isEqualTo(ChangeKind.SEMANTIC_CHANGE);
});
var firstCreateInput = new CreateDocumentInput(UUID.randomUUID(), editingContext.getId(), DOCUMENT_NAME, STEREOTYPE_DESCRIPTION_ID);
assertThat(handler.canHandle(editingContext, firstCreateInput)).isTrue();
One<IPayload> firstPayloadSink = Sinks.one();
handler.handle(firstPayloadSink, changeDescriptionSink, editingContext, firstCreateInput);
IPayload firstPayload = firstPayloadSink.asMono().block();
assertThat(firstPayload).isInstanceOf(CreateDocumentSuccessPayload.class);
var secondCreatedInput = new CreateDocumentInput(UUID.randomUUID(), editingContext.getId(), DOCUMENT_NAME, STEREOTYPE_DESCRIPTION_ID);
assertThat(handler.canHandle(editingContext, secondCreatedInput)).isTrue();
One<IPayload> secondPayloadSink = Sinks.one();
handler.handle(secondPayloadSink, changeDescriptionSink, editingContext, secondCreatedInput);
IPayload secondPayload = firstPayloadSink.asMono().block();
assertThat(secondPayload).isInstanceOf(CreateDocumentSuccessPayload.class);
}
use of org.eclipse.sirius.components.collaborative.dto.CreateDocumentInput in project sirius-web by eclipse-sirius.
the class CreateDocumentEventHandlerTests method testCreateDocument.
@Test
public void testCreateDocument() {
IDocumentService documentService = new IDocumentService.NoOp() {
@Override
public Optional<Document> createDocument(String projectId, String name, String content) {
// $NON-NLS-1$ //$NON-NLS-2$
return Optional.of(new Document(UUID.randomUUID(), new Project(UUID.fromString(projectId), "", new Profile(UUID.randomUUID(), "username"), Visibility.PUBLIC), name, content));
}
};
IStereotypeDescriptionService stereotypeDescriptionService = new IStereotypeDescriptionService.NoOp() {
@Override
public Optional<StereotypeDescription> getStereotypeDescriptionById(String editingContextId, UUID stereotypeId) {
// $NON-NLS-1$
StereotypeDescription stereotypeDescription = new StereotypeDescription(stereotypeId, "label", () -> CONTENT);
return Optional.of(stereotypeDescription);
}
};
IServicesMessageService messageService = new NoOpServicesMessageService();
CreateDocumentEventHandler handler = new CreateDocumentEventHandler(documentService, stereotypeDescriptionService, messageService, new SimpleMeterRegistry());
var input = new CreateDocumentInput(UUID.randomUUID(), UUID.randomUUID().toString(), DOCUMENT_NAME, STEREOTYPE_DESCRIPTION_ID);
AdapterFactoryEditingDomain editingDomain = new EditingDomainFactory().create();
EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain);
Many<ChangeDescription> changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer();
One<IPayload> payloadSink = Sinks.one();
assertThat(handler.canHandle(editingContext, input)).isTrue();
handler.handle(payloadSink, changeDescriptionSink, editingContext, input);
ChangeDescription changeDescription = changeDescriptionSink.asFlux().blockFirst();
assertThat(changeDescription.getKind()).isEqualTo(ChangeKind.SEMANTIC_CHANGE);
IPayload payload = payloadSink.asMono().block();
assertThat(payload).isInstanceOf(CreateDocumentSuccessPayload.class);
assertThat(editingDomain.getResourceSet().getResources().size()).isEqualTo(1);
// $NON-NLS-1$
Condition<Object> condition = new Condition<>(adapter -> adapter instanceof DocumentMetadataAdapter, "has an DocumentMetadataAdapter");
assertThat(editingDomain.getResourceSet().getResources().get(0).eAdapters()).areAtLeastOne(condition);
}
use of org.eclipse.sirius.components.collaborative.dto.CreateDocumentInput in project sirius-web by eclipse-sirius.
the class CreateDocumentEventHandler method handle.
@Override
public void handle(One<IPayload> payloadSink, Many<ChangeDescription> changeDescriptionSink, IEditingContext editingContext, IInput input) {
this.counter.increment();
IPayload payload = new ErrorPayload(input.getId(), this.messageService.unexpectedError());
ChangeDescription changeDescription = new ChangeDescription(ChangeKind.NOTHING, editingContext.getId(), input);
if (input instanceof CreateDocumentInput) {
CreateDocumentInput createDocumentInput = (CreateDocumentInput) input;
String name = createDocumentInput.getName().trim();
String editingContextId = createDocumentInput.getEditingContextId();
UUID stereotypeDescriptionId = createDocumentInput.getStereotypeDescriptionId();
Optional<StereotypeDescription> optionalStereotypeDescription = this.stereotypeDescriptionService.getStereotypeDescriptionById(editingContextId, stereotypeDescriptionId);
if (name.isBlank()) {
payload = new ErrorPayload(input.getId(), this.messageService.invalidDocumentName(name));
payloadSink.tryEmitValue(payload);
changeDescriptionSink.tryEmitNext(changeDescription);
} else if (optionalStereotypeDescription.isEmpty()) {
payload = new ErrorPayload(input.getId(), this.messageService.stereotypeDescriptionNotFound(stereotypeDescriptionId));
payloadSink.tryEmitValue(payload);
changeDescriptionSink.tryEmitNext(changeDescription);
} else {
StereotypeDescription stereotypeDescription = optionalStereotypeDescription.get();
this.createDocument(payloadSink, changeDescriptionSink, createDocumentInput, editingContext, editingContextId, name, stereotypeDescription);
}
}
}
Aggregations