/* * 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.guvnor.m2repo.client.widgets; import javax.enterprise.event.Event; import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.cellview.client.ColumnSortList; import com.google.gwt.view.client.HasData; import com.google.gwt.view.client.Range; import org.guvnor.m2repo.model.JarListPageRequest; import org.guvnor.m2repo.model.JarListPageRow; import org.guvnor.m2repo.service.M2RepoService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.mocks.CallerMock; import org.uberfire.paging.PageResponse; import org.uberfire.workbench.events.NotificationEvent; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class ArtifactListTest { private static final int REQUEST_RANGE_LENGTH = 53; private static final int REQUEST_RANGE_START = 19; private final boolean REQUEST_SORT_ORDER = true; private final String REQUEST_SORT_COLUMN = "C"; private static final boolean RESPONSE_EXACT_ROWS = true; private static final int RESPONSE_ROWS_COUNT = 61; private static final String POM_TEXT = "POM text"; @Mock private Event<NotificationEvent> event; @Mock private M2RepoService m2service; @Mock private PageResponse<JarListPageRow> response; @Mock private ArtifactListView view; @Mock private HasData<JarListPageRow> table; @Mock private Range range; @Mock @SuppressWarnings("rawtypes") private Column column; @Mock private ColumnSortList sortList; @Mock private ColumnSortList.ColumnSortInfo sortInfo; @Captor private ArgumentCaptor<JarListPageRequest> request; @Before @SuppressWarnings("unchecked") public void setUp() { when( m2service.listArtifacts( any( JarListPageRequest.class ) ) ).thenReturn( response ); when( m2service.getPomText( Mockito.anyString() ) ).thenReturn( POM_TEXT ); when( response.getTotalRowSize() ).thenReturn( RESPONSE_ROWS_COUNT ); when( response.isTotalRowSizeExact() ).thenReturn( RESPONSE_EXACT_ROWS ); when( view.getDisplay() ).thenReturn( table ); when( table.getVisibleRange() ).thenReturn( range ); when( range.getStart() ).thenReturn( REQUEST_RANGE_START ); when( range.getLength() ).thenReturn( REQUEST_RANGE_LENGTH ); when( view.getColumnSortList() ).thenReturn( sortList ); when( sortList.size() ).thenReturn( 1 ); when( sortList.get( 0 ) ).thenReturn( sortInfo ); when( sortInfo.isAscending() ).thenReturn( REQUEST_SORT_ORDER ); when( sortInfo.getColumn() ).thenReturn( column ); // unchecked when( column.getDataStoreName() ).thenReturn( REQUEST_SORT_COLUMN ); } @Test public void testSearch() { ArtifactListPresenterImpl presenter = new ArtifactListPresenterImpl( view, new CallerMock<M2RepoService>( m2service ), event ); // Disable sort info for this test when( view.getColumnSortList() ).thenReturn( null ); presenter.init(); ArtifactListPresenterImpl.RefreshableAsyncDataProvider dataProvider = spy( presenter.dataProvider ); presenter.dataProvider = dataProvider; // Search request with filter presenter.search( "filters" ); verify( event ).fire( any( NotificationEvent.class ) ); verify( dataProvider ).addDataDisplay( Matchers.<HasData<JarListPageRow>>any() ); verify( dataProvider, never() ).goToFirstPage(); verify( m2service ).listArtifacts( request.capture() ); JarListPageRequest searchRequest = request.getValue(); verifyRequest( searchRequest, null, "filters", REQUEST_RANGE_LENGTH, REQUEST_RANGE_START, ArtifactListPresenterImpl.DEFAULT_ORDER_ASCENDING ); // Row data updated verify( table ).setRowCount( RESPONSE_ROWS_COUNT, RESPONSE_EXACT_ROWS ); // Second search does not add the display again reset( event ); reset( dataProvider ); presenter.search( "other filters" ); verify( event ).fire( any( NotificationEvent.class ) ); verify( dataProvider, never() ).addDataDisplay( Matchers.<HasData<JarListPageRow>>any() ); verify( dataProvider ).goToFirstPage(); } @Test public void testNoEvent() { ArtifactListPresenterImpl presenter = new ArtifactListPresenterImpl( view, new CallerMock<M2RepoService>( m2service ), event ); // Disable sort info for this test when( view.getColumnSortList() ).thenReturn( null ); presenter.init(); ArtifactListPresenterImpl.RefreshableAsyncDataProvider dataProvider = spy( presenter.dataProvider ); presenter.dataProvider = dataProvider; // Search request with filter presenter.notifyOnRefresh( false ); presenter.search( "filters" ); presenter.refresh(); verify( event, never() ).fire( any( NotificationEvent.class ) ); } @Test public void testDefaultColumns() { ArtifactListPresenterImpl presenter = new ArtifactListPresenterImpl( view, new CallerMock<M2RepoService>( m2service ), event ); presenter.init(); presenter.setup( ColumnType.GAV ); verify( view ).setup( ColumnType.GAV ); presenter.getView(); verify( view, never() ).setup(); } @Test public void testColumnSortList() { ArtifactListPresenterImpl presenter = new ArtifactListPresenterImpl( view, new CallerMock<M2RepoService>( m2service ), event ); presenter.init(); // Change sort parameters and refresh when( sortInfo.isAscending() ).thenReturn( !REQUEST_SORT_ORDER ); when( column.getDataStoreName() ).thenReturn( "X" ); presenter.search( "" ); // Verify request verify( m2service ).listArtifacts( request.capture() ); verifyRequest( request.getValue(), "X", "", REQUEST_RANGE_LENGTH, REQUEST_RANGE_START, !REQUEST_SORT_ORDER ); // Row data updated verify( table ).setRowCount( RESPONSE_ROWS_COUNT, RESPONSE_EXACT_ROWS ); } @Test public void testShowPom() { ArtifactListPresenterImpl presenter = new ArtifactListPresenterImpl( view, new CallerMock<M2RepoService>( m2service ), event ); presenter.init(); presenter.onOpenPom( "" ); verify( view ).showPom( POM_TEXT ); } private static void verifyRequest( final JarListPageRequest request, final String dataSourceName, final String filters, final Integer pageSize, final int startRowIndex, final boolean isAscending ) { assertEquals( dataSourceName, request.getDataSourceName() ); assertEquals( filters, request.getFilters() ); assertEquals( pageSize, request.getPageSize() ); assertEquals( startRowIndex, request.getStartRowIndex() ); assertEquals( isAscending, request.isAscending() ); } }