public async Task ProcessMessageAsync_SavesUserAction()
        {
            var userRegisterEvent = new UserRegisterEventBuilder().WithContext().Build();

            await _processor.ProcessMessageAsync(userRegisterEvent.ToMessage(), CancellationToken.None);

            UserActionManagerMock.Verify(m => m.SaveUserActionAsync(It.IsAny <UserAction>()), Times.Once);
        }
        public async Task ProcessMessageAsync_SavesUserAction_ObjectId()
        {
            var userRegisterEvent = new UserRegisterEventBuilder().WithUserId(3).WithContext().Build();

            await _processor.ProcessMessageAsync(userRegisterEvent.ToMessage(), CancellationToken.None);

            Assert.Equal(userRegisterEvent.UserId, SavedUserAction.ObjectId);
        }
        public async Task ProcessMessageAsync_BodyContextIsNull_Nack()
        {
            var receivedMessage = new UserRegisterEventBuilder().Build().ToMessage();

            await _processor.ProcessMessageAsync(receivedMessage, CancellationToken.None);

            Mock.Get(receivedMessage).Verify(m => m.Nack(), Times.Once);
        }
        public async Task ProcessMessageAsync_FilledBody_Ack()
        {
            var receivedMessage = new UserRegisterEventBuilder()
                                  .WithContext(new EventContextBuilder().WithWebContext())
                                  .Build()
                                  .ToMessage();

            await _processor.ProcessMessageAsync(receivedMessage, CancellationToken.None);

            Mock.Get(receivedMessage).Verify(m => m.Ack(), Times.Once);
        }
        public async Task ProcessMessageAsync_SavesUserAction_ActionDate()
        {
            var userRegisterEvent = new UserRegisterEventBuilder()
                                    .WithContext(new EventContextBuilder()
                                                 .WithTimeStamp(new DateTime(2011, 11, 11, 11, 11, 11)))
                                    .Build();

            await _processor.ProcessMessageAsync(userRegisterEvent.ToMessage(), CancellationToken.None);

            Assert.Equal(userRegisterEvent.Context.Timestamp, SavedUserAction.ActionDateTimeUtc.ToUniversalTime());
        }
        public async Task ProcessMessageAsync_IosClient_DoesNotCallUserActionManager()
        {
            var message = new UserRegisterEventBuilder()
                          .WithContext(new EventContextBuilder().WithWebContext().WithClientType(ClientType.iPhoneApplication))
                          .Build()
                          .ToMessage();

            await _processor.ProcessMessageAsync(message, CancellationToken.None);

            UserActionManagerMock.Verify(m => m.SaveUserActionAsync(It.IsAny <UserAction>()), Times.Never);
            Mock.Get(message).Verify(m => m.Ack(), Times.Once);
        }
        public async Task ProcessMessageAsync_SavesUserAction_InitiatorType()
        {
            const InitiatorType initiatorType = InitiatorType.Moderator;
            var userRegisterEvent             = new UserRegisterEventBuilder()
                                                .WithContext(new EventContextBuilder()
                                                             .WithInitiator(new OperationInitiatorBuilder()
                                                                            .WithInitiatorType(initiatorType)))
                                                .Build();

            await _processor.ProcessMessageAsync(userRegisterEvent.ToMessage(), CancellationToken.None);

            Assert.Equal(initiatorType, SavedUserAction.InitiatorType);
        }
        public async Task ProcessMessageAsync_SavesUserAction_LingeringHash()
        {
            const long lingeringHash = 42;

            var userRegisterEvent = new UserRegisterEventBuilder()
                                    .WithContext(new EventContextBuilder()
                                                 .WithWebContext(new WebContextBuilder()
                                                                 .WithLingeringAttributionDataHash(lingeringHash)))
                                    .Build();

            await _processor.ProcessMessageAsync(userRegisterEvent.ToMessage(), CancellationToken.None);

            Assert.Equal(lingeringHash, SavedUserAction.LingeringHash);
        }
        public async Task ProcessMessageAsync_SavesUserAction_ChannelAttributesHash()
        {
            const long expectedChannelAttributesId = 42;

            var userRegisterEvent = new UserRegisterEventBuilder()
                                    .WithContext(new EventContextBuilder()
                                                 .WithWebContext(new WebContextBuilder()
                                                                 .WithAttributionDataHash(5)))
                                    .Build();

            SetupChannelAttributesManagerMock(
                userRegisterEvent.Context.WebContext.AttributionDataHash,
                expectedChannelAttributesId);

            await _processor.ProcessMessageAsync(userRegisterEvent.ToMessage(), CancellationToken.None);

            Assert.Equal(expectedChannelAttributesId, SavedUserAction.ChannelAttributesId);
        }