public async Task UpdatePersonByIdUseCaseGatewayReturnsResultNoChanges(int?ifMatch)
        {
            // Arrange
            var request       = ConstructRequest();
            var query         = ConstructQuery(Guid.NewGuid());
            var token         = new Token();
            var updatedPerson = ConstructPerson(query.Id);
            var gatewayResult = new UpdateEntityResult <PersonDbEntity>()
            {
                UpdatedEntity = updatedPerson.ToDatabase()
            };

            _mockGateway.Setup(x => x.UpdatePersonByIdAsync(request, It.IsAny <string>(), query, ifMatch))
            .ReturnsAsync(gatewayResult);
            var snsEvent = _fixture.Create <PersonSns>();

            _mockSnsFactory.Setup(x => x.Update(gatewayResult, token))
            .Returns(snsEvent);

            // Act
            var response = await _classUnderTest.ExecuteAsync(request, "", token, query, ifMatch).ConfigureAwait(false);

            // Assert
            _mockSnsFactory.Verify(x => x.Update(gatewayResult, token), Times.Never);
            _mockSnsGateway.Verify(x => x.Publish(snsEvent, It.IsAny <string>(), It.IsAny <string>()), Times.Never);
            response.Should().BeEquivalentTo(_responseFactory.ToResponse(updatedPerson));
        }
Example #2
0
        public ActionResult <dynamic> Put(string ApiKey, string EntityType, [FromBody] dynamic Entity)
        {
            try
            {
                if (!WorkeFunctions.IsValidApiKey(ApiKey))
                {
                    throw new InvalidApiKeyException();
                }

                object objectToStore;
                if (Entity.GetType().Name == "JObject")
                {
                    var typedObject = EntityFactory.GetEmptyTypedObect(EntityType);
                    objectToStore = EntityFactory.CopyPropertiesFromDynamicObjectToTypedObject(Entity, typedObject);
                }
                else
                {
                    objectToStore = Entity;
                }

                UpdateEntityResult ret = WorkeFunctions.BusinessObjectAccess.UpdateEntity(objectToStore);

                if (ret == UpdateEntityResult.Success)
                {
                    EntityDescriber edd = new EntityDescriber(objectToStore);

                    if (edd.IdField() != null)
                    {
                        return(CreatedAtAction(nameof(Get), new { id = EntityFactory.GetPropertyByName(objectToStore, edd.IdField().Name) }, objectToStore));
                    }
                    else
                    {
                        return(CreatedAtAction(nameof(Get), new {  }, objectToStore));
                    }
                }
                else if (ret == UpdateEntityResult.NoRowsAffected)
                {
                    return(NotFound());
                }
                else
                {
                    return(new UnprocessableEntityObjectResult(objectToStore));
                }
            }
            catch (InvalidApiKeyException)
            {
                return(Unauthorized());
            }

            catch (Alchemint.Core.Exceptions.RecordUpdateException ex)
            {
                HandleException(ex);
                throw ex;
            }
            catch (Exception ex)
            {
                HandleException(ex);
                throw ex;
            }
        }
Example #3
0
 public PersonSns Update(UpdateEntityResult <PersonDbEntity> updateResult, Token token)
 {
     return(new PersonSns
     {
         CorrelationId = Guid.NewGuid(),
         DateTime = DateTime.UtcNow,
         EntityId = updateResult.UpdatedEntity.Id,
         Id = Guid.NewGuid(),
         EventType = UpdatePersonConstants.EVENTTYPE,
         Version = UpdatePersonConstants.V1VERSION,
         SourceDomain = UpdatePersonConstants.SOURCEDOMAIN,
         SourceSystem = UpdatePersonConstants.SOURCESYSTEM,
         User = new User
         {
             Name = token.Name,
             Email = token.Email
         },
         EventData = new EventData
         {
             OldData = updateResult.OldValues,
             NewData = updateResult.NewValues
         }
     });
 }