@Test
public void testPublishNotificationMessagesDebugEnabled() throws Throwable
{

    // Save the current log level.
    LogLevel originalLogLevel = getLogLevel(PublishNotificationMessagesAdvice.class);
    try
    {
        // Set the log level to debug.
        setLogLevel(PublishNotificationMessagesAdvice.class, LogLevel.DEBUG);
        // Create a notification message.
        NotificationMessage notificationMessage = new NotificationMessage(MessageTypeEntity.MessageEventTypes.SQS.name(), AWS_SQS_QUEUE_NAME, MESSAGE_TEXT,
            Collections.singletonList(new MessageHeader(KEY, VALUE)));
        // Mock a join point of the method call.
        ProceedingJoinPoint joinPoint = getMockedProceedingJoinPoint("testPublishNotificationMessages");
        // Mock the external calls.
        doCallRealMethod().when(notificationMessageInMemoryQueue).clear();
        doCallRealMethod().when(notificationMessageInMemoryQueue).add(notificationMessage);
        when(notificationMessageInMemoryQueue.size()).thenCallRealMethod();
        when(notificationMessageInMemoryQueue.isEmpty()).thenCallRealMethod();
        doCallRealMethod().when(notificationMessageInMemoryQueue).remove();
        // Clear the queue.
        notificationMessageInMemoryQueue.clear();
        // Add the notification message to the queue.
        notificationMessageInMemoryQueue.add(notificationMessage);
        // Validate that the queue is not empty now.
        assertFalse(notificationMessageInMemoryQueue.isEmpty());
        // Call the method under test.
        publishNotificationMessagesAdvice.publishNotificationMessages(joinPoint);
        // Verify the external calls.
        verify(notificationMessageInMemoryQueue, times(2)).clear();
        verify(notificationMessageInMemoryQueue).add(notificationMessage);
        verify(notificationMessageInMemoryQueue).size();
        verify(notificationMessageInMemoryQueue, times(3)).isEmpty();
        verify(notificationMessageInMemoryQueue).remove();
        verify(notificationMessagePublishingService).publishNotificationMessage(notificationMessage);
        verifyNoMoreInteractionsHelper();
        // Validate the results.
        assertTrue(notificationMessageInMemoryQueue.isEmpty());
    }
    finally
    {
        // Restore log level to the original value.
        setLogLevel(PublishNotificationMessagesAdvice.class, originalLogLevel);
    }
}