Passed
Push — master ( 0490a2...f23918 )
by Paolo
01:21
created

tests.test_client.ISDateTest.test_is_not_date()   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3
"""
4
Created on Fri Dec 20 11:53:11 2019
5
6
@author: Paolo Cozzi <[email protected]>
7
"""
8
9
import os
10
import json
11
import datetime
12
13
from unittest.mock import patch, Mock
14
from unittest import TestCase
15
16
from pyUSIrest.auth import Auth
17
from pyUSIrest.client import Client, is_date
18
from pyUSIrest.settings import ROOT_URL
19
from pyUSIrest.exceptions import (
20
    USIConnectionError, TokenExpiredError, USIDataError)
21
22
from .common import DATA_PATH
23
from .test_auth import generate_token
24
25
26
class ISDateTest(TestCase):
27
    def test_is_date(self):
28
        self.assertTrue(is_date("2018-07-16"))
29
        self.assertTrue(is_date("2018-07-16T14:25:22.546"))
30
        self.assertTrue(is_date("2018-07-16T14:25:22.546+0000"))
31
32
    def test_is_not_date(self):
33
        self.assertFalse(is_date("not a date"))
34
35
36
class ClientTest(TestCase):
37
    @classmethod
38
    def setup_class(cls):
39
        cls.mock_get_patcher = patch('requests.Session.get')
40
        cls.mock_get = cls.mock_get_patcher.start()
41
42
    @classmethod
43
    def teardown_class(cls):
44
        cls.mock_get_patcher.stop()
45
46
    def test_with_tocken_str(self):
47
        token = generate_token()
48
        client = Client(token)
49
        self.assertFalse(client.auth.is_expired())
50
51
    def test_with_auth_object(self):
52
        token = generate_token()
53
        auth = Auth(token=token)
54
        client = Client(auth)
55
        self.assertFalse(client.auth.is_expired())
56
57
    def test_expired_tocken(self):
58
        now = int(datetime.datetime.now().timestamp())
59
60
        token = generate_token(now=now-10000)
61
        client = Client(token)
62
63
        # do a generic request and get error
64
        self.assertRaisesRegex(
65
            TokenExpiredError,
66
            "Your token is expired",
67
            client.get,
68
            "https://submission-test.ebi.ac.uk/api/"
69
        )
70
71
    def test_server_error(self):
72
        """Deal with the generic 50x states"""
73
74
        token = generate_token()
75
        client = Client(token)
76
77
        # create a mock response
78
        response = Mock()
79
        response.status_code = 500
80
        response.text = (
81
            '<!DOCTYPE html>\n<html>\n<body>\n<meta http-equiv="refresh" '
82
            'content=\'0;URL=http://www.ebi.ac.uk/errors/failure.html\'>\n'
83
            '</body>\n</html>\n')
84
85
        self.mock_get.return_value = response
86
87
        self.assertRaisesRegex(
88
            USIConnectionError,
89
            "Problems with API endpoints",
90
            client.get,
91
            ROOT_URL
92
        )
93
94
    def test_get(self):
95
        """Testing a get method"""
96
97
        # create a mock response
98
        with open(os.path.join(DATA_PATH, "root.json")) as handle:
99
            data = json.load(handle)
100
101
        self.mock_get.return_value = Mock()
102
        self.mock_get.return_value.json.return_value = data
103
        self.mock_get.return_value.status_code = 200
104
105
        token = generate_token()
106
        client = Client(token)
107
108
        response = client.get(ROOT_URL, headers={'new_key': 'new_value'})
109
110
        self.assertIsInstance(response.json(), dict)
111
112
    def test_get_wrong_status_code(self):
113
        """Testing a get method with a different status code than expected"""
114
115
        # create a mock response
116
        with open(os.path.join(DATA_PATH, "root.json")) as handle:
117
            data = json.load(handle)
118
119
        self.mock_get.return_value = Mock()
120
        self.mock_get.return_value.json.return_value = data
121
        self.mock_get.return_value.text = "test message"
122
        self.mock_get.return_value.status_code = 201
123
124
        token = generate_token()
125
        client = Client(token)
126
127
        self.assertRaisesRegex(
128
            USIConnectionError,
129
            "Got a status code different than expected",
130
            client.get,
131
            ROOT_URL
132
        )
133
134
    def test_get_with_errors(self):
135
        """Deal with problems with getting URL (no 200 status code)"""
136
137
        # create a mock response
138
        response = Mock()
139
        response.status_code = 404
140
        response.text = (
141
            '<h1>Not Found</h1><p>The requested resource was not found on '
142
            'this server.</p>')
143
144
        token = generate_token()
145
        client = Client(token)
146
147
        self.mock_get.return_value = response
148
149
        self.assertRaisesRegex(
150
            USIDataError,
151
            "Not Found",
152
            client.get,
153
            ROOT_URL + "/meow"
154
        )
155