예제 #1
0
    def test_list(self):
        self.requests_mock.get(fake_url, json=fake_gopher_list)
        self.requests_mock.post(fake_url, json=fake_gopher_list)

        # test base
        api = restapi.RESTApi()
        gopher = api.list(fake_url, response_key=fake_keys)
        self.assertTrue(self.requests_mock.called)
        self.assertEqual(self.requests_mock.last_request.method, 'GET')
        self.assertEqual(gopher, [fake_gopher_mac, fake_gopher_tosh])

        # test body
        api = restapi.RESTApi()
        data = {'qwerty': 1}
        gopher = api.list(fake_url, response_key=fake_keys, data=data)
        self.assertTrue(self.requests_mock.called)
        self.assertEqual(self.requests_mock.last_request.method, 'POST')
        self.assertEqual(self.requests_mock.last_request.json(), data)
        self.assertEqual(gopher, [fake_gopher_mac, fake_gopher_tosh])

        # test query params
        api = restapi.RESTApi()
        params = {'qaz': '123'}
        gophers = api.list(fake_url, response_key=fake_keys, params=params)
        self.assertTrue(self.requests_mock.called)
        self.assertEqual(self.requests_mock.last_request.method, 'GET')
        self.assertEqual(self.requests_mock.last_request.qs,
                         {k: [v]
                          for k, v in params.items()})
        self.assertEqual(gophers, [fake_gopher_mac, fake_gopher_tosh])
예제 #2
0
    def test_set(self):
        self.requests_mock.put(fake_url, json=fake_gopher_single)

        new_gopher = fake_gopher_single
        new_gopher[fake_key]['name'] = 'Chip'

        api = restapi.RESTApi()
        data = fake_gopher_mac
        data['name'] = 'Chip'

        # Test no data, no key
        gopher = api.set(fake_url)
        self.assertTrue(self.requests_mock.called)
        self.assertEqual(gopher, None)

        # Test data, no key
        gopher = api.set(fake_url, data=data)
        self.assertEqual(self.requests_mock.call_count, 2)
        self.assertEqual(self.requests_mock.last_request.json(), data)
        self.assertEqual(gopher, fake_gopher_single)

        # NOTE:(dtroyer): Key and no data is not tested as without data
        # the response_key is moot

        # Test data and key
        gopher = api.set(fake_url, data=data, response_key=fake_key)
        self.assertEqual(self.requests_mock.call_count, 3)
        self.assertEqual(self.requests_mock.last_request.json(), data)
        self.assertEqual(gopher, fake_gopher_mac)
예제 #3
0
    def test_delete(self):
        self.requests_mock.delete(fake_url)

        api = restapi.RESTApi()
        gopher = api.delete(fake_url)
        self.assertTrue(self.requests_mock.called)
        self.assertEqual(gopher.status_code, 200)
예제 #4
0
    def test_request_get_fail_404(self):
        self.requests_mock.get(fake_url,
                               json=fake_gopher_single,
                               status_code=404)

        api = restapi.RESTApi(user_agent=fake_user_agent, )
        self.assertRaises(exceptions.HTTPNotFound, api.request, 'GET',
                          fake_url)

        self.assertTrue(self.requests_mock.called)
        self.assertEqual(self.requests_mock.last_request.headers['User-Agent'],
                         fake_user_agent)
        self.assertEqual(self.requests_mock.last_request.timeout, 10)
예제 #5
0
    def test_request_get(self):
        self.requests_mock.get(fake_url, json=fake_gopher_single)

        api = restapi.RESTApi(user_agent=fake_user_agent, )
        gopher = api.request('GET', fake_url)

        self.assertTrue(self.requests_mock.called)
        self.assertEqual(self.requests_mock.last_request.headers['User-Agent'],
                         fake_user_agent)
        self.assertEqual(self.requests_mock.last_request.timeout, 10)

        self.assertEqual(gopher.status_code, 200)
        self.assertEqual(gopher.json(), fake_gopher_single)
예제 #6
0
    def test_show(self):
        self.requests_mock.get(fake_url, json=fake_gopher_single)

        api = restapi.RESTApi()

        # Test no key
        gopher = api.show(fake_url)
        self.assertTrue(self.requests_mock.called)
        self.assertEqual(gopher, fake_gopher_single)

        # Test with key
        gopher = api.show(fake_url, response_key=fake_key)
        self.assertEqual(self.requests_mock.call_count, 2)
        self.assertEqual(gopher, fake_gopher_mac)
예제 #7
0
    def test_request_post(self):
        self.requests_mock.post(fake_url, json=fake_gopher_single)

        api = restapi.RESTApi(user_agent=fake_user_agent, )
        data = fake_gopher_tosh
        gopher = api.request('POST', fake_url, json=data)
        self.assertTrue(self.requests_mock.called)
        self.assertEqual(self.requests_mock.last_request.headers['User-Agent'],
                         fake_user_agent)
        self.assertEqual(self.requests_mock.last_request.timeout, 10)
        self.assertEqual(
            self.requests_mock.last_request.headers['Content-Type'],
            'application/json')
        self.assertEqual(self.requests_mock.last_request.json(), data)
        self.assertEqual(gopher.json(), fake_gopher_single)
예제 #8
0
    def test_create(self):
        self.requests_mock.post(fake_url, json=fake_gopher_single)

        api = restapi.RESTApi()
        data = fake_gopher_mac

        # Test no key
        gopher = api.create(fake_url, data=data)
        self.assertTrue(self.requests_mock.called)
        self.assertEqual(self.requests_mock.last_request.json(), data)
        self.assertEqual(gopher, fake_gopher_single)

        # Test with key
        self.requests_mock.reset_mock()
        gopher = api.create(fake_url, data=data, response_key=fake_key)
        self.assertTrue(self.requests_mock.called)
        self.assertEqual(self.requests_mock.last_request.json(), data)
        self.assertEqual(gopher, fake_gopher_mac)
예제 #9
0
    def __init__(self, endpoint, username=None, password=None):

        if "/api/" not in endpoint:
            raise IOError("Wrong API string. It should be like: "
                          "http://<hc3_ip>/api/")

        # TODO(klstanie):  Add the HC2 reachability checking

        self.client = restapi.RESTApi(base_url=endpoint,
                                      username=username,
                                      password=password,
                                      debug=False)
        self.client.set_header("Fibaro Header", "X-Fibaro-Version:2")

        self.modified = {}
        self.modified_lock = threading.Lock()

        # initialize the managers
        self.info = info.Controller(self.client, self._get_info_model())

        self.login = login.Controller(self.client, self._get_login_model())

        self.sections = sections.Controller(self.client,
                                            self._get_section_model())

        self.rooms = rooms.Controller(self.client, self._get_room_model())

        self.users = users.Controller(self.client, self._get_user_model())

        self.variables = variables.Controller(self.client,
                                              self._get_variable_model())

        self.scenes = scenes.Controller(self.client, self._get_scene_model())

        self.devices = devices.Controller(self.client,
                                          self._get_device_model())

        self.weather = weather.Controller(self.client,
                                          self._get_weather_model())

        self.events = events.Controller(self.client, self._get_event_model())

        self.state_handler = None
예제 #10
0
    def test_request_get_auth(self):
        self.requests_mock.get(fake_url, json=fake_gopher_single)

        api = restapi.RESTApi(
            username=fake_username,
            password=fake_password,
            user_agent=fake_user_agent,
        )
        gopher = api.request('GET', fake_url)
        self.assertTrue(self.requests_mock.called)
        self.assertEqual(self.requests_mock.last_request.headers['User-Agent'],
                         fake_user_agent)
        self.assertEqual(self.requests_mock.last_request.timeout, 10)
        encoded_auth = base64.b64encode(
            bytes(f"{fake_username}:{fake_password}",
                  encoding='utf-8')).decode("ascii")
        self.assertEqual(
            self.requests_mock.last_request.headers["Authorization"],
            f"Basic {encoded_auth}")
        self.assertEqual(gopher.json(), fake_gopher_single)