org.geoserver.gwc.web.blob.BlobStoresPageTest.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.gwc.web.blob.BlobStoresPageTest.java

Source

/* (c) 2015 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.gwc.web.blob;

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

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.apache.wicket.ajax.AjaxRequestTarget;
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.gwc.GWC;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.geoserver.web.wicket.GeoServerDialog;
import org.geoserver.web.wicket.GeoServerTablePanel;
import org.geowebcache.config.BlobStoreConfig;
import org.geowebcache.config.FileBlobStoreConfig;
import org.geowebcache.layer.TileLayer;
import org.junit.Test;

/**
 * 
 * Test for the BlobStoresPage
 * 
 * @author Niels Charlier
 *
 */
public class BlobStoresPageTest extends GeoServerWicketTestSupport {

    private static final String ID_DUMMY1 = "zzz";
    private static final String ID_DUMMY2 = "yyy";

    public BlobStoreConfig dummyStore1() {
        FileBlobStoreConfig config = new FileBlobStoreConfig(ID_DUMMY1);
        config.setFileSystemBlockSize(1024);
        config.setBaseDirectory("/tmp");
        return config;
    }

    public BlobStoreConfig dummyStore2() throws Exception {
        FileBlobStoreConfig config = new FileBlobStoreConfig(ID_DUMMY2);
        config.setFileSystemBlockSize(1024);
        config.setBaseDirectory("/tmp");
        return config;
    }

    @Test
    public void testPage() {
        BlobStoresPage page = new BlobStoresPage();

        tester.startPage(page);
        tester.assertRenderedPage(BlobStoresPage.class);

        tester.assertComponent("storesPanel", GeoServerTablePanel.class);
        tester.assertComponent("confirmDeleteDialog", GeoServerDialog.class);

        tester.assertComponent("headerPanel:addNew", AjaxLink.class);
        tester.assertComponent("headerPanel:removeSelected", AjaxLink.class);
    }

    @Test
    public void testBlobStores() throws Exception {
        BlobStoresPage page = new BlobStoresPage();

        BlobStoreConfig dummy1 = dummyStore1();
        GWC.get().addBlobStore(dummy1);

        List<BlobStoreConfig> blobStores = GWC.get().getBlobStores();

        tester.startPage(page);

        GeoServerTablePanel table = (GeoServerTablePanel) tester.getComponentFromLastRenderedPage("storesPanel");

        assertEquals(blobStores.size(), table.getDataProvider().size());
        assertTrue(getStoresFromTable(table).contains(dummy1));

        BlobStoreConfig dummy2 = dummyStore2();
        GWC.get().addBlobStore(dummy2);

        assertEquals(blobStores.size() + 1, table.getDataProvider().size());
        assertTrue(getStoresFromTable(table).contains(dummy2));

        GWC.get().removeBlobStores(Collections.singleton(ID_DUMMY1));
        GWC.get().removeBlobStores(Collections.singleton(ID_DUMMY2));

    }

    @Test
    public void testNew() {
        BlobStoresPage page = new BlobStoresPage();
        tester.startPage(page);

        tester.clickLink("headerPanel:addNew", true);

        tester.assertRenderedPage(BlobStorePage.class);
    }

    @Test
    public void testDelete() throws Exception {
        BlobStoresPage page = new BlobStoresPage();
        tester.startPage(page);

        GeoServerTablePanel table = (GeoServerTablePanel) tester.getComponentFromLastRenderedPage("storesPanel");

        BlobStoreConfig dummy1 = dummyStore1();
        GWC.get().addBlobStore(dummy1);

        assertTrue(GWC.get().getBlobStores().contains(dummy1));

        //sort descending on id
        tester.clickLink("storesPanel:listContainer:sortableLinks:0:header:link", true);
        tester.clickLink("storesPanel:listContainer:sortableLinks:0:header:link", true);

        //select
        CheckBox selector = ((CheckBox) tester.getComponentFromLastRenderedPage(
                "storesPanel:listContainer:items:1:selectItemContainer:selectItem"));
        tester.getServletRequest().setParameter(selector.getInputName(), "true");
        tester.executeAjaxEvent(selector, "onclick");

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

        //click delete
        tester.clickLink("headerPanel:removeSelected", true);

        assertFalse(GWC.get().getBlobStores().contains(dummy1));

        //with layer
        GWC.get().addBlobStore(dummy1);
        assertTrue(GWC.get().getBlobStores().contains(dummy1));
        TileLayer layer = GWC.get().getTileLayerByName("cite:Lakes");
        layer.setBlobStoreId(ID_DUMMY1);
        assertEquals(ID_DUMMY1, layer.getBlobStoreId());
        GWC.get().save(layer);

        //sort descending on id
        tester.clickLink("storesPanel:listContainer:sortableLinks:0:header:link", true);
        tester.clickLink("storesPanel:listContainer:sortableLinks:0:header:link", true);

        //select
        //super.print(page, false, false, true);
        selector = ((CheckBox) tester.getComponentFromLastRenderedPage(
                "storesPanel:listContainer:items:2:selectItemContainer:selectItem"));
        tester.getServletRequest().setParameter(selector.getInputName(), "true");
        tester.executeAjaxEvent(selector, "onclick");

        //click delete
        assertEquals(1, table.getSelection().size());
        assertEquals(dummy1, table.getSelection().get(0));

        ModalWindow w = (ModalWindow) tester.getComponentFromLastRenderedPage("confirmDeleteDialog:dialog");
        assertFalse(w.isShown());
        tester.clickLink("headerPanel:removeSelected", true);
        assertTrue(w.isShown());

        //confirm      
        GeoServerDialog dialog = (GeoServerDialog) tester.getComponentFromLastRenderedPage("confirmDeleteDialog");
        dialog.submit(new AjaxRequestTarget(tester.getLastRenderedPage()));

        assertFalse(GWC.get().getBlobStores().contains(dummy1));
        layer = GWC.get().getTileLayerByName("cite:Lakes");
        assertNull(layer.getBlobStoreId());

    }

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

    }

}