webidor/src/test/java/cz/xelfi/quoridor/webidor/FinishedGameTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 08 Nov 2009 10:21:46 +0100
changeset 149 a441b02a638a
parent 140 04f9d559b8a1
child 162 c1bfbe98152b
permissions -rw-r--r--
Changing the port value for each test
     1 /*
     2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     3  *
     4  * The contents of this file are subject to the terms of either the GNU
     5  * General Public License Version 2 only ("GPL") or the Common
     6  * Development and Distribution License("CDDL") (collectively, the
     7  * "License"). You may not use this file except in compliance with the
     8  * License. You can obtain a copy of the License at
     9  * http://www.netbeans.org/cddl-gplv2.html
    10  * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
    11  * specific language governing permissions and limitations under the
    12  * License.  When distributing the software, include this License Header
    13  * Notice in each file and include the License file at
    14  * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
    15  * particular file as subject to the "Classpath" exception as provided
    16  * by Sun in the GPL Version 2 section of the License file that
    17  * accompanied this code. If applicable, add the following below the
    18  * License Header, with the fields enclosed by brackets [] replaced by
    19  * your own identifying information:
    20  * "Portions Copyrighted [year] [name of copyright owner]"
    21  *
    22  * Contributor(s):
    23  *
    24  * Portions Copyrighted 2009 Jaroslav Tulach
    25  */
    26 
    27 package cz.xelfi.quoridor.webidor;
    28 
    29 import com.sun.jersey.api.client.GenericType;
    30 import com.sun.jersey.test.framework.JerseyTest;
    31 import java.io.File;
    32 import java.io.FileOutputStream;
    33 import java.io.IOException;
    34 import java.util.List;
    35 import javax.ws.rs.core.MediaType;
    36 import org.junit.Test;
    37 import static org.junit.Assert.*;
    38 
    39 /**
    40  *
    41  * @author Jaroslav Tulach <jtulach@netbeans.org>
    42  */
    43 public class FinishedGameTest extends JerseyTest {
    44     static {
    45         System.setProperty("JERSEY_HTTP_PORT", "33435");
    46     }
    47     private File dir;
    48 
    49     public FinishedGameTest() throws Exception {
    50         super("cz.xelfi.quoridor.webidor.resources");
    51     }
    52 
    53     @Override
    54     public void setUp() throws Exception {
    55         dir = File.createTempFile("quoridor", ".dir");
    56         dir.delete();
    57         System.setProperty("quoridor.dir", dir.getPath());
    58         dir.mkdirs();
    59         File passwd = new File(dir, "passwd");
    60         FileOutputStream os = new FileOutputStream(passwd);
    61         os.write("Jarda=heslo\nJirka=pesko\n".getBytes("UTF-8"));
    62         os.close();
    63         super.setUp();
    64     }
    65 
    66     @Override
    67     public void tearDown() throws Exception {
    68         super.tearDown();
    69         deleteRec(dir);
    70     }
    71 
    72     static void deleteRec(File dir) throws IOException {
    73         if (dir == null) {
    74             return;
    75         }
    76         File[] arr = dir.listFiles();
    77         if (arr != null) {
    78             for (File f : arr) {
    79                 deleteRec(f);
    80             }
    81         }
    82         dir.delete();
    83     }
    84     @Test public void testNotLoggedIn() {
    85         String status  = webResource.path("login").queryParam("id", "not-logged-in").
    86                 accept(MediaType.TEXT_PLAIN).get(String.class);
    87         assertEquals("Nobody is logged in", "", status);
    88     }
    89 
    90 
    91     @Test public void testCreateAGame() throws Exception {
    92         String logJarda = webResource.path("login").
    93             queryParam("name", "Jarda").
    94             queryParam("password", "heslo").
    95             accept(MediaType.TEXT_PLAIN).
    96             put(String.class);
    97         String logJirka = webResource.path("login").
    98             queryParam("name", "Jirka").
    99             queryParam("password", "pesko").
   100             accept(MediaType.TEXT_PLAIN).
   101             put(String.class);
   102         assertNotNull("Logged in ok", logJarda);
   103         GameId s = webResource.path("games").queryParam("white", "Jarda")
   104                 .queryParam("loginID", logJarda)
   105                 .queryParam("black", "Jirka").post(GameId.class);
   106 
   107         for (int i = 0; i < 3; i++) {
   108             webResource.path("games/" + s.getId())
   109                 .queryParam("loginID", logJarda)
   110                 .queryParam("player", "Jarda").queryParam("move", "N").put(GameId.class);
   111             webResource.path("games/" + s.getId())
   112                 .queryParam("loginID", logJirka)
   113                 .queryParam("player", "Jirka").queryParam("move", "S").put(GameId.class);
   114         }
   115 
   116         webResource.path("games/" + s.getId())
   117             .queryParam("loginID", logJarda)
   118             .queryParam("player", "Jarda").queryParam("move", "N").put(GameId.class);
   119         webResource.path("games/" + s.getId())
   120             .queryParam("loginID", logJirka)
   121             .queryParam("player", "Jirka").queryParam("move", "SS").put(GameId.class);
   122 
   123         
   124         GenericType<List<GameId>> gType = new GenericType<List<GameId>>() {};
   125         List<GameId> nothing = webResource.path("games/").queryParam("status", "blackWon").accept(MediaType.TEXT_XML).get(gType);
   126         assertTrue("Nothing has been finished yet: " + nothing, nothing.isEmpty());
   127 
   128         for (int i = 0; i < 3; i++) {
   129             webResource.path("games/" + s.getId())
   130                 .queryParam("loginID", logJarda)
   131                 .queryParam("player", "Jarda").queryParam("move", "N").put(GameId.class);
   132             webResource.path("games/" + s.getId())
   133                 .queryParam("loginID", logJirka)
   134                 .queryParam("player", "Jirka").queryParam("move", "S").put(GameId.class);
   135         }
   136 
   137 
   138         Game end = webResource.path("games/" + s.getId()).accept(MediaType.TEXT_XML).get(Game.class);
   139         assertEquals("BlackWins", GameStatus.blackWon, end.getId().getStatus());
   140 
   141         assertEquals("Jirka wins", "Jirka", end.getCurrentPlayer());
   142 
   143         List<GameId> something = webResource.path("games/").queryParam("status", "blackWon").accept(MediaType.TEXT_XML).get(gType);
   144 
   145         assertEquals("One game finished: " + something, 1, something.size());
   146         assertEquals("Id is OK", end.getId().getId(), something.get(0).getId());
   147     }
   148 
   149     @Test public void testResignAGame() throws Exception {
   150         String logJarda = webResource.path("login").
   151             queryParam("name", "Jarda").
   152             queryParam("password", "heslo").
   153             accept(MediaType.TEXT_PLAIN).
   154             put(String.class);
   155         GameId s = webResource.path("games").queryParam("white", "Jarda")
   156                 .queryParam("loginID", logJarda)
   157                 .queryParam("black", "Jirka").post(GameId.class);
   158 
   159         webResource.path("games/" + s.getId()).
   160             queryParam("loginID", logJarda).
   161             queryParam("player", "Jarda").
   162             queryParam("move", "RESIGN").put(GameId.class);
   163         Game end = webResource.path("games/" + s.getId()).accept(MediaType.TEXT_XML).get(Game.class);
   164         assertEquals("BlackWins", GameStatus.blackWon, end.getId().getStatus());
   165         assertEquals("Jirka wins", "Jirka", end.getCurrentPlayer());
   166     }
   167 
   168 }