Mono<Void> sendNotification(NotificationElement notificationElement) {
        var descriptor = notificationElement.descriptor();
        var subscriber = notificationElement.subscriber();
        final var notifierExtName = descriptor.getSpec().getNotifierExtName();
        return notificationContextFrom(notificationElement)
            .flatMap(notificationContext -> notificationSender.sendNotification(notifierExtName,
                    notificationContext)
                .onErrorResume(throwable -> {
                    log.error(
                        "Failed to send notification to subscriber [{}] through notifier [{}]",
                        subscriber,
                        descriptor.getSpec().getDisplayName(),
                        throwable);
                    return Mono.empty();
                })
            )
            .then();
    }
@Test
    public void testSendNotification() {
        var spyNotificationCenter = spy(notificationCenter);

        var context = mock(NotificationContext.class);
        doReturn(Mono.just(context))
            .when(spyNotificationCenter).notificationContextFrom(any());

        when(notificationSender.sendNotification(eq("fake-notifier-ext"), any()))
            .thenReturn(Mono.empty());

        var element = mock(DefaultNotificationCenter.NotificationElement.class);
        var mockDescriptor = mock(NotifierDescriptor.class);
        when(element.descriptor()).thenReturn(mockDescriptor);
        when(element.subscriber()).thenReturn(mock(Subscriber.class));
        var notifierDescriptorSpec = mock(NotifierDescriptor.Spec.class);
        when(mockDescriptor.getSpec()).thenReturn(notifierDescriptorSpec);
        when(notifierDescriptorSpec.getNotifierExtName()).thenReturn("fake-notifier-ext");

        spyNotificationCenter.sendNotification(element).block();

        verify(spyNotificationCenter).notificationContextFrom(any());
        verify(notificationSender).sendNotification(any(), any());
    }