Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
0
        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);
        }