Skip to content

Commit 8771e77

Browse files
author
Maria Korlotian
authored
Get user devices (#88)
* Add get devices command
1 parent 54d537c commit 8771e77

5 files changed

Lines changed: 73 additions & 0 deletions

File tree

castle/api/get_devices.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from castle.api_request import APIRequest
2+
from castle.commands.get_devices import CommandsGetDevices
3+
4+
5+
class APIGetDevices(object):
6+
@staticmethod
7+
def retrieve(user_id):
8+
return APIRequest().call(CommandsGetDevices.build(user_id))

castle/commands/get_devices.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from castle.command import Command
2+
from castle.validators.present import ValidatorsPresent
3+
4+
5+
class CommandsGetDevices(object):
6+
7+
@staticmethod
8+
def build(user_id):
9+
ValidatorsPresent.call({'user_id': user_id}, 'user_id')
10+
11+
return Command(
12+
method='get',
13+
path="users/{user_id}/devices".format(user_id=user_id),
14+
data=None
15+
)

castle/test/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66

77
TEST_MODULES = [
8+
'castle.test.api.get_devices_test',
89
'castle.test.api.review_test',
910
'castle.test.api_request_test',
1011
'castle.test.client_id.extract_test',
@@ -13,6 +14,7 @@
1314
'castle.test.commands.authenticate_test',
1415
'castle.test.commands.identify_test',
1516
'castle.test.commands.impersonate_test',
17+
'castle.test.commands.get_devices_test',
1618
'castle.test.commands.review_test',
1719
'castle.test.commands.track_test',
1820
'castle.test.configuration_test',
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import json
2+
import responses
3+
4+
from castle.test import unittest
5+
from castle.api.get_devices import APIGetDevices
6+
from castle.configuration import configuration
7+
8+
9+
class APIGetDevicesTestCase(unittest.TestCase):
10+
def setUp(self):
11+
configuration.api_secret = 'test'
12+
13+
def tearDown(self):
14+
configuration.api_secret = None
15+
16+
@responses.activate
17+
def test_retrieve(self):
18+
# pylint: disable=line-too-long
19+
response_text = "{\"total_count\":1,\"data\":[{\"token\":\"abcdefg12345\",\"risk\":0.0,\"created_at\":\"2018-06-15T16:36:22.916Z\",\"last_seen_at\":\"2018-07-19T23:09:29.681Z\",\"context\":{\"ip\":\"1.1.1.1\",\"user_agent\":{\"raw\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36 OPR/54.0.2952.51\",\"browser\":\"Opera\",\"version\":\"54.0.2952\",\"os\":\"Mac OS X 10.13.6\",\"mobile\":false,\"platform\":\"Mac OS X\",\"device\":\"Unknown\",\"family\":\"Opera\"},\"type\":\"desktop\"},\"is_current_device\":true}]}"
20+
responses.add(
21+
responses.GET,
22+
'https://api.castle.io/v1/users/1234/devices',
23+
body=response_text,
24+
status=200
25+
)
26+
user_id = '1234'
27+
self.assertEqual(APIGetDevices.retrieve(user_id), json.loads(response_text))
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from castle.test import unittest
2+
from castle.command import Command
3+
from castle.commands.get_devices import CommandsGetDevices
4+
from castle.errors import InvalidParametersError
5+
6+
7+
def user_id():
8+
return '1234'
9+
10+
11+
class CommandsGetDevicesTestCase(unittest.TestCase):
12+
def test_build_no_user_id(self):
13+
with self.assertRaises(InvalidParametersError):
14+
CommandsGetDevices.build('')
15+
16+
def test_build(self):
17+
command = CommandsGetDevices.build(user_id())
18+
self.assertIsInstance(command, Command)
19+
self.assertEqual(command.method, 'get')
20+
self.assertEqual(command.path, 'users/1234/devices')
21+
self.assertEqual(command.data, None)

0 commit comments

Comments
 (0)