jaroslav@57: /* jaroslav@57: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. jaroslav@57: * jaroslav@57: * The contents of this file are subject to the terms of either the GNU jaroslav@57: * General Public License Version 2 only ("GPL") or the Common jaroslav@57: * Development and Distribution License("CDDL") (collectively, the jaroslav@57: * "License"). You may not use this file except in compliance with the jaroslav@57: * License. You can obtain a copy of the License at jaroslav@57: * http://www.netbeans.org/cddl-gplv2.html jaroslav@57: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the jaroslav@57: * specific language governing permissions and limitations under the jaroslav@57: * License. When distributing the software, include this License Header jaroslav@57: * Notice in each file and include the License file at jaroslav@57: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this jaroslav@57: * particular file as subject to the "Classpath" exception as provided jaroslav@57: * by Sun in the GPL Version 2 section of the License file that jaroslav@57: * accompanied this code. If applicable, add the following below the jaroslav@57: * License Header, with the fields enclosed by brackets [] replaced by jaroslav@57: * your own identifying information: jaroslav@57: * "Portions Copyrighted [year] [name of copyright owner]" jaroslav@57: * jaroslav@57: * Contributor(s): jaroslav@57: * jaroslav@57: * Portions Copyrighted 2009 Jaroslav Tulach jaroslav@57: */ jaroslav@57: jaroslav@57: package cz.xelfi.quoridor.webidor; jaroslav@57: jaroslav@128: import com.sun.jersey.api.client.GenericType; jaroslav@162: import com.sun.jersey.api.client.UniformInterfaceException; jaroslav@57: import com.sun.jersey.test.framework.JerseyTest; jaroslav@57: import java.io.File; jtulach@82: import java.io.FileOutputStream; jaroslav@57: import java.io.IOException; jaroslav@128: import java.util.List; jaroslav@57: import javax.ws.rs.core.MediaType; jaroslav@57: import org.junit.Test; jaroslav@57: import static org.junit.Assert.*; jaroslav@57: jaroslav@57: /** jaroslav@57: * jaroslav@57: * @author Jaroslav Tulach jaroslav@57: */ jaroslav@57: public class FinishedGameTest extends JerseyTest { jaroslav@149: static { jaroslav@149: System.setProperty("JERSEY_HTTP_PORT", "33435"); jaroslav@149: } jaroslav@57: private File dir; jaroslav@57: jaroslav@57: public FinishedGameTest() throws Exception { jaroslav@57: super("cz.xelfi.quoridor.webidor.resources"); jaroslav@57: } jaroslav@57: jaroslav@57: @Override jaroslav@57: public void setUp() throws Exception { jaroslav@57: dir = File.createTempFile("quoridor", ".dir"); jaroslav@57: dir.delete(); jaroslav@57: System.setProperty("quoridor.dir", dir.getPath()); jtulach@82: dir.mkdirs(); jtulach@82: File passwd = new File(dir, "passwd"); jtulach@82: FileOutputStream os = new FileOutputStream(passwd); jtulach@82: os.write("Jarda=heslo\nJirka=pesko\n".getBytes("UTF-8")); jtulach@82: os.close(); jaroslav@57: super.setUp(); jaroslav@57: } jaroslav@57: jaroslav@57: @Override jaroslav@57: public void tearDown() throws Exception { jaroslav@57: super.tearDown(); jaroslav@57: deleteRec(dir); jaroslav@57: } jaroslav@57: jaroslav@57: static void deleteRec(File dir) throws IOException { jaroslav@57: if (dir == null) { jaroslav@57: return; jaroslav@57: } jaroslav@57: File[] arr = dir.listFiles(); jaroslav@57: if (arr != null) { jaroslav@57: for (File f : arr) { jaroslav@57: deleteRec(f); jaroslav@57: } jaroslav@57: } jaroslav@57: dir.delete(); jaroslav@57: } jtulach@83: @Test public void testNotLoggedIn() { jtulach@83: String status = webResource.path("login").queryParam("id", "not-logged-in"). jtulach@83: accept(MediaType.TEXT_PLAIN).get(String.class); jtulach@83: assertEquals("Nobody is logged in", "", status); jtulach@83: } jtulach@83: jaroslav@57: jaroslav@57: @Test public void testCreateAGame() throws Exception { jtulach@82: String logJarda = webResource.path("login"). jtulach@82: queryParam("name", "Jarda"). jtulach@82: queryParam("password", "heslo"). jtulach@82: accept(MediaType.TEXT_PLAIN). jtulach@82: put(String.class); jtulach@82: String logJirka = webResource.path("login"). jtulach@82: queryParam("name", "Jirka"). jtulach@82: queryParam("password", "pesko"). jtulach@82: accept(MediaType.TEXT_PLAIN). jtulach@82: put(String.class); jtulach@82: assertNotNull("Logged in ok", logJarda); jaroslav@57: GameId s = webResource.path("games").queryParam("white", "Jarda") jtulach@82: .queryParam("loginID", logJarda) jaroslav@57: .queryParam("black", "Jirka").post(GameId.class); jaroslav@57: jaroslav@57: for (int i = 0; i < 3; i++) { jtulach@82: webResource.path("games/" + s.getId()) jtulach@82: .queryParam("loginID", logJarda) jtulach@82: .queryParam("player", "Jarda").queryParam("move", "N").put(GameId.class); jtulach@82: webResource.path("games/" + s.getId()) jtulach@82: .queryParam("loginID", logJirka) jtulach@82: .queryParam("player", "Jirka").queryParam("move", "S").put(GameId.class); jaroslav@57: } jaroslav@57: jtulach@82: webResource.path("games/" + s.getId()) jtulach@82: .queryParam("loginID", logJarda) jtulach@82: .queryParam("player", "Jarda").queryParam("move", "N").put(GameId.class); jtulach@82: webResource.path("games/" + s.getId()) jtulach@82: .queryParam("loginID", logJirka) jtulach@82: .queryParam("player", "Jirka").queryParam("move", "SS").put(GameId.class); jaroslav@57: jaroslav@128: jaroslav@128: GenericType> gType = new GenericType>() {}; jaroslav@128: List nothing = webResource.path("games/").queryParam("status", "blackWon").accept(MediaType.TEXT_XML).get(gType); jaroslav@128: assertTrue("Nothing has been finished yet: " + nothing, nothing.isEmpty()); jaroslav@128: jaroslav@57: for (int i = 0; i < 3; i++) { jtulach@82: webResource.path("games/" + s.getId()) jtulach@82: .queryParam("loginID", logJarda) jtulach@82: .queryParam("player", "Jarda").queryParam("move", "N").put(GameId.class); jtulach@82: webResource.path("games/" + s.getId()) jtulach@82: .queryParam("loginID", logJirka) jtulach@82: .queryParam("player", "Jirka").queryParam("move", "S").put(GameId.class); jaroslav@57: } jaroslav@57: jaroslav@128: jaroslav@162: try { jaroslav@162: Game end = webResource.path("games/" + s.getId()).accept(MediaType.TEXT_XML).get(Game.class); jaroslav@162: fail("If the game is finished, one cannot get its status without login"); jaroslav@162: } catch (UniformInterfaceException ex) { jaroslav@162: // OK jaroslav@162: } jaroslav@162: Game end = webResource.path("games/" + s.getId()).queryParam("loginID", logJirka).accept(MediaType.TEXT_XML).get(Game.class); jtulach@77: assertEquals("BlackWins", GameStatus.blackWon, end.getId().getStatus()); jaroslav@128: jaroslav@140: assertEquals("Jirka wins", "Jirka", end.getCurrentPlayer()); jaroslav@140: jtulach@166: List none = webResource.path("games/").queryParam("status", "blackWon").accept(MediaType.TEXT_XML).get(gType); jtulach@166: assertEquals("No games, for not logged in users: " + none, 0, none.size()); jaroslav@128: jtulach@166: List something = webResource.path("games/").queryParam("loginID", logJirka).queryParam("status", "blackWon").accept(MediaType.TEXT_XML).get(gType); jaroslav@128: assertEquals("One game finished: " + something, 1, something.size()); jaroslav@128: assertEquals("Id is OK", end.getId().getId(), something.get(0).getId()); jaroslav@57: } jaroslav@57: jtulach@75: @Test public void testResignAGame() throws Exception { jtulach@82: String logJarda = webResource.path("login"). jtulach@82: queryParam("name", "Jarda"). jtulach@82: queryParam("password", "heslo"). jtulach@82: accept(MediaType.TEXT_PLAIN). jtulach@82: put(String.class); jtulach@75: GameId s = webResource.path("games").queryParam("white", "Jarda") jtulach@82: .queryParam("loginID", logJarda) jtulach@75: .queryParam("black", "Jirka").post(GameId.class); jtulach@75: jaroslav@162: assertTrue("In progress", s.getStatus().isInProgress()); jaroslav@162: jtulach@82: webResource.path("games/" + s.getId()). jtulach@82: queryParam("loginID", logJarda). jtulach@82: queryParam("player", "Jarda"). jtulach@82: queryParam("move", "RESIGN").put(GameId.class); jaroslav@162: try { jaroslav@162: Game end = webResource.path("games/" + s.getId()).accept(MediaType.TEXT_XML).get(Game.class); jaroslav@162: fail("Should not be able to get game when finished"); jaroslav@162: } catch (UniformInterfaceException ex) { jaroslav@162: // OK jaroslav@162: } jaroslav@162: Game end = webResource.path("games/" + s.getId()).queryParam("loginID", logJarda).accept(MediaType.TEXT_XML).get(Game.class); jtulach@77: assertEquals("BlackWins", GameStatus.blackWon, end.getId().getStatus()); jaroslav@140: assertEquals("Jirka wins", "Jirka", end.getCurrentPlayer()); jaroslav@162: jaroslav@162: assertFalse("is finished", end.getId().getStatus().isInProgress()); jtulach@75: } jtulach@75: jaroslav@57: }