Package com.apress.progwt.server.service.impl

Source Code of com.apress.progwt.server.service.impl.SchoolServiceImplTest

package com.apress.progwt.server.service.impl;

import java.util.Calendar;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.test.AssertThrows;

import com.apress.progwt.client.domain.Application;
import com.apress.progwt.client.domain.ForumPost;
import com.apress.progwt.client.domain.ProcessType;
import com.apress.progwt.client.domain.ProcessValue;
import com.apress.progwt.client.domain.RatingType;
import com.apress.progwt.client.domain.School;
import com.apress.progwt.client.domain.SchoolForumPost;
import com.apress.progwt.client.domain.User;
import com.apress.progwt.client.domain.commands.RemoveSchoolFromRankCommand;
import com.apress.progwt.client.domain.commands.SaveApplicationCommand;
import com.apress.progwt.client.domain.commands.SaveForumPostCommand;
import com.apress.progwt.client.domain.commands.SaveProcessCommand;
import com.apress.progwt.client.domain.commands.SaveRatingCommand;
import com.apress.progwt.client.domain.commands.SaveSchoolRankCommand;
import com.apress.progwt.client.domain.commands.SiteCommand;
import com.apress.progwt.client.domain.dto.PostsList;
import com.apress.progwt.client.exception.SiteException;
import com.apress.progwt.client.exception.SiteSecurityException;
import com.apress.progwt.server.dao.SchoolDAO;
import com.apress.progwt.server.dao.UserDAO;
import com.apress.progwt.server.service.SchoolService;
import com.apress.progwt.server.service.UserService;

public class SchoolServiceImplTest extends
        AbstractServiceTestWithTransaction {

    private static final Logger log = Logger
            .getLogger(SchoolServiceImplTest.class);
    private static final String TITLE = "test title";
    private static final String TEXT = "test textaroo<b>with bold</b>";
    private static final String A = "a text string";
    private static final String B = "text with sdafns2389793";
    private static final String C = "more text";

    private SchoolDAO schoolDAO;
    private UserDAO userDAO;
    private SchoolService schoolService;
    private UserService userService;

    @Override
    protected void onSetUp() throws Exception {
        super.onSetUp();
        clean();
    }

    private void clean() {

        // TODO Auto-generated method stub

    }

    public void testBigSave() {

        School sc = schoolService.getSchoolDetails("Dartmouth College");
        assertNotNull(sc);

        User currentUser = getUser();

        assertEquals(0, currentUser.getSchoolRankings().size());

        System.out.println("currentUser " + currentUser);

        Application sap = new Application(sc);
        currentUser.addRanked(sap);

        String NAME = "Mailed";
        ProcessType processType = new ProcessType(NAME);
        currentUser.getProcessTypes().add(processType);

        ProcessValue processValue = new ProcessValue();
        sap.getProcess().put(processType, processValue);

        schoolDAO.save(currentUser);

        User savedUser = userDAO.getUserByUsername(currentUser
                .getUsername());
        assertEquals(1, savedUser.getSchoolRankings().size());

        assertEquals(9, savedUser.getProcessTypes().size());

        ProcessType savedPT = null;
        // iterate to the last one
        Iterator i = currentUser.getProcessTypes().iterator();
        while (i.hasNext()) {
            savedPT = (ProcessType) i.next();
        }
        assertEquals(NAME, savedPT.getName());

        Application savedSAP = savedUser.getSchoolRankings().get(0);

        ProcessValue savedPValue = savedSAP.getProcess().get(savedPT);

        assertNotNull(savedPValue);
        assertEquals(0.0, savedPValue.getPctComplete());

    }

    /**
     * use this instead of userService.getCurrentUser() because that will
     * save instances between transactions
     *
     * @return
     */
    private User getUser() {
        User currentUser = userService.getCurrentUser();
        User savedUser = userDAO.getUserByUsernameFetchAll(currentUser
                .getUsername());
        return savedUser;
    }

    public void testBigSaveAgain() {
        log.debug("\n\nSave Again\n\n");
        School sc = schoolService.getSchoolDetails("Dartmouth College");
        assertNotNull(sc);

        User currentUser = getUser();
        assertEquals(0, currentUser.getSchoolRankings().size());

        currentUser.addRanked(new Application(sc));

        schoolDAO.save(currentUser);

        User savedUser = userDAO.getUserByUsername(currentUser
                .getUsername());
        assertEquals(1, savedUser.getSchoolRankings().size());

    }

    public void testSaveSchoolRanking() throws SiteException {
        log.debug("\n\nSaveSchoolRankings\n\n");
        School dart = schoolService.getSchoolDetails("Dartmouth College");
        School harvard = schoolService
                .getSchoolDetails("Harvard University");
        School yale = schoolService.getSchoolDetails("Yale University");
        assertNotNull(dart);
        assertNotNull(harvard);
        assertNotNull(yale);

        // Save in order to Dart/Harvard/Yale
        SaveSchoolRankCommand comm = new SaveSchoolRankCommand(dart,
                getUser(), 0);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(harvard, getUser(), 1);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(yale, getUser(), 2);
        executeWithToken(comm, false);

        User savedUser = getUser();
        assertEquals(3, savedUser.getSchoolRankings().size());

        assertEquals(dart, savedUser.getSchoolRankings().get(0)
                .getSchool());
        assertEquals(harvard, savedUser.getSchoolRankings().get(1)
                .getSchool());
        assertEquals(yale, savedUser.getSchoolRankings().get(2)
                .getSchool());

        log.debug("\n------Re-Order--------");

        // re-order to Dart,Yale,Harvard
        comm = new SaveSchoolRankCommand(harvard, getUser(), 2);
        executeWithToken(comm, false);

        savedUser = getUser();
        assertEquals(3, savedUser.getSchoolRankings().size());

        assertEquals(dart, savedUser.getSchoolRankings().get(0)
                .getSchool());
        assertEquals(yale, savedUser.getSchoolRankings().get(1)
                .getSchool());
        assertEquals(harvard, savedUser.getSchoolRankings().get(2)
                .getSchool());

        // re-order to Harvard,Dart,Yale
        comm = new SaveSchoolRankCommand(harvard, getUser(), 0);
        executeWithToken(comm, false);

        savedUser = getUser();
        assertEquals(3, savedUser.getSchoolRankings().size());

        assertEquals(harvard, savedUser.getSchoolRankings().get(0)
                .getSchool());
        assertEquals(dart, savedUser.getSchoolRankings().get(1)
                .getSchool());
        assertEquals(yale, savedUser.getSchoolRankings().get(2)
                .getSchool());

    }

    public void testSaveSchoolRankingWithDelete() throws SiteException {

        School dart = schoolService.getSchoolDetails("Dartmouth College");
        School harvard = schoolService
                .getSchoolDetails("Harvard University");
        School yale = schoolService.getSchoolDetails("Yale University");

        // Save in order to Dart/Harvard/Yale
        SaveSchoolRankCommand comm = new SaveSchoolRankCommand(dart,
                getUser(), 0);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(harvard, getUser(), 1);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(yale, getUser(), 2);
        executeWithToken(comm, false);

        User currentUser = userService.getCurrentUser();
        User savedUser = userDAO.getUserByUsername(currentUser
                .getUsername());
        assertEquals(3, savedUser.getSchoolRankings().size());

        assertEquals(dart, savedUser.getSchoolRankings().get(0)
                .getSchool());
        assertEquals(harvard, savedUser.getSchoolRankings().get(1)
                .getSchool());
        assertEquals(yale, savedUser.getSchoolRankings().get(2)
                .getSchool());

        log.debug("\n\nDo Remove\n");
        // remove middle to Dart/Yale
        RemoveSchoolFromRankCommand comm2 = new RemoveSchoolFromRankCommand(
                harvard, getUser());
        executeWithToken(comm2, false);

        savedUser = userDAO.getUserByUsername(currentUser.getUsername());
        assertEquals(2, savedUser.getSchoolRankings().size());

        assertEquals(dart, savedUser.getSchoolRankings().get(0)
                .getSchool());
        assertEquals(yale, savedUser.getSchoolRankings().get(1)
                .getSchool());

        assertEquals(0, savedUser.getSchoolRankings().get(0)
                .getSortOrder());
        assertEquals(1, savedUser.getSchoolRankings().get(1)
                .getSortOrder());
    }

    public void testSaveProcessTypes() throws SiteException {
        log.debug("\ntestSaveProcessTypes\n\n");
        School dart = schoolService.getSchoolDetails("Dartmouth College");
        School harvard = schoolService
                .getSchoolDetails("Harvard University");
        School yale = schoolService.getSchoolDetails("Yale University");

        // Save in order to Dart/Harvard/Yale
        SaveSchoolRankCommand comm = new SaveSchoolRankCommand(dart,
                getUser(), 0);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(harvard, getUser(), 1);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(yale, getUser(), 2);
        executeWithToken(comm, false);

        User savedUser = getUser();
        assertEquals(3, savedUser.getSchoolRankings().size());

        Application dartApplication = savedUser.getSchoolRankings()
                .get(0);

        assertEquals(dart, dartApplication.getSchool());

        ProcessType considering = getUser().getProcessTypes().get(0);

        ProcessValue processValue = new ProcessValue();
        Calendar d = Calendar.getInstance();
        d.set(2005, 3, 10);
        processValue.setDueDate(d.getTime());
        processValue.setPctComplete(.34);

        // re-order to Harvard,Dart,Yale
        SaveProcessCommand processComm = new SaveProcessCommand(
                dartApplication, considering, processValue);
        executeWithToken(processComm, false);

        User savedUser2 = getUser();

        Application savedDart = savedUser2.getSchoolRankings().get(0);
        ProcessValue savedValue = savedDart.getProcess().get(considering);

        assertEquals(.34, savedValue.getPctComplete());
        assertEquals(2005, savedValue.getDueDate().getYear() + 1900);

    }

    public void testSaveRatingTypes() throws SiteException {
        log.debug("\n\nSaveratingTypes\n\n");
        School dart = schoolService.getSchoolDetails("Dartmouth College");
        School harvard = schoolService
                .getSchoolDetails("Harvard University");
        School yale = schoolService.getSchoolDetails("Yale University");

        // Save in order to Dart/Harvard/Yale
        SaveSchoolRankCommand comm = new SaveSchoolRankCommand(dart,
                getUser(), 0);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(harvard, getUser(), 1);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(yale, getUser(), 2);
        executeWithToken(comm, false);

        User savedUser = getUser();
        assertEquals(3, savedUser.getSchoolRankings().size());

        Application dartApplication = savedUser.getSchoolRankings()
                .get(0);

        assertEquals(dart, dartApplication.getSchool());

        RatingType ratingOne = getUser().getRatingTypes().get(0);
        RatingType ratingTwo = getUser().getRatingTypes().get(1);

        SaveRatingCommand command = new SaveRatingCommand(ratingOne, 3,
                dartApplication);

        executeWithToken(command, false);

        User savedUser2 = getUser();

        Application savedDart = savedUser2.getSchoolRankings().get(0);

        assertEquals(3, savedDart.getRating(ratingOne));
        assertEquals(5, savedDart.getRating(ratingTwo));

    }

    public void testSaveApplications() throws SiteException {
        log.debug("\n\nSaveratingTypes\n\n");
        School dart = schoolService.getSchoolDetails("Dartmouth College");
        School harvard = schoolService
                .getSchoolDetails("Harvard University");
        School yale = schoolService.getSchoolDetails("Yale University");

        // Save in order to Dart/Harvard/Yale
        SaveSchoolRankCommand comm = new SaveSchoolRankCommand(dart,
                getUser(), 0);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(harvard, getUser(), 1);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(yale, getUser(), 2);
        executeWithToken(comm, false);

        User savedUser = getUser();
        assertEquals(3, savedUser.getSchoolRankings().size());

        Application harvardApplication = savedUser.getSchoolRankings()
                .get(1);

        assertEquals(harvard, harvardApplication.getSchool());
        assertEquals(1, harvardApplication.getSortOrder());

        // save pro/con and notes to the application
        harvardApplication.setNotes(TEXT);
        harvardApplication.getPros().add(A);
        harvardApplication.getPros().add(B);
        harvardApplication.getCons().add(C);

        SaveApplicationCommand command = new SaveApplicationCommand(
                harvardApplication);

        executeWithToken(command, false);

        User savedUser2 = getUser();

        Application savedHarvard = savedUser2.getSchoolRankings().get(1);

        assertEquals(1, savedHarvard.getSortOrder());
        assertEquals(harvard, savedHarvard.getSchool());

        assertEquals(TEXT, savedHarvard.getNotes());
        assertEquals(A, savedHarvard.getPros().get(0));
        assertEquals(B, savedHarvard.getPros().get(1));
        assertEquals(C, savedHarvard.getCons().get(0));

        // edit the original application and save again
        harvardApplication.getPros().clear();
        harvardApplication.getCons().add(B);
        harvardApplication.setNotes(C);

        SaveApplicationCommand command2 = new SaveApplicationCommand(
                harvardApplication);
        executeWithToken(command2, false);

        User savedUser3 = getUser();

        Application savedHarvard2 = savedUser3.getSchoolRankings().get(1);

        assertEquals(1, savedHarvard2.getSortOrder());
        assertEquals(harvard, savedHarvard2.getSchool());

        assertEquals(C, savedHarvard2.getNotes());
        assertEquals(0, savedHarvard2.getPros().size());
        assertEquals(C, savedHarvard2.getCons().get(0));
        assertEquals(B, savedHarvard2.getCons().get(1));

    }

    public void testForumReplies() throws SiteException {
        School s = new School(500);
        PostsList posts = schoolService.getForum(s, 0, 10);

        for (ForumPost fp : posts.getPosts()) {
            System.out.println("fp: " + fp + " REPL "
                    + fp.getReplies().size());
        }
    }

    /**
     * run the test after setting the token correctly.
     *
     * @param command
     * @param useUserCache
     * @throws SiteException
     */
    private void executeWithToken(SiteCommand command,
            boolean useUserCache) throws SiteException {

        command.setToken(userService.getToken(getUser()));
        schoolService.executeAndSaveCommand(command, useUserCache);
    }

    public void testForumPostSavingWithoutToken() throws SiteException {
        AssertThrows as = new AssertThrows(SiteSecurityException.class) {

            @Override
            public void test() throws Exception {
                log.debug("\n\nSave Again\n\n");
                School sc = schoolService
                        .getSchoolDetails("Adrian College");
                assertNotNull(sc);

                User currentUser = getUser();
                assertNotNull(currentUser);

                ForumPost fp = new SchoolForumPost(sc, currentUser,
                        TITLE, TEXT, null);

                schoolService.executeAndSaveCommand(
                        new SaveForumPostCommand(fp), false);
            }
        };

    }

    public void testForumPostSaving() throws SiteException {
        log.debug("\n\nSave Again\n\n");
        School sc = schoolService.getSchoolDetails("Adrian College");
        assertNotNull(sc);

        User currentUser = getUser();
        assertNotNull(currentUser);

        ForumPost fp = new SchoolForumPost(sc, currentUser, TITLE, TEXT,
                null);

        executeWithToken(new SaveForumPostCommand(fp), false);

        PostsList posts = schoolService.getForum(sc, 0, 10);

        assertEquals(1, posts.getTotalCount());
        assertEquals(1, posts.getPosts().size());

        ForumPost saved = posts.getPosts().get(0);
        assertNotNull(saved);
        assertEquals(SchoolForumPost.class, saved.getClass());
        assertTrue(saved.getId() > 0);
        assertEquals(TITLE, saved.getPostTitle());
        assertEquals(TEXT, saved.getPostString());
        assertEquals(0, saved.getReplyCount());

        assertEquals(null, saved.getThreadPost());

        assertEquals(currentUser, saved.getAuthor());

        // save a second post to the same thread
        ForumPost fp2 = new SchoolForumPost(sc, currentUser, TITLE, TEXT,
                saved);
        executeWithToken(new SaveForumPostCommand(fp2), false);

        // assert that there's still just 1 top level thread
        posts = schoolService.getForum(sc, 0, 10);
        assertEquals(1, posts.getTotalCount());
        assertEquals(1, posts.getPosts().size());

        // relies on setting the inverse side of the association for
        // testing
        assertEquals(1, posts.getPosts().get(0).getReplyCount());
        assertEquals(1, saved.getReplyCount());

        // get the posts in this thread
        posts = schoolService.getForum(saved, 0, 10);
        assertEquals(2, posts.getTotalCount());
        assertEquals(2, posts.getPosts().size());

        ForumPost saved1 = posts.getPosts().get(0);
        assertEquals(saved, saved1);
        ForumPost saved2 = posts.getPosts().get(1);
        assertNotNull(saved2);
        assertEquals(SchoolForumPost.class, saved2.getClass());
        assertTrue(saved2.getId() > 0);
        assertEquals(TITLE, saved2.getPostTitle());
        assertEquals(TEXT, saved2.getPostString());

        assertEquals(saved1, saved2.getThreadPost());
        assertEquals(currentUser, saved2.getAuthor());

    }

    public void testGetUsersInterestedIn() throws SiteException {
        School jarv = schoolService
                .getSchoolDetails("Jarvis Christian College");
        School harvard = schoolService
                .getSchoolDetails("Harvard University");
        School yale = schoolService.getSchoolDetails("Yale University");

        // Save in order to Jarv/Harvard/Yale
        SaveSchoolRankCommand comm = new SaveSchoolRankCommand(jarv,
                getUser(), 0);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(harvard, getUser(), 1);
        executeWithToken(comm, false);

        comm = new SaveSchoolRankCommand(yale, getUser(), 2);
        executeWithToken(comm, false);

        User savedUser = getUser();
        assertEquals(3, savedUser.getSchoolRankings().size());

        List<User> users = schoolService.getUsersInterestedIn(jarv);
        assertEquals(1, users.size());
        assertEquals(getUser(), users.get(0));

    }

    public void setSchoolService(SchoolService schoolService) {
        this.schoolService = schoolService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void setSchoolDAO(SchoolDAO schoolDAO) {
        this.schoolDAO = schoolDAO;
    }

    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

}
TOP

Related Classes of com.apress.progwt.server.service.impl.SchoolServiceImplTest

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.