org.motechproject.server.omod.web.controller.MotechModuleFormControllerTest.java Source code

Java tutorial

Introduction

Here is the source code for org.motechproject.server.omod.web.controller.MotechModuleFormControllerTest.java

Source

/**
 * MOTECH PLATFORM OPENSOURCE LICENSE AGREEMENT
 *
 * Copyright (c) 2010-11 The Trustees of Columbia University in the City of
 * New York and Grameen Foundation USA.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. Neither the name of Grameen Foundation USA, Columbia University, or
 * their respective contributors may be used to endorse or promote products
 * derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY GRAMEEN FOUNDATION USA, COLUMBIA UNIVERSITY
 * AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GRAMEEN FOUNDATION
 * USA, COLUMBIA UNIVERSITY OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package org.motechproject.server.omod.web.controller;

import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;

import java.sql.Time;
import java.text.ParseException;

import junit.framework.TestCase;

import org.easymock.Capture;
import org.motechproject.server.model.Blackout;
import org.motechproject.server.model.TroubledPhone;
import org.motechproject.server.service.ContextService;
import org.motechproject.server.service.MotechService;
import org.motechproject.server.svc.RegistrarBean;
import org.springframework.ui.ModelMap;

public class MotechModuleFormControllerTest extends TestCase {

    RegistrarBean registrarBean;
    MotechModuleFormController controller;
    ContextService contextService;
    MotechService motechService;

    @Override
    protected void setUp() {
        registrarBean = createMock(RegistrarBean.class);
        motechService = createMock(MotechService.class);
        contextService = createMock(ContextService.class);
        controller = new MotechModuleFormController();
        controller.setRegistrarBean(registrarBean);
        controller.setContextService(contextService);
    }

    @Override
    protected void tearDown() {
        controller = null;
        registrarBean = null;
    }

    public void testViewBlackoutForm() throws ParseException {

        Time startTime = Time.valueOf("07:00:00"), endTime = Time.valueOf("19:00:00");

        Blackout interval = new Blackout(startTime, endTime);
        expect(contextService.getMotechService()).andReturn(motechService);
        expect(motechService.getBlackoutSettings()).andReturn(interval);

        replay(contextService, motechService);

        ModelMap model = new ModelMap();
        String path = controller.viewBlackoutSettings(model);

        verify(contextService, motechService);

        assertEquals("/module/motechmodule/blackout", path);
        assertEquals(model.get("startTime"), startTime);
        assertEquals(model.get("endTime"), endTime);
    }

    public void testViewBlackoutFormNoData() throws ParseException {
        expect(contextService.getMotechService()).andReturn(motechService);
        expect(motechService.getBlackoutSettings()).andReturn(null);

        replay(contextService, motechService);

        ModelMap model = new ModelMap();
        String path = controller.viewBlackoutSettings(model);

        verify(contextService, motechService);

        assertEquals("/module/motechmodule/blackout", path);
    }

    public void testSaveBlackoutSettings() throws ParseException {

        String startTime = "07:00:00", endTime = "19:00:00";

        Capture<Blackout> boCap = new Capture<Blackout>();

        expect(contextService.getMotechService()).andReturn(motechService);

        expect(motechService.getBlackoutSettings()).andReturn(null);
        motechService.setBlackoutSettings(capture(boCap));

        replay(contextService, motechService);

        ModelMap model = new ModelMap();
        String path = controller.saveBlackoutSettings(startTime, endTime, model);

        verify(contextService, motechService);

        assertEquals("/module/motechmodule/blackout", path);
        assertEquals(startTime, model.get("startTime").toString());
        assertEquals(endTime, model.get("endTime").toString());
        assertEquals(startTime, boCap.getValue().getStartTime().toString());
        assertEquals(endTime, boCap.getValue().getEndTime().toString());
    }

    public void testUpdateBlackoutSettings() throws ParseException {

        String startTime = "07:00:00", endTime = "19:00:00";

        Capture<Blackout> boCap = new Capture<Blackout>();

        expect(contextService.getMotechService()).andReturn(motechService);

        Blackout blackout = new Blackout(null, null);
        expect(motechService.getBlackoutSettings()).andReturn(blackout);
        motechService.setBlackoutSettings(capture(boCap));

        replay(contextService, motechService);

        ModelMap model = new ModelMap();
        String path = controller.saveBlackoutSettings(startTime, endTime, model);

        verify(contextService, motechService);

        assertEquals("/module/motechmodule/blackout", path);
        assertEquals(startTime, model.get("startTime").toString());
        assertEquals(endTime, model.get("endTime").toString());
        assertEquals(startTime, boCap.getValue().getStartTime().toString());
        assertEquals(endTime, boCap.getValue().getEndTime().toString());
    }

    public void testLookupTroubledPhoneNoPhone() {

        String phone = null;

        ModelMap model = new ModelMap();
        String path = controller.handleTroubledPhone(phone, null, model);

        assertNull(model.get("troubledPhone"));
        assertEquals("/module/motechmodule/troubledphone", path);
    }

    public void testLookupTroubledPhone() {

        String phone = "378378373";
        TroubledPhone tp = new TroubledPhone();
        tp.setId(38903L);
        tp.setPhoneNumber(phone);

        expect(contextService.getMotechService()).andReturn(motechService);
        expect(motechService.getTroubledPhone(phone)).andReturn(tp);

        replay(contextService, motechService);

        ModelMap model = new ModelMap();
        String path = controller.handleTroubledPhone(phone, null, model);

        verify(contextService, motechService);

        assertEquals(tp, model.get("troubledPhone"));
        assertEquals("/module/motechmodule/troubledphone", path);
    }

    public void testRemoveTroubledPhone() {
        String phone = "378378373";
        TroubledPhone tp = new TroubledPhone();
        tp.setId(38903L);
        tp.setPhoneNumber(phone);

        expect(contextService.getMotechService()).andReturn(motechService);
        expect(motechService.getTroubledPhone(phone)).andReturn(tp);
        motechService.removeTroubledPhone(phone);

        replay(contextService, motechService);

        ModelMap model = new ModelMap();
        String path = controller.handleTroubledPhone(phone, true, model);

        verify(contextService, motechService);

        assertNull(model.get("troubledPhone"));
        assertEquals("redirect:/module/motechmodule/troubledphone.form", path);
    }
}