/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.workbench.common.stunner.client.widgets.notification;
import java.util.Collection;
import java.util.Collections;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.stunner.core.client.canvas.CanvasHandler;
import org.kie.workbench.common.stunner.core.client.canvas.event.command.CanvasCommandExecutedEvent;
import org.kie.workbench.common.stunner.core.client.command.CanvasViolation;
import org.kie.workbench.common.stunner.core.client.i18n.ClientTranslationService;
import org.kie.workbench.common.stunner.core.client.validation.canvas.CanvasValidationFailEvent;
import org.kie.workbench.common.stunner.core.client.validation.canvas.CanvasValidationSuccessEvent;
import org.kie.workbench.common.stunner.core.command.Command;
import org.kie.workbench.common.stunner.core.command.CommandResult;
import org.kie.workbench.common.stunner.core.diagram.Diagram;
import org.kie.workbench.common.stunner.core.diagram.Metadata;
import org.kie.workbench.common.stunner.core.rule.RuleViolation;
import org.kie.workbench.common.stunner.core.validation.DiagramElementViolation;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.mvp.ParameterizedCommand;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class NotificationsObserverTest {
private static final String UUID = "uuid1";
private static final String NAME = "name1";
private static final String TITLE = "title1";
@Mock
ClientTranslationService translationService;
@Mock
CanvasHandler canvasHandler;
@Mock
Diagram diagram;
@Mock
Metadata metadata;
@Mock
ParameterizedCommand<Notification> onNotification;
@Mock
ParameterizedCommand<CommandNotification> commandSuccess;
@Mock
ParameterizedCommand<CommandNotification> commandFailed;
@Mock
ParameterizedCommand<ValidationSuccessNotification> validationSuccess;
@Mock
ParameterizedCommand<ValidationFailedNotification> validationFailed;
private NotificationsObserver tested;
private NotificationContext notificationContext;
private CommandNotification commandNotification;
private ValidationSuccessNotification validationSuccessNotification;
private ValidationFailedNotification validationFailedNotification;
@Before
@SuppressWarnings("unchecked")
public void setup() {
when(canvasHandler.getDiagram()).thenReturn(diagram);
when(diagram.getName()).thenReturn(NAME);
when(diagram.getMetadata()).thenReturn(metadata);
when(metadata.getTitle()).thenReturn(TITLE);
this.notificationContext = new NotificationContext(UUID,
NAME,
TITLE);
this.tested = new NotificationsObserver(translationService);
this.tested.onNotification(onNotification);
this.tested.onCommandExecutionSuccess(commandSuccess);
this.tested.onCommandExecutionFailed(commandFailed);
this.tested.onValidationSuccess(validationSuccess);
this.tested.onValidationFailed(validationFailed);
this.tested.notificationBuilder = new NotificationsObserver.NotificationBuilder() {
@Override
public Notification createCommandNotification(NotificationContext context,
Command<?, CanvasViolation> command,
CommandResult<CanvasViolation> result) {
return commandNotification;
}
@Override
public Notification createValidationSuccessNotification(NotificationContext context) {
return validationSuccessNotification;
}
@Override
public Notification createValidationFailedNotification(NotificationContext context,
Collection<DiagramElementViolation<RuleViolation>> errors) {
return validationFailedNotification;
}
};
}
@Test
@SuppressWarnings("unchecked")
public void testNotifyCommandSuccess() {
final Command command = mock(Command.class);
final CommandResult<CanvasViolation> result = mock(CommandResult.class);
final CanvasCommandExecutedEvent<? extends CanvasHandler> commandExecutedEvent =
new CanvasCommandExecutedEvent<>(canvasHandler,
command,
result);
commandNotification =
new CommandNotification(Notification.Type.INFO,
notificationContext,
command,
"message1");
tested.onGraphCommandExecuted(commandExecutedEvent);
verify(onNotification,
times(1)).execute(eq(commandNotification));
verify(commandSuccess,
times(1)).execute(eq(commandNotification));
verify(commandFailed,
never()).execute(any(CommandNotification.class));
verify(validationSuccess,
never()).execute(any(ValidationSuccessNotification.class));
verify(validationFailed,
never()).execute(any(ValidationFailedNotification.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNotifyCommandFailed() {
final Command command = mock(Command.class);
final CommandResult<CanvasViolation> result = mock(CommandResult.class);
final CanvasCommandExecutedEvent<? extends CanvasHandler> commandExecutedEvent =
new CanvasCommandExecutedEvent<>(canvasHandler,
command,
result);
commandNotification =
new CommandNotification(Notification.Type.ERROR,
notificationContext,
command,
"message1");
tested.onGraphCommandExecuted(commandExecutedEvent);
verify(onNotification,
times(1)).execute(eq(commandNotification));
verify(commandFailed,
times(1)).execute(eq(commandNotification));
verify(commandSuccess,
never()).execute(any(CommandNotification.class));
verify(validationSuccess,
never()).execute(any(ValidationSuccessNotification.class));
verify(validationFailed,
never()).execute(any(ValidationFailedNotification.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNotifyValidationSuccess() {
validationSuccessNotification = new ValidationSuccessNotification("message",
notificationContext);
final CanvasValidationSuccessEvent validationSuccessEvent =
new CanvasValidationSuccessEvent(UUID,
NAME,
TITLE);
tested.onCanvasValidationSuccessEvent(validationSuccessEvent);
verify(onNotification,
times(1)).execute(any(Notification.class));
verify(validationSuccess,
times(1)).execute(eq(validationSuccessNotification));
verify(commandFailed,
never()).execute(any(CommandNotification.class));
verify(commandSuccess,
never()).execute(any(CommandNotification.class));
verify(validationFailed,
never()).execute(any(ValidationFailedNotification.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNotifyValidationFailed() {
final DiagramElementViolation violation = mock(DiagramElementViolation.class);
final Collection<DiagramElementViolation<RuleViolation>> violations = Collections.singletonList(violation);
validationFailedNotification = new ValidationFailedNotification(violations,
notificationContext,
"message1",
Notification.Type.ERROR);
final CanvasValidationFailEvent validationFailEvent =
new CanvasValidationFailEvent(UUID,
NAME,
TITLE,
violations);
tested.onCanvasValidationFailEvent(validationFailEvent);
verify(onNotification,
times(1)).execute(any(Notification.class));
verify(validationFailed,
times(1)).execute(eq(validationFailedNotification));
verify(commandFailed,
never()).execute(any(CommandNotification.class));
verify(validationSuccess,
never()).execute(any(ValidationSuccessNotification.class));
verify(commandSuccess,
never()).execute(any(CommandNotification.class));
}
}