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;
}
}