package com.homesnap.webserver;
/*
* #%L
* HomeSnapWebServer
* %%
* Copyright (C) 2011 - 2016 A. de Giuli
* %%
* This file is part of HomeSnap done by A. de Giuli (arnaud.degiuli(at)free.fr).
*
* MyDomo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MyDomo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MyDomo. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
import javax.servlet.http.HttpServletResponse;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Assert;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import com.homesnap.engine.controller.what.impl.OnOffState;
import com.homesnap.engine.controller.who.Who;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class GroupRestAPITest extends AbstractRestApi {
private static final String urn_groups = "/house/groups";
// @Before
// public void init() {
// try {
// copyFileUsingFileChannels(new File("Backup of house.xml"), new File("house.xml"));
// } catch (IOException e) {
// Assert.fail("Impossible to initialize file");
// }
// }
@Test
public void test0DeleteGroupList() {
// Test impossible to create grouplist
JSONObject jo = deleteRequestJSONObject(urn_groups, HttpServletResponse.SC_NO_CONTENT);
Assert.assertNull(jo);
// Test there is no more controllers
JSONArray controllers = getRequestJSONArray(urn_groups);
Assert.assertEquals(0, controllers.length());
}
@Test
public void test1CreateGroupList() {
// Test impossible to create grouplist
postRequestJSONObject(urn_groups,"{}", HttpServletResponse.SC_NOT_IMPLEMENTED);
}
@Test
public void test2PutGroupList() {
// Test impossible to create grouplist
putRequestJSONObject(urn_groups,"{}", HttpServletResponse.SC_NOT_IMPLEMENTED);
}
@Test
public void test3CreateGroup() {
// Test to get a specific group
JSONObject group = postRequestJSONObject(urn_groups + "/6", createGroup6(), HttpServletResponse.SC_CREATED);
// Test group 6
testGroup6(group);
group = postRequestJSONObject(urn_groups + "/group?id=10", createGroup10(), HttpServletResponse.SC_CREATED);
// Test group 1
testGroup10(group);
group = postRequestJSONObject(urn_groups + "/group?id=1", createGroup1(), HttpServletResponse.SC_CREATED);
// Test group 1
testGroup1(group);
}
@Test
public void test4GetGroup() {
// Test to get a specific group
JSONObject group = getRequestJSONObject(urn_groups + "/1");
// Test group 1
Assert.assertNotNull(group);
testGroup1(group);
group = getRequestJSONObject(urn_groups + "/group?id=10");
// Test group 10
Assert.assertNotNull(group);
testGroup10(group);
}
@Test
public void test5GetGroupList() {
// Test to get groups list
JSONArray groups = getRequestJSONArray(urn_groups);
// Test groups
testGroup10(groups.getJSONObject(1));
}
@Test
public void test6ModifyGroup() {
// Test to get a specific group (TODO no add or remove by this methode... should be done unit by unit...)
JSONObject group = putRequestJSONObject(urn_groups + "/1", createGroup1Bis(), HttpServletResponse.SC_OK);
// Test group 1
testGroup1Bis(group);
group = putRequestJSONObject(urn_groups + "/group?id=6", createGroup6Bis(), HttpServletResponse.SC_OK);
// Test group 1
testGroup6Bis(group);
}
@Test
public void test7OnStatus() {
// Test to get a specific group
JSONObject group = getRequestJSONObject("/house/groups/1?param=param");
// Test group 1
testGroup1Bis(group);
group = getRequestJSONObject("/house/groups/group?id=10¶m=param");
// Test group 10
testGroup10(group);
putRequestJSONObject("/house/groups/1?param=param", createGroup1(), HttpServletResponse.SC_OK);
putRequestJSONObject("/house/groups/group?id=1¶m=param", createGroup1(), HttpServletResponse.SC_OK);
postRequestJSONObject("/house/groups/1/21", createController21(), HttpServletResponse.SC_CREATED);
JSONObject jo = getRequestJSONObject("/house/groups/1/controller?id=21¶m=param");
testController21(jo);
jo = getRequestJSONObject("/house/groups/1/21?param=param");
testController21(jo);
testController21(jo);
deleteRequestJSONObject("/house/groups/1?param=param", HttpServletResponse.SC_OK);
deleteRequestJSONObject("/house/groups/group?id=1¶m=param", HttpServletResponse.SC_NOT_ACCEPTABLE);
}
@Test
public void test8DeleteGroup() {
// Test to get a specific group
JSONObject group = deleteRequestJSONObject(urn_groups + "/10", HttpServletResponse.SC_OK);
// Test group 10
testGroup10(group);
group = deleteRequestJSONObject(urn_groups + "/group?id=6", HttpServletResponse.SC_OK);
// Test group 10
testGroup6Bis(group);
}
@Test
public void test9DeleteGroupList() {
// Test impossible to create grouplist
JSONObject jo = deleteRequestJSONObject(urn_groups, HttpServletResponse.SC_NO_CONTENT);
Assert.assertNull(jo);
// Test there is no more controllers
JSONArray controllers = getRequestJSONArray(urn_groups);
Assert.assertEquals(0, controllers.length());
}
private String createController21() {
return createJsonController("Bureau", "21", Who.LIGHT.name());
}
private void testController21(JSONObject jo) {
testController(jo, "Bureau", "21", Who.LIGHT.name(), OnOffState.Off.toString());
}
private String createGroup1() {
return createJsonGroup("Group 1", "1", "");
}
private void testGroup1(JSONObject group) {
testGroup(group, "1", "Group 1", 0);
}
private String createGroup1Bis() {
return createJsonGroup("Group Bis 1", "1", "");
}
private void testGroup1Bis(JSONObject group) {
testGroup(group, "1", "Group Bis 1", 0);
}
private String createGroup6() {
return createJsonGroup("Group 6", "6", "");
}
private void testGroup6(JSONObject group) {
testGroup(group, "6", "Group 6", 0);
}
private String createGroup6Bis() {
return createJsonGroup("Group 6 Bis", "6", "");
}
private void testGroup6Bis(JSONObject group) {
testGroup(group, "6", "Group 6 Bis", 0);
}
private String createGroup10() {
return createJsonGroup("Group 10", "10", "");
}
private void testGroup10(JSONObject group) {
testGroup(group, "10", "Group 10", 0);
}
}