public async Task <Result> Handle(CreateOperationCommand request, CancellationToken cancellationToken) { var id = _identifierProvider.Generate(); var operationToCreate = new Operation(id, request.Name); if (!string.IsNullOrWhiteSpace(request.Description)) { operationToCreate.SetDescription(request.Description); } if (request.Icon != null) { var coloredIcon = new ColoredIcon(request.Icon.IconId, request.Icon.FillColor); operationToCreate.SetIcon(coloredIcon); } foreach (var tag in request.Tags) { operationToCreate.AddTag(new Tag(tag)); } operationToCreate.Version = _versionProvider.Generate(); Result result; try { await _operationWriteRepository.CreateAsync(operationToCreate); result = Result.Ok(id, operationToCreate.Version); } catch (UniqueKeyException) { result = Result.Fail(new System.Collections.Generic.List <Failure>() { new HandlerFault() { Code = HandlerFaultCode.Conflict.Name, Message = HandlerFailures.Conflict, Target = "name" } } ); } catch { result = Result.Fail(CustomFailures.CreateOperationFailure); } return(result); }
public async Task CreateShouldSucceed() { // Arrange var id = Guid.NewGuid(); var name = "name"; var description = "description"; var tag1Name = "BSG"; var tag1 = new Tag(tag1Name); var tag2Name = "Chemicals"; var tag2 = new Tag(tag2Name); var coloredIcon = new ColoredIcon(Guid.NewGuid(), "#45545645"); var operation = new Operation(id, name); operation.SetDescription(description); operation.SetIcon(coloredIcon); operation.AddTag(tag1); operation.AddTag(tag2); // Act await _repository.CreateAsync(operation); // Assert var data = RepositoryHelper.ForOperation.GetOperations(); data.Should().HaveCount(1); var result = data.First(); result.Name.Should().Be(name); result.Description.Should().Be(description); result.Icon.Should().Be(coloredIcon); result.Tags.Count.Should().Be(2); result.Tags.ElementAt(0).Should().Be(tag1); result.Tags.ElementAt(1).Should().Be(tag2); }