org.geoserver.taskmanager.web.AbstractBatchesPanelTest.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.taskmanager.web.AbstractBatchesPanelTest.java

Source

/* (c) 2017-2018 Open Source Geospatial Foundation - all rights reserved
 * This code is licensed under the GPL 2.0 license, available at the root
 * application directory.
 */
package org.geoserver.taskmanager.web;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.Page;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.form.CheckBox;
import org.geoserver.taskmanager.AbstractWicketTaskManagerTest;
import org.geoserver.taskmanager.data.Batch;
import org.geoserver.taskmanager.data.Configuration;
import org.geoserver.taskmanager.data.TaskManagerDao;
import org.geoserver.taskmanager.data.TaskManagerFactory;
import org.geoserver.taskmanager.util.TaskManagerBeans;
import org.geoserver.web.wicket.GeoServerDialog;
import org.geoserver.web.wicket.GeoServerTablePanel;
import org.junit.Before;
import org.junit.Test;

public abstract class AbstractBatchesPanelTest<T extends Page> extends AbstractWicketTaskManagerTest {

    protected TaskManagerFactory fac;
    protected TaskManagerDao dao;

    @Before
    public void before() {
        fac = TaskManagerBeans.get().getFac();
        dao = TaskManagerBeans.get().getDao();
    }

    protected abstract Configuration getConfiguration();

    protected abstract Collection<Batch> getBatches();

    protected abstract T newPage();

    protected abstract String prefix();

    protected Batch dummyBatch1() {
        Batch batch = fac.createBatch();
        batch.setName("Z-BATCH");
        batch.setConfiguration(getConfiguration());
        return batch;
    }

    protected Batch dummyBatch2() {
        Batch batch = fac.createBatch();
        batch.setName("A-BATCH");
        batch.setConfiguration(getConfiguration());
        return batch;
    }

    @Test
    public void testPage() {
        T page = newPage();

        tester.startPage(page);

        tester.assertComponent(prefix() + "batchesPanel:form:batchesPanel", GeoServerTablePanel.class);
        tester.assertComponent(prefix() + "batchesPanel:dialog", GeoServerDialog.class);

        tester.assertComponent(prefix() + "batchesPanel:addNew", AjaxLink.class);
        tester.assertComponent(prefix() + "batchesPanel:removeSelected", AjaxLink.class);
    }

    @Test
    public void testBatches() throws Exception {
        Batch dummy1 = dao.save(dummyBatch1());
        Batch dummy2 = dao.save(dummyBatch2());

        T page = newPage();

        Collection<Batch> batches = getBatches();

        tester.startPage(page);

        @SuppressWarnings("unchecked")
        GeoServerTablePanel<Batch> table = (GeoServerTablePanel<Batch>) tester
                .getComponentFromLastRenderedPage(prefix() + "batchesPanel:form:batchesPanel");

        assertEquals(batches.size(), table.getDataProvider().size());
        assertTrue(containsBatch(getBatchesFromTable(table), dummy1));
        assertTrue(containsBatch(getBatchesFromTable(table), dummy2));

        dao.delete(dummy1);
        dao.delete(dummy2);
    }

    @Test
    public void testNew() {
        login();

        T page = newPage();
        tester.startPage(page);

        tester.clickLink(prefix() + "batchesPanel:addNew");

        tester.assertRenderedPage(BatchPage.class);
    }

    @Test
    public void testEdit() {
        login();

        Batch dummy1 = dao.save(dummyBatch1());

        T page = newPage();
        tester.startPage(page);

        tester.clickLink(
                prefix() + "batchesPanel:form:batchesPanel:listContainer:items:1:itemProperties:1:component:link");

        tester.assertRenderedPage(BatchPage.class);

        tester.assertModelValue("batchForm:name", dummy1.getName());

        dao.delete(dummy1);
    }

    @Test
    public void testDelete() throws Exception {

        Batch dummy1 = dao.save(dummyBatch1());
        Batch dummy2 = dao.save(dummyBatch2());

        T page = newPage();
        tester.startPage(page);

        @SuppressWarnings("unchecked")
        GeoServerTablePanel<Batch> table = (GeoServerTablePanel<Batch>) tester
                .getComponentFromLastRenderedPage(prefix() + "batchesPanel:form:batchesPanel");

        assertTrue(containsBatch(getBatches(), dummy1));
        assertTrue(containsBatch(getBatches(), dummy2));

        // sort descending on name
        tester.clickLink(prefix() + "batchesPanel:form:batchesPanel:listContainer:sortableLinks:1:header:link");
        tester.clickLink(prefix() + "batchesPanel:form:batchesPanel:listContainer:sortableLinks:1:header:link");

        // select
        CheckBox selector = ((CheckBox) tester.getComponentFromLastRenderedPage(
                prefix() + "batchesPanel:form:batchesPanel:listContainer:items:1:selectItemContainer:selectItem"));
        tester.getRequest().setParameter(selector.getInputName(), "true");
        tester.executeAjaxEvent(selector, "click");

        assertEquals(1, table.getSelection().size());
        assertEquals(dummy1.getId(), table.getSelection().get(0).getId());

        // click delete
        ModalWindow w = (ModalWindow) tester
                .getComponentFromLastRenderedPage(prefix() + "batchesPanel:dialog:dialog");
        assertFalse(w.isShown());
        tester.clickLink(prefix() + "batchesPanel:removeSelected");
        assertTrue(w.isShown());

        // confirm
        tester.executeAjaxEvent(prefix() + "batchesPanel:dialog:dialog:content:form:submit", "click");

        assertFalse(containsBatch(getBatches(), dummy1));
        assertTrue(containsBatch(getBatches(), dummy2));

        assertFalse(containsBatch(getBatchesFromTable(table), dummy1));
        assertTrue(containsBatch(getBatchesFromTable(table), dummy2));

        dao.delete(dummy2);
    }

    protected List<Batch> getBatchesFromTable(GeoServerTablePanel<Batch> table) {
        List<Batch> result = new ArrayList<Batch>();
        Iterator<Batch> it = table.getDataProvider().iterator(0, table.size());
        while (it.hasNext()) {
            result.add(it.next());
        }
        return result;
    }

    protected boolean containsBatch(Collection<Batch> coll, Batch batch) {
        for (Batch c : coll) {
            if (batch.getId().equals(c.getId())) {
                return true;
            }
        }
        return false;
    }
}