public async Task ProcessMessageAsync_FilledBody_Ack()
        {
            var receivedMessage = new UtmVisitTraceEventBuilder().WithContext().Build().ToMessage();

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

            Mock.Get(receivedMessage).Verify(m => m.Ack(), Times.Once);
        }
        public async Task ProcessMessageAsync_AddesChannelAttributes()
        {
            var userRegisterEvent = new UtmVisitTraceEventBuilder().WithContext().Build();

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

            ChannelAttributesManagerMock.Verify(m =>
                                                m.CreateChannelAttributesDataAsync(userRegisterEvent.Hash, userRegisterEvent.AttributionData), Times.Once);
        }
        public async Task ProcessMessageAsync_AttributionDataIsWhitespace_Nack()
        {
            var userRegisterEvent = new UtmVisitTraceEventBuilder()
                                    .WithContext()
                                    .WithAttributionData("\t")
                                    .Build()
                                    .ToMessage();

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

            Mock.Get(userRegisterEvent).Verify(m => m.Nack(), Times.Once);
        }
        public async Task ProcessMessageAsync_HashIsZero_Nack()
        {
            var userRegisterEvent = new UtmVisitTraceEventBuilder()
                                    .WithContext()
                                    .WithHash(0L)
                                    .Build()
                                    .ToMessage();

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

            Mock.Get(userRegisterEvent).Verify(m => m.Nack(), Times.Once);
        }