hsa.awp.scire.procedureLogic.AbstractProcedureLogicTest.java Source code

Java tutorial

Introduction

Here is the source code for hsa.awp.scire.procedureLogic.AbstractProcedureLogicTest.java

Source

/*
 * Copyright (c) 2010-2012 Matthias Klass, Johannes Leimer,
 *               Rico Lieback, Sebastian Gabriel, Lothar Gesslein,
 *               Alexander Rampp, Kai Weidner
 *
 * This file is part of the Physalix Enrollment System
 *
 * Foobar is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Foobar is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
 */

package hsa.awp.scire.procedureLogic;

import hsa.awp.campaign.facade.ICampaignFacade;
import hsa.awp.campaign.model.Campaign;
import hsa.awp.campaign.model.ConfirmedRegistration;
import hsa.awp.campaign.model.DrawProcedure;
import hsa.awp.campaign.model.FifoProcedure;
import hsa.awp.campaign.rule.ICampaignRuleChecker;
import hsa.awp.common.mail.IMail;
import hsa.awp.common.mail.IMailFactory;
import hsa.awp.event.facade.IEventFacade;
import hsa.awp.event.model.Event;
import hsa.awp.event.model.Subject;
import hsa.awp.user.facade.IUserFacade;
import hsa.awp.user.model.Group;
import hsa.awp.user.model.SingleUser;
import hsa.awp.user.model.User;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Calendar;

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

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:config/spring/AbstractProcedureLogicTest.xml")
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class AbstractProcedureLogicTest {
    @Resource(name = "campaign.facade")
    private ICampaignFacade campFac;

    @Resource(name = "event.facade")
    private IEventFacade eventFac;

    @Resource(name = "user.facade")
    private IUserFacade userFac;

    /**
     * RuleChecker to check rules for campaigns.
     */
    @Resource(name = "rule.facade")
    private ICampaignRuleChecker campaignRuleChecker;

    private AbstractProcedureLogic<FifoProcedure> abs;

    @Before
    public void setUp() throws Exception {

        SecurityContextHolder.getContext()
                .setAuthentication(new UsernamePasswordAuthenticationToken("admin", "password"));

        Mockery context = new JUnit4Mockery();
        final IMail mail = context.mock(IMail.class);
        context.checking(new Expectations() {
            {
                allowing(mail).send();
            }
        });

        IMailFactory mailFactory = new IMailFactory() {
            @Override
            public IMail getInstance(String recipient, String subject, String message, String sender) {

                return mail;
            }
        };

        this.abs = new FifoProcedureLogic();
        // Set the Factories to the AbstractRegistration
        abs.setMailFactory(mailFactory);
        abs.setUserFacade(userFac);
        abs.setEventFacade(eventFac);
        abs.setCampaignFacade(campFac);
        abs.setCampaignRuleChecker(campaignRuleChecker);
    }

    @Test(expected = RuntimeException.class)
    public void testCheckRuleGroup() {

        Group group = Group.getInstance();
        abs.checkRules(group, null);
    }

    @Test
    public void testCheckRules() {

        ICampaignRuleChecker trueDummy = new ICampaignRuleChecker() {
            @Override
            public boolean isRegistrationAllowed(SingleUser user, Campaign campaign, Event event) {

                return true;
            }
        };

        abs.setCampaignRuleChecker(trueDummy);

        FifoProcedure procedure = FifoProcedure.getInstance(0L);
        abs.setProcedure(procedure);

        SingleUser user = SingleUser.getInstance();
        abs.checkRules(user, null);
    }

    @Test(expected = IllegalStateException.class)
    public void testCheckRulesRejected() {

        ICampaignRuleChecker falseDummy = new ICampaignRuleChecker() {
            @Override
            public boolean isRegistrationAllowed(SingleUser user, Campaign campaign, Event event) {

                return false;
            }
        };

        abs.setCampaignRuleChecker(falseDummy);

        FifoProcedure procedure = FifoProcedure.getInstance(0L);
        abs.setProcedure(procedure);

        SingleUser user = SingleUser.getInstance();
        abs.checkRules(user, null);
    }

    @SuppressWarnings("unchecked")
    @Test
    @Transactional
    @Ignore
    // invalid test data
    public void testSendMail() {
        // Create Event.
        Event evt = Event.getInstance(1234, 0L);

        SingleUser singleUser5 = createUser("gesslein");
        singleUser5.setName("abc");

        // Create Subject.
        Subject sub = Subject.getInstance(0L);
        sub.setName("Bombenbau fr Anfnger");

        // Save the Subject, Event, Participant.
        // And set the Subject to the Event.
        eventFac.saveSubject(sub);
        evt.setSubject(sub);
        eventFac.saveEvent(evt);

        // Create the ConfirmedRegistration.
        Campaign camp = Campaign.getInstance(0L);

        FifoProcedure proc = FifoProcedure.getInstance(0L);
        campFac.saveFifoProcedure(proc);

        camp.addProcedure(proc);
        campFac.saveCampaign(camp);
        campFac.saveFifoProcedure(proc);

        ConfirmedRegistration conf = ConfirmedRegistration.getInstance(evt.getId(), 0L);
        conf.setParticipant(singleUser5.getId());
        conf.setProcedure(proc);

        // Send a mail
        ProcedureLogicFactory plf = new ProcedureLogicFactory();
        abs = (AbstractProcedureLogic<FifoProcedure>) plf.getInstance(FifoProcedureLogic.class);
        abs.sendMail(conf);
    }

    /**
     * Creates a user object and gives it a unique id.
     *
     * @param name - The login name of the user.
     * @return A new user object
     */
    private SingleUser createUser(String name) {

        SingleUser user = SingleUser.getInstance();
        user = userFac.saveSingleUser(user);
        return user;
    }

    @Test(expected = IllegalArgumentException.class)
    public void testSendMailNull() {

        abs.sendMail(null);
    }

    @Test(expected = IllegalArgumentException.class)
    @Transactional
    public void testSendMailWrongParticipant() {
        // Create Event.
        Event evt = Event.getInstance(42354, 0L);
        // Save the Event.
        eventFac.saveEvent(evt);

        // Create the ConfirmedRegistration. Without a Participant and a Subject. A IllegalArgumentException must appear.
        ConfirmedRegistration conf = ConfirmedRegistration.getInstance(evt.getId(), 0L);

        // Send a Mail.
        abs.sendMail(conf);
    }

    @Test
    public void testSetProcedure() {

        FifoProcedure procedure = FifoProcedure.getInstance(0L);
        assertTrue(!(procedure.equals(abs.procedure)));
        abs.setProcedure(procedure);
        assertEquals(procedure, abs.procedure);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testSetProcedureNull() {

        abs.setProcedure(null);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testSetProcedureWrong() {

        DrawProcedure procedure = DrawProcedure.getInstance(0L);
        abs.setProcedure(procedure);
    }

    @Test
    @Transactional
    public void testSingleRegistration() {

        Event evt = Event.getInstance(3456, 0L);
        evt.setMaxParticipants(5);
        eventFac.saveEvent(evt);
        User part = createUser("participant");
        SingleUser init = createUser("Kai");

        FifoProcedure procedure = FifoProcedure.getInstance(0L);
        campFac.saveFifoProcedure(procedure);

        Campaign campaign = Campaign.getInstance(0L);
        campaign.setName("testcampaign");
        campaign.addProcedure(procedure);
        campFac.saveCampaign(campaign);

        abs.setProcedure(procedure);

        ConfirmedRegistration conftest = ConfirmedRegistration.getInstance(evt.getId(), 0L);
        conftest.setDate(Calendar.getInstance());
        conftest.setExamOnly(true);
        conftest.setParticipant(part.getId());
        conftest.setInitiator(init.getId());

        campFac.saveConfirmedRegistration(conftest);

        ConfirmedRegistration conf = abs.singleRegistration(evt, part, init, true);

        assertEquals(conftest.getEventId(), conf.getEventId());
        assertEquals(conftest.getInitiator(), conf.getInitiator());
        assertEquals(conftest.getParticipant(), conf.getParticipant());
    }

    @Test(expected = IllegalArgumentException.class)
    public void testSingleRegistrationNull() {

        abs.singleRegistration(null, null, null, true);
    }

    @Test
    @Transactional
    public void testSingleRegistrationWithRule() {

        Event evt = Event.getInstance(3456, 0L);
        evt.setMaxParticipants(5);
        eventFac.saveEvent(evt);
        User part = createUser("participant");
        SingleUser init = createUser("Kai");

        FifoProcedure procedure = FifoProcedure.getInstance(0L);
        campFac.saveFifoProcedure(procedure);

        Campaign campaign = Campaign.getInstance(0L);
        campaign.setName("testcampaign");
        campaign.addProcedure(procedure);
        campFac.saveCampaign(campaign);

        abs.setProcedure(procedure);

        ConfirmedRegistration conftest = ConfirmedRegistration.getInstance(evt.getId(), 0L);
        conftest.setDate(Calendar.getInstance());
        conftest.setExamOnly(true);
        conftest.setParticipant(part.getId());
        conftest.setInitiator(init.getId());

        campFac.saveConfirmedRegistration(conftest);

        ConfirmedRegistration conf = abs.singleRegistration(evt, part, init, true);

        assertEquals(conftest.getEventId(), conf.getEventId());
        assertEquals(conftest.getInitiator(), conf.getInitiator());
        assertEquals(conftest.getParticipant(), conf.getParticipant());
    }
}