def test2_cannot_update_myself_atall(self):
        req = GET(config.ui_host, config.ui_port,
                  "/gateways/" + config.gateway_id + "/roles/current")
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(303, response.status)

        req = GET(config.ui_host, config.ui_port, response.headers["Location"])
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(200, response.status)

        result = json.loads(content)
        self.assertEqual("success", result["status"])
        self.assertEqual(200, result["code"])

        result = json.loads(content)

        req = PUT(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/roles/" + result["data"]["id"])
        req.authorize(self.session)
        req.body(json.dumps({"access_level": "admin"}))
        response, content = req()
        self.assertEqual(403, response.status)
    def test7_create_get_remove_password(self):
        req = GET(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/password")
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(404, response.status)
        result = json.loads(content)
        self.assertEqual("error", result["status"])

        req = POST(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/password")
        req.authorize(self.session)
        req.body(json.dumps({"value": "some-password"}))
        response, content = req()

        self.assertEqual(200, response.status)
        result = json.loads(content)
        self.assertEqual("success", result["status"])

        req = GET(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/password")
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(200, response.status)
        result = json.loads(content)
        self.assertEqual("success", result["status"])

        self.assertEqual("password", result["data"]["key"])
        self.assertEqual("Password", result["data"]["display_name"])
        self.assertIsNone(result["data"]["value"])
        self.assertTrue(result["data"]["write-only"])
        self.assertNotIn("read-only", result["data"])

        req = DELETE(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/password")
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(204, response.status)
    def test6_create_get_remove_ip_address(self):
        req = GET(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/ip-address")
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(404, response.status)
        result = json.loads(content)
        self.assertEqual("error", result["status"])

        req = POST(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/ip-address")
        req.authorize(self.session)
        req.body(json.dumps({"value": "192.168.0.1"}))
        response, content = req()

        self.assertEqual(200, response.status)
        result = json.loads(content)
        self.assertEqual("success", result["status"])

        req = GET(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/ip-address")
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(200, response.status)
        result = json.loads(content)
        self.assertEqual("success", result["status"])

        self.assertEqual("ip-address", result["data"]["key"])
        self.assertEqual("IP address", result["data"]["display_name"])
        self.assertEqual("192.168.0.1", result["data"]["value"])
        self.assertNotIn("read-only", result["data"])
        self.assertNotIn("write-only", result["data"])

        req = DELETE(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/ip-address")
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(204, response.status)
    def test8_create_twice_password(self):
        req = GET(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/password")
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(404, response.status)
        result = json.loads(content)
        self.assertEqual("error", result["status"])

        req = POST(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/password")
        req.authorize(self.session)
        req.body(json.dumps({"value": "some-password"}))
        response, content = req()

        self.assertEqual(200, response.status)
        result = json.loads(content)
        self.assertEqual("success", result["status"])

        req = POST(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/password")
        req.authorize(self.session)
        req.body(json.dumps({"value": "some-password"}))
        response, content = req()

        self.assertEqual(409, response.status)
        result = json.loads(content)
        self.assertEqual("Conflict", result["status"])

        req = DELETE(
            config.ui_host, config.ui_port, "/gateways/" + config.gateway_id +
            "/devices/0xa335d00019f5234e/properties/password")
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(204, response.status)
    def test2_get_and_update(self):
        req = GET(config.ui_host, config.ui_port,
                  "/gateways/" + config.gateway_id + "/locations")
        req.authorize(self.session)
        response, content = req()

        result = json.loads(content)

        self.assertEqual(200, response.status)

        location = result["data"][0]

        req = PUT(
            config.ui_host, config.ui_port,
            "/gateways/" + config.gateway_id + "/locations/" + location["id"])

        req.authorize(self.session)
        req.body(json.dumps({"name": "New location2"}))

        response, content = req()
        result = json.loads(content)

        self.assertEqual(200, response.status)
        self.assertEqual("New location2", result["data"]["name"])