public void UpdateUserPreference_HappyPath() { var prefEvent = new CreatePreferenceKeyEvent { PreferenceKeyName = $"some key {DateTime.Now.Ticks}", PreferenceKeyUID = Guid.NewGuid() }; WriteEventToDb(prefEvent); var userPrefEvent = new CreateUserPreferenceEvent { PreferenceKeyName = prefEvent.PreferenceKeyName, PreferenceKeyUID = prefEvent.PreferenceKeyUID, PreferenceJson = "some json here", SchemaVersion = "1.0", UserUID = Guid.NewGuid() }; WriteEventToDb(userPrefEvent); var userPrefEvent2 = new UpdateUserPreferenceEvent { PreferenceKeyName = prefEvent.PreferenceKeyName, PreferenceKeyUID = prefEvent.PreferenceKeyUID, PreferenceJson = "some changed json here", SchemaVersion = "1.0", UserUID = userPrefEvent.UserUID }; WriteEventToDb(userPrefEvent2); }
public bool?UpdateUserPreference(UpdateUserPreferenceEvent userPreference) { var preference = GetPreferenceKey(userPreference.PreferenceKeyUID, userPreference.PreferenceKeyName); if (preference == null || userPreference.PreferenceKeyUID.HasValue && !preference.PreferenceKeyUID.Equals(userPreference.PreferenceKeyUID)) { return(null); } var dbUserPreference = GetUserPreference(userPreference.UserUID.Value, userPreference.PreferenceKeyUID, userPreference.PreferenceKeyName); if (dbUserPreference == null) { throw new Exception("UserPreference does not Exist"); } dbUserPreference.PreferenceValue = userPreference.PreferenceJson; if (userPreference.SchemaVersion != null) { dbUserPreference.SchemaVersion = userPreference.SchemaVersion; } else { userPreference.SchemaVersion = dbUserPreference.SchemaVersion; } dbUserPreference.UpdateUTC = DateTime.UtcNow; var kafkaMessage = new KafkaMessage() { Key = userPreference.UserUID.ToString(), Message = new { UpdateUserPreferenceEvent = userPreference } }; var actions = new List <Action>(); actions.Add(() => transaction.Upsert <DbUserPreference>(dbUserPreference)); actions.Add(() => topics.ToList().ForEach(topic => { kafkaMessage.Topic = topic; transaction.Publish(kafkaMessage); })); return(transaction.Execute(actions)); }
public void UpdateUserPreference_NoExisting() { var prefEvent = new CreatePreferenceKeyEvent { PreferenceKeyName = $"some key {DateTime.Now.Ticks}", PreferenceKeyUID = Guid.NewGuid() }; WriteEventToDb(prefEvent); var userPrefEvent = new UpdateUserPreferenceEvent { PreferenceKeyName = prefEvent.PreferenceKeyName, PreferenceKeyUID = prefEvent.PreferenceKeyUID, PreferenceJson = "some json here", SchemaVersion = "1.0", UserUID = Guid.NewGuid() }; WriteEventToDb(userPrefEvent, "Non-existent user preference should not be updated", 0); }
public async Task UpdateUserPreferenceExecutor_HappyPath() { const string keyName = "some key"; var userUid = Guid.NewGuid(); var prefEvent = new UpdateUserPreferenceEvent { PreferenceKeyName = keyName, PreferenceKeyUID = Guid.NewGuid(), UserUID = userUid, PreferenceJson = "some new json", SchemaVersion = "1.0" }; mockPrefRepo.Setup(p => p.StoreEvent(prefEvent)) .ReturnsAsync(1); var userPref = new UserPrefKeyDataModel { KeyName = keyName, PreferenceKeyUID = prefEvent.PreferenceKeyUID.Value.ToString(), PreferenceJson = prefEvent.PreferenceJson, SchemaVersion = prefEvent.SchemaVersion }; mockPrefRepo.Setup(p => p.GetUserPreference(userUid, keyName)) .ReturnsAsync(userPref); var executor = RequestExecutorContainerFactory.Build <UpdateUserPreferenceExecutor> (Logger, ServiceExceptionHandler, mockPrefRepo.Object); var result = await executor.ProcessAsync(prefEvent) as UserPreferenceV1Result; Assert.Equal(ContractExecutionStatesEnum.ExecutedSuccessfully, result.Code); Assert.Equal(ContractExecutionResult.DefaultMessage, result.Message); Assert.Equal(prefEvent.SchemaVersion, result.SchemaVersion); Assert.Equal(prefEvent.PreferenceJson, result.PreferenceJson); Assert.Equal(prefEvent.PreferenceKeyName, result.PreferenceKeyName); Assert.Equal(prefEvent.PreferenceKeyUID, result.PreferenceKeyUID); }
public async Task UpdateUserPreferenceExecutor_NoExisting() { var prefEvent = new UpdateUserPreferenceEvent { PreferenceKeyName = "some key", PreferenceKeyUID = Guid.NewGuid(), UserUID = Guid.NewGuid(), PreferenceJson = "some new json", SchemaVersion = "1.0" }; mockPrefRepo.Setup(p => p.StoreEvent(prefEvent)) .ReturnsAsync(0); var executor = RequestExecutorContainerFactory.Build <UpdateUserPreferenceExecutor> (Logger, ServiceExceptionHandler, mockPrefRepo.Object); var ex = await Assert.ThrowsAsync <ServiceException>(async() => await executor.ProcessAsync(prefEvent)); Assert.Equal(HttpStatusCode.InternalServerError, ex.Code); var result = ex.GetResult; Assert.Equal(2011, result.Code); Assert.Equal("Unable to update user preference. ", result.Message); }