Package org.apache.rave.portal.service.impl

Source Code of org.apache.rave.portal.service.impl.DefaultRegionWidgetServiceTest

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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.apache.rave.portal.service.impl;

import org.apache.commons.lang.StringUtils;
import org.apache.rave.portal.model.RegionWidget;
import org.apache.rave.portal.model.RegionWidgetPreference;
import org.apache.rave.portal.model.impl.RegionWidgetImpl;
import org.apache.rave.portal.model.impl.RegionWidgetPreferenceImpl;
import org.apache.rave.portal.repository.RegionWidgetRepository;
import org.apache.rave.portal.service.RegionWidgetService;
import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.easymock.EasyMock.*;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

public class DefaultRegionWidgetServiceTest {
    private RegionWidgetRepository regionWidgetRepository;
    private RegionWidgetService regionWidgetService;

    final String VALID_REGION_WIDGET_ID = "1";
    final String INVALID_REGION_WIDGET_ID = "100";

    @Before
    public void setup() {
        regionWidgetRepository = createNiceMock(RegionWidgetRepository.class);
        regionWidgetService = new DefaultRegionWidgetService(regionWidgetRepository);
    }

    @Test
    public void getRegionWidget_validId() {
        final RegionWidget VALID_REGION_WIDGET = new RegionWidgetImpl(VALID_REGION_WIDGET_ID);

        expect(regionWidgetRepository.get(VALID_REGION_WIDGET_ID)).andReturn(VALID_REGION_WIDGET);
        replay(regionWidgetRepository);

        assertThat(regionWidgetService.getRegionWidget(VALID_REGION_WIDGET_ID), sameInstance(VALID_REGION_WIDGET));
    }

    @Test
    public void getRegionWidget_invalidId() {
        expect(regionWidgetRepository.get(INVALID_REGION_WIDGET_ID)).andReturn(null);
        replay(regionWidgetRepository);

        assertThat(regionWidgetService.getRegionWidget(INVALID_REGION_WIDGET_ID), is(nullValue()));
    }

    @Test
    public void saveRegionWidget() {
        final RegionWidget VALID_REGION_WIDGET = new RegionWidgetImpl(VALID_REGION_WIDGET_ID);

        expect(regionWidgetRepository.save(VALID_REGION_WIDGET)).andReturn(VALID_REGION_WIDGET);
        replay(regionWidgetRepository);

        assertThat(regionWidgetService.saveRegionWidget(VALID_REGION_WIDGET), sameInstance(VALID_REGION_WIDGET));
    }

    @Test
    public void saveRegionWidgetPreferences() {
        final RegionWidget VALID_REGION_WIDGET = new RegionWidgetImpl(VALID_REGION_WIDGET_ID);
        VALID_REGION_WIDGET.setPreferences(getTestExistingRegionWidgetPreferences());

        expect(regionWidgetRepository.get(VALID_REGION_WIDGET_ID)).andReturn(VALID_REGION_WIDGET);
        expect(regionWidgetRepository.save(VALID_REGION_WIDGET)).andReturn(VALID_REGION_WIDGET);
        replay(regionWidgetRepository);

        //Make sure that removing and changing existing preferences is handled properly, and also ensure adding a preference works.
        List<RegionWidgetPreference> updatedPreferences = getTestUpdatedRegionWidgetPreferences();
        List<RegionWidgetPreference> savedPreferences = regionWidgetService.saveRegionWidgetPreferences(VALID_REGION_WIDGET_ID, updatedPreferences);
        assertTrue(preferenceCollectionsMatch(updatedPreferences, savedPreferences));
        assertTrue(preferencesHaveValidRegionWidgetId(savedPreferences));
    }

    @Test
    public void saveRegionWidgetPreference() {
        final RegionWidget VALID_REGION_WIDGET = new RegionWidgetImpl(VALID_REGION_WIDGET_ID);
        VALID_REGION_WIDGET.setPreferences(getTestExistingRegionWidgetPreferences());

        expect(regionWidgetRepository.get(VALID_REGION_WIDGET_ID)).andReturn(VALID_REGION_WIDGET).anyTimes();
        expect(regionWidgetRepository.save(VALID_REGION_WIDGET)).andReturn(VALID_REGION_WIDGET).anyTimes();
        replay(regionWidgetRepository);

        //Add and update a preference.
        RegionWidgetPreference newPreference = new RegionWidgetPreferenceImpl(null, "age", "30");
        RegionWidgetPreference savedNewPreference = regionWidgetService.saveRegionWidgetPreference(VALID_REGION_WIDGET_ID, newPreference);
        RegionWidgetPreference updatedPreference = new RegionWidgetPreferenceImpl(null, "color", "purple");
        RegionWidgetPreference savedUpdatedPreference = regionWidgetService.saveRegionWidgetPreference(VALID_REGION_WIDGET_ID, updatedPreference);

        //Make sure the new and updated preference got mixed in properly with the existing preferences.
        List<RegionWidgetPreference> existingPreferences = getTestExistingRegionWidgetPreferences();
        existingPreferences.add(savedNewPreference);
        existingPreferences.get(0).setValue("purple");
        assertTrue(preferenceCollectionsMatch(existingPreferences, VALID_REGION_WIDGET.getPreferences()));
        assertTrue(preferencesHaveValidRegionWidgetId(VALID_REGION_WIDGET.getPreferences()));
    }
       
    @Test
    public void saveRegionWidgetCollapsedState() {
        final boolean COLLAPSED = true;
        RegionWidget regionWidget = new RegionWidgetImpl(VALID_REGION_WIDGET_ID);
       
        expect(regionWidgetRepository.get(VALID_REGION_WIDGET_ID)).andReturn(regionWidget);               
        regionWidget.setCollapsed(COLLAPSED);
        expect(regionWidgetRepository.save(regionWidget)).andReturn(regionWidget);
        replay(regionWidgetRepository);

        assertThat(regionWidgetService.saveRegionWidgetCollapsedState(VALID_REGION_WIDGET_ID, COLLAPSED).isCollapsed(), is(COLLAPSED));
    }

    @Test(expected=IllegalArgumentException.class)
    public void saveRegionWidgetCollapsedState_invalidWidgetId() {
        final boolean COLLAPSED = true;
     
        expect(regionWidgetRepository.get(INVALID_REGION_WIDGET_ID)).andReturn(null)
        replay(regionWidgetRepository);

        regionWidgetService.saveRegionWidgetCollapsedState(INVALID_REGION_WIDGET_ID, COLLAPSED);
    }   
   
    private boolean preferencesHaveValidRegionWidgetId(List<RegionWidgetPreference> savedPreferences) {
        for (RegionWidgetPreference savedPreference : savedPreferences) {
            if (!savedPreference.getRegionWidgetId().equals(VALID_REGION_WIDGET_ID)) {
                return false;
            }
        }

        return true;
    }

    private boolean preferenceCollectionsMatch(List<RegionWidgetPreference> updatedPreferences, List<RegionWidgetPreference> savedPreferences) {
        Map<String, RegionWidgetPreference> updatedPreferencesMap = new HashMap<String, RegionWidgetPreference>();

        //Make sure they're the same size
        if (updatedPreferences.size() != savedPreferences.size()) {
            return false;
        }

        //Map out the updated preferences so we can compare them to the saved preferences
        for (RegionWidgetPreference updatedPreference : updatedPreferences) {
            updatedPreferencesMap.put(updatedPreference.getName(), updatedPreference);
        }

        //We know the lists are the same length - so as long as all the savedPreferences exist and match the updated
        //preferences then we are all good.
        for (RegionWidgetPreference savedPreference : savedPreferences) {
            RegionWidgetPreference updatedPreference = updatedPreferencesMap.get(savedPreference.getName());
            if (updatedPreference == null || !StringUtils.equals(savedPreference.getName(), updatedPreference.getName())
                    || !StringUtils.equals(savedPreference.getValue(), updatedPreference.getValue())) {
                return false;
            }
        }

        return true;
    }

    private List<RegionWidgetPreference> getTestExistingRegionWidgetPreferences() {
        ArrayList<RegionWidgetPreference> regionWidgetPreferences = new ArrayList<RegionWidgetPreference>();
        regionWidgetPreferences.add(new RegionWidgetPreferenceImpl(VALID_REGION_WIDGET_ID, "color", "blue"));
        regionWidgetPreferences.add(new RegionWidgetPreferenceImpl(VALID_REGION_WIDGET_ID, "speed", "fast"));
        return regionWidgetPreferences;
    }

    private List<RegionWidgetPreference> getTestUpdatedRegionWidgetPreferences() {
        List<RegionWidgetPreference> regionWidgetPreferences = getTestExistingRegionWidgetPreferences();
        regionWidgetPreferences.remove(0);
        regionWidgetPreferences.get(0).setValue("slow");
        regionWidgetPreferences.add(new RegionWidgetPreferenceImpl(VALID_REGION_WIDGET_ID, "size", "small"));
        return regionWidgetPreferences;
    }
}
TOP

Related Classes of org.apache.rave.portal.service.impl.DefaultRegionWidgetServiceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.