package com.sap.pto.services; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import java.util.List; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.junit.Before; import org.junit.Test; import com.sap.pto.dao.FixtureDAO; import com.sap.pto.dao.LeagueDAO; import com.sap.pto.dao.PredictionDAO; import com.sap.pto.dao.UserDAO; import com.sap.pto.dao.entities.League; import com.sap.pto.dao.entities.Prediction; import com.sap.pto.dao.entities.User; import com.sap.pto.dao.entities.Fixture.Result; import com.sap.pto.services.LeagueService; import com.sap.pto.testutil.HttpServletRequestMock; import com.sap.pto.testutil.PTOTest; import com.sap.pto.util.UserUtil; @SuppressWarnings("nls") public class LeagueServiceTest extends PTOTest { private LeagueService leagueService; @Before public void setup() throws Exception { prepareTest(); leagueService = new LeagueService(); leagueService.request = requestMock; } @Test public void testCreateLeague() throws Exception { League league = new League(simpleUser, "1"); Response response = leagueService.createLeague(league); assertEquals(Status.OK.getStatusCode(), response.getStatus()); List<League> leagues = leagueService.getUserLeagues(); assertEquals(1, leagues.size()); assertEquals(2, leagues.get(0).getMembers().size()); } @Test(expected = WebApplicationException.class) public void testCreateLeagueTwice() throws Exception { League league = new League(simpleUser, "1"); Response response = leagueService.createLeague(league); assertEquals(Status.OK.getStatusCode(), response.getStatus()); leagueService.createLeague(league); } @Test(expected = WebApplicationException.class) public void testCreateUnnamedLeague() throws Exception { League league = new League(simpleUser, ""); leagueService.createLeague(league); } @Test public void testCreateLeagueUnauthorized() throws Exception { League league = new League(UserUtil.getPaul(), "1"); leagueService.createLeague(league); List<League> leagues = new LeagueDAO().getAll(); assertEquals(1, leagues.size()); assertEquals(simpleUser, leagues.get(0).getOwner()); } @Test public void testJoinLeague() throws Exception { League league = new League(UserUtil.getPaul(), "1"); LeagueDAO.saveNew(league); Response response = leagueService.joinLeague(league.getAccessKey()); assertEquals(Status.OK.getStatusCode(), response.getStatus()); League league2 = LeagueDAO.getLeagueByKey(league.getAccessKey()); assertEquals(1, league2.getMembers().size()); assertEquals(simpleUser.getUserName(), league2.getMembers().get(0).getUser().getUserName()); } @Test(expected = WebApplicationException.class) public void testJoinLeagueTwice() throws Exception { League league = new League(UserUtil.getPaul(), "1"); LeagueDAO.saveNew(league); Response response = leagueService.joinLeague(league.getAccessKey()); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = leagueService.joinLeague(league.getAccessKey()); } @Test public void testLeaveLeague() throws Exception { League league = new League(UserUtil.getPaul(), "1"); LeagueDAO.saveNew(league); leagueService.joinLeague(league.getAccessKey()); league = LeagueDAO.getLeagueByKey(league.getAccessKey()); assertEquals(1, league.getMembers().size()); leagueService.leaveLeague(league.getId()); league = LeagueDAO.getLeagueByKey(league.getAccessKey()); assertNull(league); } @Test public void testLeaveOwnLeague() throws Exception { League league = new League(simpleUser, "1"); leagueService.createLeague(league); List<League> leagues = leagueService.getUserLeagues(); assertEquals(1, leagues.size()); assertEquals(2, leagues.get(0).getMembers().size()); leagueService.leaveLeague(leagues.get(0).getId()); leagues = leagueService.getUserLeagues(); assertEquals(0, leagues.size()); assertEquals(0, new LeagueDAO().getCount()); } @Test public void testDeleteLeagueIfLastToLeave() throws Exception { User someUser = new User("someuser", "someuser@test.com"); UserDAO.saveNew(someUser); requestMock = new HttpServletRequestMock(someUser); leagueService.request = requestMock; League league = new League(someUser, "1"); leagueService.createLeague(league); league = LeagueDAO.getForOwner(someUser).get(0); // switch to test user requestMock = new HttpServletRequestMock(simpleUser); leagueService.request = requestMock; leagueService.joinLeague(league.getAccessKey()); List<League> leagues = leagueService.getUserLeagues(); assertEquals(1, leagues.size()); assertEquals(3, leagues.get(0).getMembers().size()); // remove owner requestMock = new HttpServletRequestMock(someUser); leagueService.request = requestMock; leagueService.leaveLeague(league.getId()); // switch to test user requestMock = new HttpServletRequestMock(simpleUser); leagueService.request = requestMock; leagues = leagueService.getUserLeagues(); assertEquals(1, leagues.size()); assertEquals(2, leagues.get(0).getMembers().size()); leagueService.leaveLeague(leagues.get(0).getId()); leagues = leagueService.getUserLeagues(); assertEquals(0, leagues.size()); assertEquals(0, new LeagueDAO().getCount()); } @Test(expected = WebApplicationException.class) public void testJoinNonExistingLeague() throws Exception { leagueService.joinLeague("123"); } @Test public void testGetLeagues() throws Exception { League pauls = new League(UserUtil.getPaul(), "2"); League mine = new League(simpleUser, "1"); LeagueDAO.saveNew(pauls); leagueService.createLeague(mine); List<League> leagues = leagueService.getUserLeagues(); assertEquals(1, leagues.size()); assertEquals("1", leagues.get(0).getName()); // now join Paul's leage leagueService.joinLeague(pauls.getAccessKey()); leagues = leagueService.getUserLeagues(); assertEquals(2, leagues.size()); } @Test public void testGetLeague() throws Exception { League league = new League(simpleUser, "1"); LeagueDAO.saveNew(league); league = leagueService.getLeague(league.getId()); assertEquals("1", league.getName()); } @Test public void testGetLeagueAsMember() throws Exception { League league = new League(UserUtil.getPaul(), "1"); LeagueDAO.saveNew(league); leagueService.joinLeague(league.getAccessKey()); League league2 = leagueService.getLeague(league.getId()); assertEquals("1", league2.getName()); } @Test(expected = WebApplicationException.class) public void testNonExistingGetLeague() throws Exception { leagueService.getLeague(99); } @Test(expected = WebApplicationException.class) public void testUnauthorizedGetLeague() throws Exception { League league = new League(UserUtil.getPaul(), "1"); LeagueDAO.saveNew(league); leagueService.getLeague(league.getId()); } @Test public void testGetLeagueForFixture() throws Exception { setupSampleData(); User user1 = new User("1", "1@1.com"); UserDAO.saveNew(user1); League league = new League(user1, "1"); LeagueDAO.saveNew(league); leagueService.joinLeague(league.getAccessKey()); // initially no predictions must exist League league2 = leagueService.getLeague(league.getId(), fixture1_2.getId()); assertEquals(1, league2.getMembers().size()); assertNull(league2.getMembers().get(0).getPrediction()); // now create predictions PredictionDAO.saveNew(new Prediction(user1, fixture1_2, Result.AWAYWIN)); PredictionDAO.saveNew(new Prediction(simpleUser, fixture1_2, Result.DRAW)); // must not be shown yet since match is not over league2 = leagueService.getLeague(league.getId(), fixture1_2.getId()); assertNull(league2.getMembers().get(0).getPrediction()); // simulate end of match fixture1_2.setResult(Result.DRAW); fixture1_2 = FixtureDAO.save(fixture1_2); league2 = leagueService.getLeague(league.getId(), fixture1_2.getId()); assertNotNull(league2.getMembers().get(0).getPrediction()); } }