/* * Copyright 2015 JBoss, by Red Hat, Inc * * 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.ext.editor.commons.client.history; import java.util.ArrayList; import org.junit.Before; import org.junit.Test; import org.uberfire.java.nio.base.version.VersionRecord; import org.uberfire.mvp.Command; import static org.mockito.Mockito.*; import static org.uberfire.ext.editor.commons.client.history.Helper.getVersionRecord; public class VersionMenuDropDownButtonTest { private VersionMenuDropDownButtonView view; private VersionMenuDropDownButton button; @Before public void setUp() throws Exception { view = mock(VersionMenuDropDownButtonView.class); button = new VersionMenuDropDownButton(view); } @Test public void testPresenterSet() throws Exception { verify(view).setPresenter(button); } @Test(expected = IllegalArgumentException.class) public void testNoVersion() throws Exception { button.setItems(new ArrayList<VersionRecord>()); button.onMenuOpening(); } @Test(expected = IllegalArgumentException.class) public void testNoVersionRecords() throws Exception { button.setVersion("111"); button.onMenuOpening(); } @Test public void testVersionChange() throws Exception { ArrayList<VersionRecord> versionRecords = new ArrayList<VersionRecord>(); versionRecords.add(getVersionRecord("1111")); versionRecords.add(getVersionRecord("2222")); versionRecords.add(getVersionRecord("3333")); button.setItems(versionRecords); button.setVersion("3333"); button.onMenuOpening(); verify(view).addLabel(eq(versionRecords.get(2)), eq(true), eq(3)); verify(view).addLabel(eq(versionRecords.get(1)), eq(false), eq(2)); verify(view).addLabel(eq(versionRecords.get(0)), eq(false), eq(1)); button.setVersion("2222"); button.onMenuOpening(); verify(view).addLabel(eq(versionRecords.get(2)), eq(false), eq(3)); verify(view).addLabel(eq(versionRecords.get(1)), eq(true), eq(2)); verify(view, times(2)).addLabel(eq(versionRecords.get(0)), eq(false), eq(1)); } @Test public void testItemsCanNotBeSetToLessThanBefore() throws Exception { ArrayList<VersionRecord> versions = new ArrayList<VersionRecord>(); versions.add(getVersionRecord("1111")); versions.add(getVersionRecord("2222")); button.setItems(versions); button.setVersion("1111"); button.onMenuOpening(); verify(view, times(2)).addLabel(any(VersionRecord.class), anyBoolean(), anyInt()); ArrayList<VersionRecord> versions2 = new ArrayList<VersionRecord>(); versions2.add(getVersionRecord("1111")); button.setItems(versions2); button.onMenuOpening(); verify(view, times(4)).addLabel(any(VersionRecord.class), anyBoolean(), anyInt()); } @Test public void testNewVersionAdded() throws Exception { ArrayList<VersionRecord> versionRecords = new ArrayList<VersionRecord>(); versionRecords.add(getVersionRecord("1111")); versionRecords.add(getVersionRecord("2222")); versionRecords.add(getVersionRecord("3333")); button.setItems(versionRecords); button.setVersion("3333"); button.onMenuOpening(); verify(view).addLabel(eq(versionRecords.get(2)), eq(true), eq(3)); verify(view).addLabel(eq(versionRecords.get(1)), eq(false), eq(2)); verify(view).addLabel(eq(versionRecords.get(0)), eq(false), eq(1)); ArrayList<VersionRecord> versionRecords2 = new ArrayList<VersionRecord>(); versionRecords2.add(getVersionRecord("1111")); versionRecords2.add(getVersionRecord("2222")); versionRecords2.add(getVersionRecord("3333")); versionRecords2.add(getVersionRecord("4444")); button.setItems(versionRecords2); button.setVersion("4444"); button.onMenuOpening(); verify(view).addLabel(eq(versionRecords2.get(3)), eq(true), eq(4)); verify(view).addLabel(eq(versionRecords2.get(2)), eq(false), eq(3)); verify(view).addLabel(eq(versionRecords2.get(1)), eq(false), eq(2)); verify(view).addLabel(eq(versionRecords2.get(0)), eq(false), eq(1)); } @Test public void testShowMoreCount() { ArrayList<VersionRecord> versionRecords = new ArrayList<VersionRecord>(); versionRecords.add(getVersionRecord("1111")); versionRecords.add(getVersionRecord("2222")); versionRecords.add(getVersionRecord("3333")); versionRecords.add(getVersionRecord("4444")); versionRecords.add(getVersionRecord("5555")); versionRecords.add(getVersionRecord("6666")); versionRecords.add(getVersionRecord("7777")); versionRecords.add(getVersionRecord("8888")); versionRecords.add(getVersionRecord("9999")); button.setItems(versionRecords); button.setVersion("3333"); button.onMenuOpening(); //the last 7 elements are shown in the UI verify(view).addLabel(eq(versionRecords.get(8)), eq(false), eq(9)); verify(view).addLabel(eq(versionRecords.get(7)), eq(false), eq(8)); verify(view).addLabel(eq(versionRecords.get(6)), eq(false), eq(7)); verify(view).addLabel(eq(versionRecords.get(5)), eq(false), eq(6)); verify(view).addLabel(eq(versionRecords.get(4)), eq(false), eq(5)); verify(view).addLabel(eq(versionRecords.get(3)), eq(false), eq(4)); verify(view).addLabel(eq(versionRecords.get(2)), eq(true), eq(3)); //so a count of 9 - 7 = 2 should be shown in the show more label verify(view).addViewAllLabel(eq(2), any(Command.class)); } @Test public void testResetVersions() { final ArrayList<VersionRecord> versions = new ArrayList<VersionRecord>(); versions.add(getVersionRecord("1111")); versions.add(getVersionRecord("2222")); button.setItems(versions); button.setVersion("1111"); button.onMenuOpening(); //Button was originally initialised with 2 versions, so we expect 2 labels to be added verify(view, times(2)).addLabel(any(VersionRecord.class), anyBoolean(), anyInt()); final ArrayList<VersionRecord> versions2 = new ArrayList<VersionRecord>(); versions2.add(getVersionRecord("1111")); //Reset Mock view so we can check the *real* number of times a label was added reset(view); button.resetVersions(); button.setItems(versions2); button.setVersion("1111"); button.onMenuOpening(); //Button was re-initialised with 1 version, so we expect 1 label to be added verify(view, times(1)).addLabel(any(VersionRecord.class), anyBoolean(), anyInt()); } }