/*
* Copyright 2015 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.uberfire.client.mvp;
import javax.enterprise.inject.Instance;
import com.google.gwt.user.client.ui.IsWidget;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.uberfire.backend.vfs.ObservablePath;
import org.uberfire.backend.vfs.Path;
import org.uberfire.client.annotations.WorkbenchEditor.LockingStrategy;
import org.uberfire.mvp.PlaceRequest;
import org.uberfire.mvp.impl.ExternalPathPlaceRequest;
import org.uberfire.mvp.impl.PathPlaceRequest;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
import static org.uberfire.client.annotations.WorkbenchEditor.LockingStrategy.EDITOR_PROVIDED;
import static org.uberfire.client.annotations.WorkbenchEditor.LockingStrategy.FRAMEWORK_PESSIMISTIC;
@RunWith(MockitoJUnitRunner.class)
public class WorkbenchEditorActivityTest {
@Mock
private Instance<LockManager> lockManagerProvider;
@Mock
private LockManager lockManager;
@Mock
private PathPlaceRequest place;
@Mock
private ObservablePath path;
@Mock
private ExternalPathPlaceRequest extPlace;
@Mock
private Path plainPath;
@Mock
private IsWidget isWidget;
@Mock
private PlaceManager placeManager;
@Before
public void setup() {
when(lockManagerProvider.get()).thenReturn(lockManager);
when(place.getPath()).thenReturn(path);
}
@Test
public void editorProvidedLockingDoesNotAcquireLocks() {
EditorTestActivity activity = new EditorTestActivity(lockManagerProvider,
placeManager,
EDITOR_PROVIDED);
activity.onStartup(place);
activity.onOpen();
verify(lockManagerProvider,
never()).get();
verify(lockManager,
never()).acquireLockOnDemand();
}
@Test
public void editorProvidedLockingDoesNotReleasesLocks() {
EditorTestActivity activity = new EditorTestActivity(lockManagerProvider,
placeManager,
EDITOR_PROVIDED);
activity.onStartup(place);
activity.onOpen();
activity.onClose();
verify(lockManagerProvider,
never()).destroy(eq(lockManager));
verify(lockManager,
never()).releaseLock();
}
@Test
public void frameworkProvidedLockingAcquiresLocks() {
EditorTestActivity activity = new EditorTestActivity(lockManagerProvider,
placeManager,
FRAMEWORK_PESSIMISTIC);
activity.onStartup(place);
activity.onOpen();
verify(lockManagerProvider,
times(1)).get();
verify(lockManager,
times(1)).acquireLockOnDemand();
}
@Test
public void frameworkProvidedLockingReleasesLocks() {
EditorTestActivity activity = new EditorTestActivity(lockManagerProvider,
placeManager,
FRAMEWORK_PESSIMISTIC);
activity.onStartup(place);
activity.onOpen();
activity.onClose();
verify(lockManagerProvider,
times(1)).destroy(eq(lockManager));
verify(lockManager,
times(1)).releaseLock();
}
@Test
public void editorCreatesObservablePathForExternalPlaceRequest() {
EditorTestActivity activity = Mockito.spy(new EditorTestActivity(lockManagerProvider,
placeManager,
EDITOR_PROVIDED));
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) {
return null;
}
}).when(activity).onStartup(any(Path.class),
any(PlaceRequest.class));
when(extPlace.getPath()).thenReturn(plainPath);
activity.onStartup(extPlace);
verify(activity).onStartup(any(Path.class),
any(PlaceRequest.class));
}
private class EditorTestActivity extends AbstractWorkbenchEditorActivity {
private LockingStrategy strategy;
public EditorTestActivity(Instance<LockManager> lockManagerProvider,
PlaceManager placeManager,
LockingStrategy strategy) {
super(placeManager);
this.lockManagerProvider = lockManagerProvider;
this.strategy = strategy;
}
@Override
public String getIdentifier() {
return null;
}
@Override
public String getTitle() {
return null;
}
@Override
public IsWidget getWidget() {
return isWidget;
}
@Override
protected LockingStrategy getLockingStrategy() {
return strategy;
}
@Override
public boolean isDynamic() {
return true;
}
}
}