• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ProteinsWebTeam / interpro7-api / 9887981828

11 Jul 2024 08:20AM UTC coverage: 93.827% (-0.2%) from 94.023%
9887981828

Pull #151

github

web-flow
Update webfront/serializers/content_serializers.py

Co-authored-by: Matthias Blum <mat.blum@gmail.com>
Pull Request #151: Replacing `_subset` with `_url` in filter by DB requests

429 of 436 new or added lines in 29 files covered. (98.39%)

6 existing lines in 5 files now uncovered.

9089 of 9687 relevant lines covered (93.83%)

0.94 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.29
/webfront/tests/tests_3_endpoints_using_searcher.py
1
import time
1✔
2
from tqdm import tqdm
1✔
3

4
from interpro import settings
1✔
5
from rest_framework import status
1✔
6

7
from webfront.tests.InterproRESTTestCase import InterproRESTTestCase
1✔
8
from webfront.searcher.elastic_controller import ElasticsearchController
1✔
9
from webfront.tests.actions_on_test_dataset import *
1✔
10
from django.core.validators import URLValidator
1✔
11

12
validateURL = URLValidator()
1✔
13

14
api_test_map = {
1✔
15
    "entry": {
16
        "interpro": ["IPR003165", "IPR001165"],
17
        "pfam": ["PF02171", "PF17180", "PF17176"],
18
        "smart": ["SM00950", "SM00002"],
19
        "profile": ["PS50822", "PS01031"],
20
        "panther": ["PTHR43214"],
21
    },
22
    "protein": {
23
        "uniprot": ["A1CUJ5", "M5ADK6", "A0A0A2L2G2", "P16582", "Q0VDM6"],
24
        "reviewed": ["A1CUJ5", "M5ADK6"],
25
        "unreviewed": ["A0A0A2L2G2", "P16582", "Q0VDM6"],
26
    },
27
    "structure": {"pdb": ["1JM7", "1T2V", "2BKM", "1JZ8"]},
28
    "taxonomy": {"uniprot": ["1", "2", "2579", "40296", "344612", "1001583", "10090"]},
29
    "proteome": {
30
        "uniprot": ["UP000006701", "UP000012042", "UP000030104", "UP000000589"]
31
    },
32
    "set": {"pfam": ["CL0001", "CL0002"]},
33
}
34

35
chains = {
1✔
36
    "1JM7": ["a", "b"],
37
    "1T2V": ["a", "b", "c", "d", "e"],
38
    "2BKM": ["a", "b"],
39
    "1JZ8": ["a", "b"],
40
}
41

42

43
class ActionsOnTestDocumentTest(InterproRESTTestCase):
1✔
44
    @classmethod
1✔
45
    def setUpClass(cls):
1✔
46
        super(ActionsOnTestDocumentTest, cls).setUpClass()
1✔
47
        search = ElasticsearchController()
1✔
48
        obj = search.execute_query("*:*", rows=50)
1✔
49
        cls.all_docs = [o["_source"] for o in obj["hits"]["hits"]]
1✔
50

51
    def tests_all_docs_are_loaded(self):
1✔
52
        self.assertNotEqual(None, self.all_docs)
1✔
53
        self.assertGreater(len(self.all_docs), 0)
1✔
54

55
    def tests_can_filter_by_entry_acc(self):
1✔
56
        empty = filter_by_value(self.all_docs, "entry_acc", "Unicorn")
1✔
57
        self.assertEqual(len(empty), 0)
1✔
58
        not_entry_acc = filter_by_value(self.all_docs, "entry_acc", None)
1✔
59
        self.assertLess(len(not_entry_acc), len(self.all_docs))
1✔
60
        with_entry_acc = filter_by_value(self.all_docs, "entry_acc", "*")
1✔
61
        self.assertLess(len(with_entry_acc), len(self.all_docs))
1✔
62
        self.assertEqual(len(with_entry_acc) + len(not_entry_acc), len(self.all_docs))
1✔
63
        filtered = filter_by_value(self.all_docs, "entry_acc", "ipr003165")
1✔
64
        self.assertGreater(len(filtered), 1)
1✔
65

66
    def tests_can_select(self):
1✔
67
        with_entry_acc = filter_by_value(self.all_docs, "entry_acc", "*")
1✔
68
        entry_acc_db = select_fields(with_entry_acc, ["entry_acc", "entry_db"])
1✔
69
        for doc in entry_acc_db:
1✔
70
            self.assertIn("entry_acc", doc)
1✔
71

72
    def tests_can_get_unique_set(self):
1✔
73
        with_entry_db = filter_by_value(self.all_docs, "entry_db", "*")
1✔
74
        entry_dbs = select_fields(with_entry_db, ["entry_db"])
1✔
75
        entry_dbs = unique(entry_dbs)
1✔
76
        entry_dbs = [d["entry_db"] for d in entry_dbs]
1✔
77
        self.assertEqual(len(entry_dbs), len(set(entry_dbs)))
1✔
78

79
    def tests_group_and_count(self):
1✔
80
        db_counts = group_by_field_and_count(self.all_docs, "entry_db", "entry_acc")
1✔
81
        for db in db_counts:
1✔
82
            c = 0
1✔
83
            for doc in self.all_docs:
1✔
84
                if "entry_db" in doc and doc["entry_db"] == db:
1✔
85
                    c += 1
1✔
86
            self.assertEqual(db_counts[db], c)
1✔
87

88
    def tests_group_and_count_unique(self):
1✔
89
        db_counts_unique = group_by_field_and_count(
1✔
90
            self.all_docs, "entry_db", "entry_acc", True
91
        )
92
        for db in db_counts_unique:
1✔
93
            uni = set()
1✔
94
            for doc in self.all_docs:
1✔
95
                if "entry_db" in doc and doc["entry_db"] == db:
1✔
96
                    uni.add(doc["entry_acc"])
1✔
97
            self.assertEqual(db_counts_unique[db], len(uni))
1✔
98

99
    def tests_contains_filter(self):
1✔
100
        with_root = filter_by_contain_value(self.all_docs, "tax_lineage", "1")
1✔
101
        self.assertEqual(len(self.all_docs), len(with_root))
1✔
102
        with_bacteria = filter_by_contain_value(self.all_docs, "tax_lineage", "2")
1✔
103
        self.assertGreater(len(self.all_docs), len(with_bacteria))
1✔
104
        with_tax_id = filter_by_value(self.all_docs, "tax_id", 344612)
1✔
105
        with_parent = filter_by_contain_value(with_tax_id, "tax_lineage", "2579")
1✔
106
        self.assertEqual(len(with_parent), len(with_tax_id))
1✔
107

108

109
PAYLOAD_TYPE_COUNTER = 1
1✔
110
PAYLOAD_TYPE_LIST = 2
1✔
111
PAYLOAD_TYPE_ENTITY = 3
1✔
112

113

114
def get_url(endpoints, dbs=None, accs=None):
1✔
115
    url = "/api"
1✔
116
    for i in range(len(endpoints)):
1✔
117
        url += "/" + endpoints[i]
1✔
118
        if dbs is not None and dbs[i] is not None:
1✔
119
            url += "/" + dbs[i]
1✔
120
            if accs is not None and accs[i] is not None:
1✔
121
                url += "/" + accs[i]
1✔
122
    return url
1✔
123

124

125
class ThreeEndpointsTableTest(InterproRESTTestCase):
1✔
126
    @classmethod
1✔
127
    def setUpClass(cls):
1✔
128
        super(ThreeEndpointsTableTest, cls).setUpClass()
1✔
129
        search = ElasticsearchController()
1✔
130
        obj = search.execute_query("*:*", rows=50)
1✔
131
        cls.all_docs = [o["_source"] for o in obj["hits"]["hits"]]
1✔
132

133
    def assert_response_equal_to_expectd(
1✔
134
        self, url, data, payload_type, endpoints, dbs, accs
135
    ):
136
        response = self._get_in_debug_mode(url)
1✔
137
        if len(data) == 0:
1✔
138
            self.assertEqual(
1✔
139
                response.status_code,
140
                status.HTTP_204_NO_CONTENT,
141
                "It should be an empty response for URL {}".format(url),
142
            )
143
        else:
144
            self.assertEqual(
1✔
145
                response.status_code,
146
                status.HTTP_200_OK,
147
                "It should be an OK response for URL {}".format(url),
148
            )
149
            if payload_type == PAYLOAD_TYPE_COUNTER:
1✔
150
                expected = get_counter_payload(data, endpoints, dbs, accs)
1✔
151
                self.assertEqual(
1✔
152
                    response.data,
153
                    expected,
154
                    "The URL {} wasn't equal to the expected response.\nRESPONSE: {}\nEXPECTED: {}".format(
155
                        url, response.data, expected
156
                    ),
157
                )
158
            elif payload_type == PAYLOAD_TYPE_LIST:
1✔
159
                expected = get_db_payload(data, endpoints, dbs, accs)
1✔
160
                self.assert_db_response_is_as_expected(
1✔
161
                    response, expected, endpoints[0], url
162
                )
163
            elif payload_type == PAYLOAD_TYPE_ENTITY:
1✔
164
                expected = get_acc_payload(data, endpoints, dbs, accs)
1✔
165
                self.assert_obj_response_is_as_expected(
1✔
166
                    response.data, expected, endpoints[0], url
167
                )
168

169
    def assert_chain_urls(self, data, endpoints, dbs, accs):
1✔
170
        payload_type = PAYLOAD_TYPE_COUNTER
1✔
171
        if dbs[0] is not None:
1✔
172
            payload_type = PAYLOAD_TYPE_LIST
1✔
173
            if accs is not None and accs[0] is not None:
1✔
174
                payload_type = PAYLOAD_TYPE_ENTITY
1✔
175
        for i in range(len(accs)):
1✔
176
            if accs[i] is not None and endpoints[i] == "structure":
1✔
177
                for chain in chains[accs[i]]:
1✔
178
                    accs_copy = accs.copy()
1✔
179
                    accs_copy[i] = accs_copy[i] + "/" + chain
1✔
180
                    url = get_url(endpoints, dbs, accs_copy)
1✔
181
                    with_chain = filter_by_value(data, "structure_chain_acc", chain)
1✔
182
                    self.assert_response_equal_to_expectd(
1✔
183
                        url, with_chain, payload_type, endpoints, dbs, accs
184
                    )
185

186
    def assert_db_integration_urls(self, data, endpoints, dbs, accs=None):
1✔
187
        payload_type = PAYLOAD_TYPE_COUNTER
1✔
188
        if dbs[0] is not None:
1✔
189
            payload_type = PAYLOAD_TYPE_LIST
1✔
190
            if accs is not None and accs[0] is not None:
1✔
191
                payload_type = PAYLOAD_TYPE_ENTITY
1✔
192

193
        for i in range(len(dbs)):
1✔
194
            if dbs[i] is not None and endpoints[i] == "entry" and dbs[i] != "interpro":
1✔
195
                dbs_copy = dbs.copy()
1✔
196
                dbs_copy[i] = "unintegrated/" + dbs_copy[i]
1✔
197
                url = get_url(endpoints, dbs_copy, accs)
1✔
198
                unintegrated = filter_by_value(data, "entry_integrated", None)
1✔
199
                unintegrated = exclude_by_value(unintegrated, "entry_db", "interpro")
1✔
200
                self.assert_response_equal_to_expectd(
1✔
201
                    url, unintegrated, payload_type, endpoints, dbs, accs
202
                )
203

204
                dbs_copy = dbs.copy()
1✔
205
                dbs_copy[i] = "integrated/" + dbs_copy[i]
1✔
206
                url = get_url(endpoints, dbs_copy, accs)
1✔
207
                integrated = filter_by_value(data, "entry_integrated", "*")
1✔
208
                self.assert_response_equal_to_expectd(
1✔
209
                    url, integrated, payload_type, endpoints, dbs, accs
210
                )
211

212
    def test_endpoint_endpoint_endpoint(self):
1✔
213
        for endpoint1 in api_test_map:
1✔
214
            for endpoint2 in api_test_map:
1✔
215
                if endpoint1 == endpoint2:
1✔
216
                    continue
1✔
217
                for endpoint3 in api_test_map:
1✔
218
                    if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
219
                        continue
1✔
220
                    url = "/api/{}/{}/{}".format(endpoint1, endpoint2, endpoint3)
1✔
221
                    response = self.client.get(url)
1✔
222
                    self.assertEqual(
1✔
223
                        response.status_code,
224
                        status.HTTP_200_OK,
225
                        "URL: [{}]".format(url),
226
                    )
227
                    data = filter_by_endpoint(self.all_docs, endpoint1)
1✔
228
                    data = filter_by_endpoint(data, endpoint2)
1✔
229
                    data = filter_by_endpoint(data, endpoint3)
1✔
230
                    expected = get_counter_payload(
1✔
231
                        data, [endpoint1, endpoint2, endpoint3]
232
                    )
233
                    self.assertEqual(
1✔
234
                        response.data,
235
                        expected,
236
                        "The URL {} wasn't equal to the expected response.\nRESPONSE: {}\nEXPECTED: {}".format(
237
                            url, response.data, expected
238
                        ),
239
                    )
240

241
    def test_endpoint_endpoint_db(self):
1✔
242
        for endpoint1 in api_test_map:
1✔
243
            for endpoint2 in api_test_map:
1✔
244
                if endpoint1 == endpoint2:
1✔
245
                    continue
1✔
246
                for endpoint3 in api_test_map:
1✔
247
                    if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
248
                        continue
1✔
249
                    for db3 in api_test_map[endpoint3]:
1✔
250
                        url = "/api/{}/{}/{}/{}".format(
1✔
251
                            endpoint1, endpoint2, endpoint3, db3
252
                        )
253
                        response = self._get_in_debug_mode(url)
1✔
254
                        data = filter_by_endpoint(self.all_docs, endpoint1)
1✔
255
                        data = filter_by_endpoint(data, endpoint2)
1✔
256
                        data = filter_by_endpoint(data, endpoint3, db3)
1✔
257
                        if len(data) == 0:
1✔
258
                            self.assertEqual(
1✔
259
                                response.status_code,
260
                                status.HTTP_204_NO_CONTENT,
261
                                "It should be an empty response for URL {}".format(url),
262
                            )
263
                        else:
264
                            self.assertEqual(
1✔
265
                                response.status_code,
266
                                status.HTTP_200_OK,
267
                                "It should be an OK response for URL {}".format(url),
268
                            )
269
                            expected = get_counter_payload(
1✔
270
                                data,
271
                                [endpoint1, endpoint2, endpoint3],
272
                                [None, None, db3],
273
                            )
274
                            self.assertEqual(
1✔
275
                                response.data,
276
                                expected,
277
                                "The URL {} wasn't equal to the expected response.\nRESPONSE: {}\nEXPECTED: {}".format(
278
                                    url, response.data, expected
279
                                ),
280
                            )
281

282
                            # test_endpoint_db_endpoint
283
                            url = "/api/{}/{}/{}/{}".format(
1✔
284
                                endpoint1, endpoint3, db3, endpoint2
285
                            )
286
                            response2 = self.client.get(url)
1✔
287
                            self.assertEqual(
1✔
288
                                response2.status_code,
289
                                status.HTTP_200_OK,
290
                                "URL: [{}]".format(url),
291
                            )
292
                            self.assertEqual(
1✔
293
                                response2.data,
294
                                expected,
295
                                "The URL {} wasn't equal to the expected response.\nRESPONSE: {}\nEXPECTED: {}".format(
296
                                    url, response.data, expected
297
                                ),
298
                            )
299
                            self.assert_db_integration_urls(
1✔
300
                                data,
301
                                [endpoint1, endpoint2, endpoint3],
302
                                [None, None, db3],
303
                            )
304

305
    def test_endpoint_endpoint_acc(self):
1✔
306
        for endpoint1 in api_test_map:
1✔
307
            for endpoint2 in api_test_map:
1✔
308
                if endpoint1 == endpoint2:
1✔
309
                    continue
1✔
310
                for endpoint3 in api_test_map:
1✔
311
                    if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
312
                        continue
1✔
313
                    for db3 in api_test_map[endpoint3]:
1✔
314
                        for acc3 in api_test_map[endpoint3][db3]:
1✔
315
                            url = "/api/{}/{}/{}/{}/{}".format(
1✔
316
                                endpoint1, endpoint2, endpoint3, db3, acc3
317
                            )
318
                            response = self._get_in_debug_mode(url)
1✔
319
                            data = filter_by_endpoint(self.all_docs, endpoint1)
1✔
320
                            data = filter_by_endpoint(data, endpoint2)
1✔
321
                            data = filter_by_endpoint(data, endpoint3, db3, acc3)
1✔
322
                            if len(data) == 0:
1✔
323
                                self.assertEqual(
1✔
324
                                    response.status_code,
325
                                    status.HTTP_204_NO_CONTENT,
326
                                    "It should be an empty response for URL {}".format(
327
                                        url
328
                                    ),
329
                                )
330
                            else:
331
                                self.assertEqual(
1✔
332
                                    response.status_code,
333
                                    status.HTTP_200_OK,
334
                                    "It should be an OK response for URL {}".format(
335
                                        url
336
                                    ),
337
                                )
338
                                eps = [endpoint1, endpoint2, endpoint3]
1✔
339
                                dbs = [None, None, db3]
1✔
340
                                accs = [None, None, acc3]
1✔
341
                                expected = get_counter_payload(data, eps, dbs, accs)
1✔
342
                                self.assertEqual(
1✔
343
                                    len(response.data),
344
                                    len(expected),
345
                                    "The URL {} wasn't equal to the expected response.\nRESPONSE: {}\nEXPECTED: {}".format(
346
                                        url, response.data, expected
347
                                    ),
348
                                )
349
                                for key in response.data:
1✔
350
                                    self.assertEqual(
1✔
351
                                        response.data[key],
352
                                        expected[key],
353
                                        "The URL {} wasn't equal. Response on key {}.\nRESPONSE: {}\nEXPECTED: {}".format(
354
                                            url, key, response.data, expected
355
                                        ),
356
                                    )
357

358
                                # test_endpoint_acc_endpoint
359
                                url = "/api/{}/{}/{}/{}/{}".format(
1✔
360
                                    endpoint1, endpoint3, db3, acc3, endpoint2
361
                                )
362
                                response2 = self.client.get(url)
1✔
363
                                self.assertEqual(
1✔
364
                                    response2.status_code,
365
                                    status.HTTP_200_OK,
366
                                    "URL: [{}]".format(url),
367
                                )
368
                                self.assertEqual(
1✔
369
                                    len(response.data),
370
                                    len(expected),
371
                                    "The URL {} wasn't equal to the expected response.\nRESPONSE: {}\nEXPECTED: {}".format(
372
                                        url, response.data, expected
373
                                    ),
374
                                )
375
                                for key in response.data:
1✔
376
                                    self.assertEqual(
1✔
377
                                        response.data[key],
378
                                        expected[key],
379
                                        "The URL {} wasn't equal. Response on key {}.\nRESPONSE: {}\nEXPECTED: {}".format(
380
                                            url, key, response.data, expected
381
                                        ),
382
                                    )
383
                                self.assert_db_integration_urls(data, eps, dbs, accs)
1✔
384
                                self.assert_chain_urls(data, eps, dbs, accs)
1✔
385

386
    def test_endpoint_db_db(self):
1✔
387
        for endpoint1 in api_test_map:
1✔
388
            for endpoint2 in api_test_map:
1✔
389
                if endpoint1 == endpoint2:
1✔
390
                    continue
1✔
391
                for db2 in api_test_map[endpoint2]:
1✔
392
                    for endpoint3 in api_test_map:
1✔
393
                        if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
394
                            continue
1✔
395
                        for db3 in api_test_map[endpoint3]:
1✔
396
                            if not settings.DEBUG:
1✔
397
                                time.sleep(0.1)
×
398
                            url = "/api/{}/{}/{}/{}/{}".format(
1✔
399
                                endpoint1, endpoint2, db2, endpoint3, db3
400
                            )
401
                            response = self._get_in_debug_mode(url)
1✔
402
                            data = filter_by_endpoint(self.all_docs, endpoint1)
1✔
403
                            data = filter_by_endpoint(data, endpoint2, db2)
1✔
404
                            data = filter_by_endpoint(data, endpoint3, db3)
1✔
405
                            if len(data) == 0:
1✔
406
                                self.assertEqual(
1✔
407
                                    response.status_code,
408
                                    status.HTTP_204_NO_CONTENT,
409
                                    "It should be an empty response for URL {}".format(
410
                                        url
411
                                    ),
412
                                )
413
                            else:
414
                                self.assertEqual(
1✔
415
                                    response.status_code,
416
                                    status.HTTP_200_OK,
417
                                    "It should be an OK response for URL {}".format(
418
                                        url
419
                                    ),
420
                                )
421

422
                                expected = get_counter_payload(
1✔
423
                                    data,
424
                                    [endpoint1, endpoint2, endpoint3],
425
                                    [None, db2, db3],
426
                                )
427

428
                                self.assertEqual(response.data, expected)
1✔
429

430
                                url = "/api/{}/{}/{}/{}/{}".format(
1✔
431
                                    endpoint1, endpoint3, db3, endpoint2, db2
432
                                )
433
                                response = self.client.get(url)
1✔
434
                                self.assertEqual(
1✔
435
                                    response.status_code, status.HTTP_200_OK
436
                                )
437
                                self.assertEqual(response.data, expected)
1✔
438
                                self.assert_db_integration_urls(
1✔
439
                                    data,
440
                                    [endpoint1, endpoint2, endpoint3],
441
                                    [None, db2, db3],
442
                                )
443

444
    def test_endpoint_db_acc(self):
1✔
445
        for endpoint1 in api_test_map:
1✔
446
            for endpoint2 in api_test_map:
1✔
447
                if endpoint1 == endpoint2:
1✔
448
                    continue
1✔
449
                for db2 in api_test_map[endpoint2]:
1✔
450
                    for endpoint3 in api_test_map:
1✔
451
                        if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
452
                            continue
1✔
453
                        for db3 in api_test_map[endpoint3]:
1✔
454
                            for acc3 in api_test_map[endpoint3][db3]:
1✔
455
                                if not settings.DEBUG:
1✔
456
                                    time.sleep(0.1)
×
457
                                url = "/api/{}/{}/{}/{}/{}/{}".format(
1✔
458
                                    endpoint1, endpoint2, db2, endpoint3, db3, acc3
459
                                )
460
                                response = self._get_in_debug_mode(url)
1✔
461
                                data = filter_by_endpoint(self.all_docs, endpoint1)
1✔
462
                                data = filter_by_endpoint(data, endpoint2, db2)
1✔
463
                                data = filter_by_endpoint(data, endpoint3, db3, acc3)
1✔
464
                                if len(data) == 0:
1✔
465
                                    self.assertEqual(
1✔
466
                                        response.status_code,
467
                                        status.HTTP_204_NO_CONTENT,
468
                                        "It should be an empty response for URL {}".format(
469
                                            url
470
                                        ),
471
                                    )
472
                                else:
473
                                    self.assertEqual(
1✔
474
                                        response.status_code,
475
                                        status.HTTP_200_OK,
476
                                        "It should be an OK response for URL {}".format(
477
                                            url
478
                                        ),
479
                                    )
480
                                    eps = [endpoint1, endpoint2, endpoint3]
1✔
481
                                    dbs = [None, db2, db3]
1✔
482
                                    accs = [None, None, acc3]
1✔
483
                                    expected = get_counter_payload(data, eps, dbs, accs)
1✔
484

485
                                    self.assertEqual(response.data, expected)
1✔
486

487
                                    url = "/api/{}/{}/{}/{}/{}/{}".format(
1✔
488
                                        endpoint1, endpoint3, db3, acc3, endpoint2, db2
489
                                    )
490
                                    response = self.client.get(url)
1✔
491
                                    self.assertEqual(
1✔
492
                                        response.status_code, status.HTTP_200_OK
493
                                    )
494
                                    self.assertEqual(response.data, expected)
1✔
495
                                    self.assert_db_integration_urls(
1✔
496
                                        data, eps, dbs, accs
497
                                    )
498
                                    self.assert_chain_urls(data, eps, dbs, accs)
1✔
499

500
    def test_endpoint_acc_acc(self):
1✔
501
        for endpoint1 in api_test_map:
1✔
502
            for endpoint2 in api_test_map:
1✔
503
                if endpoint1 == endpoint2:
1✔
504
                    continue
1✔
505
                for db2 in api_test_map[endpoint2]:
1✔
506
                    for endpoint3 in api_test_map:
1✔
507
                        if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
508
                            continue
1✔
509
                        for acc2 in api_test_map[endpoint2][db2]:
1✔
510
                            for db3 in api_test_map[endpoint3]:
1✔
511
                                for acc3 in api_test_map[endpoint3][db3]:
1✔
512
                                    if not settings.DEBUG:
1✔
513
                                        time.sleep(0.1)
×
514
                                    url = "/api/{}/{}/{}/{}/{}/{}/{}".format(
1✔
515
                                        endpoint1,
516
                                        endpoint2,
517
                                        db2,
518
                                        acc2,
519
                                        endpoint3,
520
                                        db3,
521
                                        acc3,
522
                                    )
523
                                    response = self._get_in_debug_mode(url)
1✔
524
                                    data = filter_by_endpoint(self.all_docs, endpoint1)
1✔
525
                                    data = filter_by_endpoint(
1✔
526
                                        data, endpoint2, db2, acc2
527
                                    )
528
                                    data = filter_by_endpoint(
1✔
529
                                        data, endpoint3, db3, acc3
530
                                    )
531
                                    if len(data) == 0:
1✔
532
                                        self.assertEqual(
1✔
533
                                            response.status_code,
534
                                            status.HTTP_204_NO_CONTENT,
535
                                            "It should be an empty response for URL {}".format(
536
                                                url
537
                                            ),
538
                                        )
539
                                    else:
540
                                        self.assertEqual(
1✔
541
                                            response.status_code,
542
                                            status.HTTP_200_OK,
543
                                            "It should be an OK response for URL {}".format(
544
                                                url
545
                                            ),
546
                                        )
547
                                        eps = [endpoint1, endpoint2, endpoint3]
1✔
548
                                        dbs = [None, db2, db3]
1✔
549
                                        accs = [None, acc2, acc3]
1✔
550
                                        expected = get_counter_payload(
1✔
551
                                            data, eps, dbs, accs
552
                                        )
553

554
                                        self.assertEqual(response.data, expected)
1✔
555

556
                                        url = "/api/{}/{}/{}/{}/{}/{}/{}".format(
1✔
557
                                            endpoint1,
558
                                            endpoint3,
559
                                            db3,
560
                                            acc3,
561
                                            endpoint2,
562
                                            db2,
563
                                            acc2,
564
                                        )
565
                                        response = self.client.get(url)
1✔
566
                                        self.assertEqual(
1✔
567
                                            response.status_code, status.HTTP_200_OK
568
                                        )
569
                                        self.assertEqual(response.data, expected)
1✔
570
                                        self.assert_db_integration_urls(
1✔
571
                                            data, eps, dbs, accs
572
                                        )
573
                                        self.assert_chain_urls(data, eps, dbs, accs)
1✔
574

575
    def assertFieldsInObjectsAreEqual(self, obj1, obj2, fields):
1✔
576
        for f in fields:
1✔
577
            self.assertEqual(
1✔
578
                str(obj1[f]).lower(),
579
                str(obj2[f]).lower(),
580
                "The field {} is different in the objects: \nObj1: {} \nObj2: {}:".format(
581
                    f, obj1, obj2
582
                ),
583
            )
584

585
    def test_db_endpoint_endpoint(self):
1✔
586
        for endpoint1 in api_test_map:
1✔
587
            for db1 in api_test_map[endpoint1]:
1✔
588
                for endpoint2 in api_test_map:
1✔
589
                    if endpoint1 == endpoint2:
1✔
590
                        continue
1✔
591
                    for endpoint3 in api_test_map:
1✔
592
                        if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
593
                            continue
1✔
594
                        if not settings.DEBUG:
1✔
595
                            time.sleep(0.1)
×
596
                        url = "/api/{}/{}/{}/{}".format(
1✔
597
                            endpoint1, db1, endpoint2, endpoint3
598
                        )
599
                        response = self._get_in_debug_mode(url)
1✔
600
                        data = filter_by_endpoint(self.all_docs, endpoint1, db1)
1✔
601
                        data = filter_by_endpoint(data, endpoint2)
1✔
602
                        data = filter_by_endpoint(data, endpoint3)
1✔
603
                        if len(data) == 0:
1✔
604
                            self.assertEqual(
1✔
605
                                response.status_code,
606
                                status.HTTP_204_NO_CONTENT,
607
                                "It should be an empty response for URL {}".format(url),
608
                            )
609
                        else:
610
                            self.assertEqual(
1✔
611
                                response.status_code,
612
                                status.HTTP_200_OK,
613
                                "It should be an OK response for URL {}".format(url),
614
                            )
615
                            expected = get_db_payload(
1✔
616
                                data,
617
                                [endpoint1, endpoint2, endpoint3],
618
                                [db1, None, None],
619
                            )
620
                            self.assertEqual(
1✔
621
                                len(expected), len(response.data["results"])
622
                            )
623
                            expected.sort(
1✔
624
                                key=lambda obj: str(
625
                                    obj["metadata"]["accession"]
626
                                ).lower()
627
                            )
628
                            response.data["results"].sort(
1✔
629
                                key=lambda obj: str(
630
                                    obj["metadata"]["accession"]
631
                                ).lower()
632
                            )
633
                            for i in range(len(expected)):
1✔
634
                                obj1 = expected[i]
1✔
635
                                obj2 = response.data["results"][i]
1✔
636
                                for key in obj2:
1✔
637
                                    if key == "metadata":
1✔
638
                                        self.assertFieldsInObjectsAreEqual(
1✔
639
                                            obj1["metadata"],
640
                                            obj2["metadata"],
641
                                            payload_attributes[endpoint1],
642
                                        )
643
                                    else:
644
                                        self.assertEqual(
1✔
645
                                            obj1[key],
646
                                            obj2[key],
647
                                            "the counter of {} of the {} {} doesn't match. URL: [{}]".format(
648
                                                key,
649
                                                endpoint1,
650
                                                obj1["metadata"]["accession"],
651
                                                url,
652
                                            ),
653
                                        )
654

655
    def assert_obj_response_is_as_expected(
1✔
656
        self, obj_response, obj_expected, endpoint1, url
657
    ):
658
        for key in obj_expected:
1✔
659
            if key == "metadata":
1✔
660
                self.assertFieldsInObjectsAreEqual(
1✔
661
                    obj_expected["metadata"],
662
                    obj_response["metadata"],
663
                    payload_attributes[endpoint1],
664
                )
665
            else:
666
                if type(obj_expected[key]) == dict:
1✔
667
                    self.assertEqual(
1✔
668
                        obj_expected[key],
669
                        obj_response[key],
670
                        "the counter of {} of the {} {} doesn't match. URL: [{}]".format(
671
                            key, endpoint1, obj_expected["metadata"]["accession"], url
672
                        ),
673
                    )
674
                elif type(obj_expected[key]) == str:
1✔
675
                    self.assertIn("_url", key)
1✔
676
                    self.assertIn(key, obj_response, "URL: {}".format(url))
1✔
677
                    try:
1✔
678
                        validateURL(obj_response[key])
1✔
NEW
679
                    except:
×
NEW
680
                        raise self.failureException(
×
681
                            f"The URL in {key}: {obj_response[key]} is not valid | URL: {url}"
682
                        )
683
                else:
684
                    self.assertEqual(
1✔
685
                        type(obj_expected[key]), list, "URL: {}".format(url)
686
                    )
687
                    self.assertEqual(
1✔
688
                        type(obj_response[key]), list, "URL: {}".format(url)
689
                    )
690
                    self.assertEqual(
1✔
691
                        len(obj_response[key]),
692
                        len(obj_expected[key]),
693
                        "URL: {}".format(url),
694
                    )
695
                    obj_expected[key].sort(
1✔
696
                        key=lambda obj: str(obj["accession"]).lower()
697
                    )
698
                    obj_response[key].sort(
1✔
699
                        key=lambda obj: str(obj["accession"]).lower()
700
                    )
701
                    for j in range(len(obj_expected[key])):
1✔
702
                        self.assertFieldsInObjectsAreEqual(
1✔
703
                            obj_expected[key][j],
704
                            obj_response[key][j],
705
                            sublist_attributes[singular[key]],
706
                        )
707

708
    def assert_db_response_is_as_expected(self, response, expected, endpoint1, url):
1✔
709
        self.assertEqual(len(expected), len(response.data["results"]))
1✔
710
        expected.sort(key=lambda obj: str(obj["metadata"]["accession"]).lower())
1✔
711
        response.data["results"].sort(
1✔
712
            key=lambda obj: str(obj["metadata"]["accession"]).lower()
713
        )
714
        for i in range(len(expected)):
1✔
715
            obj_expected = expected[i]
1✔
716
            obj_response = response.data["results"][i]
1✔
717
            self.assert_obj_response_is_as_expected(
1✔
718
                obj_response, obj_expected, endpoint1, url
719
            )
720

721
    def test_db_db_endpoint(self):
1✔
722
        for endpoint1 in api_test_map:
1✔
723
            for db1 in api_test_map[endpoint1]:
1✔
724
                for endpoint2 in api_test_map:
1✔
725
                    if endpoint1 == endpoint2:
1✔
726
                        continue
1✔
727
                    for db2 in api_test_map[endpoint2]:
1✔
728
                        for endpoint3 in ["protein"]:  # api_test_map:
1✔
729
                            if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
730
                                continue
1✔
731
                            if not settings.DEBUG:
1✔
732
                                time.sleep(0.1)
×
733
                            url = "/api/{}/{}/{}/{}/{}".format(
1✔
734
                                endpoint1, db1, endpoint2, db2, endpoint3
735
                            )
736
                            response = self._get_in_debug_mode(url)
1✔
737
                            data = filter_by_endpoint(self.all_docs, endpoint1, db1)
1✔
738
                            data = filter_by_endpoint(data, endpoint2, db2)
1✔
739
                            data = filter_by_endpoint(data, endpoint3)
1✔
740
                            if len(data) == 0:
1✔
741
                                self.assertEqual(
1✔
742
                                    response.status_code,
743
                                    status.HTTP_204_NO_CONTENT,
744
                                    "It should be an empty response for URL {}".format(
745
                                        url
746
                                    ),
747
                                )
748
                            else:
749
                                self.assertEqual(
1✔
750
                                    response.status_code,
751
                                    status.HTTP_200_OK,
752
                                    "It should be an OK response for URL {}".format(
753
                                        url
754
                                    ),
755
                                )
756
                                expected = get_db_payload(
1✔
757
                                    data,
758
                                    [endpoint1, endpoint2, endpoint3],
759
                                    [db1, db2, None],
760
                                )
761
                                self.assert_db_response_is_as_expected(
1✔
762
                                    response, expected, endpoint1, url
763
                                )
764

765
                                # test_db_endpoint_db
766
                                url = "/api/{}/{}/{}/{}/{}".format(
1✔
767
                                    endpoint1, db1, endpoint3, endpoint2, db2
768
                                )
769
                                response = self.client.get(url)
1✔
770
                                self.assertEqual(
1✔
771
                                    response.status_code, status.HTTP_200_OK
772
                                )
773
                                self.assert_db_response_is_as_expected(
1✔
774
                                    response, expected, endpoint1, url
775
                                )
776
                                self.assert_db_integration_urls(
1✔
777
                                    data,
778
                                    [endpoint1, endpoint2, endpoint3],
779
                                    [db1, db2, None],
780
                                )
781

782
    def test_db_db_db(self):
1✔
783
        for endpoint1 in api_test_map:
1✔
784
            for db1 in api_test_map[endpoint1]:
1✔
785
                for endpoint2 in api_test_map:
1✔
786
                    if endpoint1 == endpoint2:
1✔
787
                        continue
1✔
788
                    for db2 in api_test_map[endpoint2]:
1✔
789
                        for endpoint3 in api_test_map:
1✔
790
                            if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
791
                                continue
1✔
792
                            for db3 in api_test_map[endpoint3]:
1✔
793
                                if not settings.DEBUG:
1✔
794
                                    time.sleep(0.1)
×
795
                                url = "/api/{}/{}/{}/{}/{}/{}".format(
1✔
796
                                    endpoint1, db1, endpoint2, db2, endpoint3, db3
797
                                )
798
                                response = self._get_in_debug_mode(url)
1✔
799
                                data = filter_by_endpoint(self.all_docs, endpoint1, db1)
1✔
800
                                data = filter_by_endpoint(data, endpoint2, db2)
1✔
801
                                data = filter_by_endpoint(data, endpoint3, db3)
1✔
802
                                if len(data) == 0:
1✔
803
                                    self.assertEqual(
1✔
804
                                        response.status_code,
805
                                        status.HTTP_204_NO_CONTENT,
806
                                        "It should be an empty response for URL {}".format(
807
                                            url
808
                                        ),
809
                                    )
810
                                else:
811
                                    self.assertEqual(
1✔
812
                                        response.status_code,
813
                                        status.HTTP_200_OK,
814
                                        "It should be an OK response for URL {}".format(
815
                                            url
816
                                        ),
817
                                    )
818
                                    expected = get_db_payload(
1✔
819
                                        data,
820
                                        [endpoint1, endpoint2, endpoint3],
821
                                        [db1, db2, db3],
822
                                    )
823
                                    self.assert_db_response_is_as_expected(
1✔
824
                                        response, expected, endpoint1, url
825
                                    )
826
                                    self.assert_db_integration_urls(
1✔
827
                                        data,
828
                                        [endpoint1, endpoint2, endpoint3],
829
                                        [db1, db2, db3],
830
                                    )
831

832
    def test_db_db_acc(self):
1✔
833
        for endpoint1 in ["protein"]:  # api_test_map:
1✔
834
            for db1 in api_test_map[endpoint1]:
1✔
835
                for endpoint2 in ["structure"]:  # api_test_map:
1✔
836
                    if endpoint1 == endpoint2:
1✔
UNCOV
837
                        continue
×
838
                    for db2 in api_test_map[endpoint2]:
1✔
839
                        for endpoint3 in ["entry"]:  # api_test_map:
1✔
840
                            if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
UNCOV
841
                                continue
×
842
                            for db3 in api_test_map[endpoint3]:
1✔
843
                                for acc3 in api_test_map[endpoint3][db3]:
1✔
844
                                    if not settings.DEBUG:
1✔
845
                                        time.sleep(0.1)
×
846
                                    url = "/api/{}/{}/{}/{}/{}/{}/{}".format(
1✔
847
                                        endpoint1,
848
                                        db1,
849
                                        endpoint2,
850
                                        db2,
851
                                        endpoint3,
852
                                        db3,
853
                                        acc3,
854
                                    )
855
                                    data = filter_by_endpoint(
1✔
856
                                        self.all_docs, endpoint1, db1
857
                                    )
858
                                    data = filter_by_endpoint(data, endpoint2, db2)
1✔
859
                                    data = filter_by_endpoint(
1✔
860
                                        data, endpoint3, db3, acc3
861
                                    )
862
                                    response = self._get_in_debug_mode(url)
1✔
863
                                    if len(data) == 0:
1✔
864
                                        self.assertEqual(
1✔
865
                                            response.status_code,
866
                                            status.HTTP_204_NO_CONTENT,
867
                                            "It should be an empty response for URL {}".format(
868
                                                url
869
                                            ),
870
                                        )
871
                                    else:
872
                                        self.assertEqual(
1✔
873
                                            response.status_code,
874
                                            status.HTTP_200_OK,
875
                                            "It should be an OK response for URL {}".format(
876
                                                url
877
                                            ),
878
                                        )
879
                                        eps = [endpoint1, endpoint2, endpoint3]
1✔
880
                                        dbs = [db1, db2, db3]
1✔
881
                                        accs = [None, None, acc3]
1✔
882
                                        expected = get_db_payload(data, eps, dbs, accs)
1✔
883
                                        self.assert_db_response_is_as_expected(
1✔
884
                                            response, expected, endpoint1, url
885
                                        )
886
                                        self.assert_db_integration_urls(
1✔
887
                                            data, eps, dbs, accs
888
                                        )
889
                                        self.assert_chain_urls(data, eps, dbs, accs)
1✔
890
                                        # test_db_acc_db
891
                                        url = "/api/{}/{}/{}/{}/{}/{}/{}".format(
1✔
892
                                            endpoint1,
893
                                            db1,
894
                                            endpoint3,
895
                                            db3,
896
                                            acc3,
897
                                            endpoint2,
898
                                            db2,
899
                                        )
900
                                        response = self.client.get(url)
1✔
901
                                        self.assertEqual(
1✔
902
                                            response.status_code, status.HTTP_200_OK
903
                                        )
904
                                        self.assert_db_response_is_as_expected(
1✔
905
                                            response, expected, endpoint1, url
906
                                        )
907

908
    def test_db_acc_acc(self):
1✔
909
        for endpoint1 in api_test_map:
1✔
910
            for db1 in api_test_map[endpoint1]:
1✔
911
                for endpoint2 in api_test_map:
1✔
912
                    if endpoint1 == endpoint2:
1✔
913
                        continue
1✔
914
                    for db2 in api_test_map[endpoint2]:
1✔
915
                        for acc2 in api_test_map[endpoint2][db2]:
1✔
916
                            for endpoint3 in api_test_map:
1✔
917
                                if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
918
                                    continue
1✔
919
                                for db3 in api_test_map[endpoint3]:
1✔
920
                                    for acc3 in api_test_map[endpoint3][db3]:
1✔
921
                                        if not settings.DEBUG:
1✔
922
                                            time.sleep(0.1)
×
923
                                        url = "/api/{}/{}/{}/{}/{}/{}/{}/{}".format(
1✔
924
                                            endpoint1,
925
                                            db1,
926
                                            endpoint2,
927
                                            db2,
928
                                            acc2,
929
                                            endpoint3,
930
                                            db3,
931
                                            acc3,
932
                                        )
933
                                        response = self._get_in_debug_mode(url)
1✔
934
                                        data = filter_by_endpoint(
1✔
935
                                            self.all_docs, endpoint1, db1
936
                                        )
937
                                        data = filter_by_endpoint(
1✔
938
                                            data, endpoint2, db2, acc2
939
                                        )
940
                                        data = filter_by_endpoint(
1✔
941
                                            data, endpoint3, db3, acc3
942
                                        )
943
                                        if len(data) == 0:
1✔
944
                                            self.assertEqual(
1✔
945
                                                response.status_code,
946
                                                status.HTTP_204_NO_CONTENT,
947
                                                "It should be an empty response for URL {}".format(
948
                                                    url
949
                                                ),
950
                                            )
951
                                        else:
952
                                            self.assertEqual(
1✔
953
                                                response.status_code,
954
                                                status.HTTP_200_OK,
955
                                                "It should be an OK response for URL {}".format(
956
                                                    url
957
                                                ),
958
                                            )
959
                                            eps = [endpoint1, endpoint2, endpoint3]
1✔
960
                                            dbs = [db1, db2, db3]
1✔
961
                                            accs = [None, acc2, acc3]
1✔
962
                                            expected = get_db_payload(
1✔
963
                                                data, eps, dbs, accs
964
                                            )
965
                                            self.assert_db_response_is_as_expected(
1✔
966
                                                response, expected, endpoint1, url
967
                                            )
968
                                            self.assert_db_integration_urls(
1✔
969
                                                data, eps, dbs, accs
970
                                            )
971
                                            self.assert_chain_urls(data, eps, dbs, accs)
1✔
972

973
    def test_acc_endpoint_endpoint(self):
1✔
974
        for endpoint1 in api_test_map:
1✔
975
            for db1 in api_test_map[endpoint1]:
1✔
976
                for acc1 in api_test_map[endpoint1][db1]:
1✔
977
                    for endpoint2 in api_test_map:
1✔
978
                        if endpoint1 == endpoint2:
1✔
979
                            continue
1✔
980
                        for endpoint3 in api_test_map:
1✔
981
                            if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
982
                                continue
1✔
983
                            if not settings.DEBUG:
1✔
984
                                time.sleep(0.1)
×
985
                            url = "/api/{}/{}/{}/{}/{}".format(
1✔
986
                                endpoint1, db1, acc1, endpoint2, endpoint3
987
                            )
988
                            data = filter_by_endpoint(
1✔
989
                                self.all_docs, endpoint1, db1, acc1
990
                            )
991
                            data = filter_by_endpoint(data, endpoint2)
1✔
992
                            data = filter_by_endpoint(data, endpoint3)
1✔
993
                            response = self._get_in_debug_mode(url)
1✔
994
                            if len(data) == 0:
1✔
995
                                self.assertEqual(
1✔
996
                                    response.status_code,
997
                                    status.HTTP_204_NO_CONTENT,
998
                                    "It should be an empty response for URL {}".format(
999
                                        url
1000
                                    ),
1001
                                )
1002
                            else:
1003
                                self.assertEqual(
1✔
1004
                                    response.status_code,
1005
                                    status.HTTP_200_OK,
1006
                                    "It should be an OK response for URL {}".format(
1007
                                        url
1008
                                    ),
1009
                                )
1010
                                eps = [endpoint1, endpoint2, endpoint3]
1✔
1011
                                dbs = [db1, None, None]
1✔
1012
                                accs = [acc1, None, None]
1✔
1013
                                expected = get_acc_payload(data, eps, dbs, accs)
1✔
1014
                                self.assert_obj_response_is_as_expected(
1✔
1015
                                    response.data, expected, endpoint1, url
1016
                                )
1017
                                self.assert_db_integration_urls(data, eps, dbs, accs)
1✔
1018
                                self.assert_chain_urls(data, eps, dbs, accs)
1✔
1019

1020
    def test_acc_endpoint_db(self):
1✔
1021
        print("test_acc_endpoint_db")
1✔
1022
        for endpoint1 in tqdm(api_test_map, desc="AED - Endpoint"):
1✔
1023
            for db1 in tqdm(api_test_map[endpoint1], desc="AED - DB"):
1✔
1024
                for acc1 in api_test_map[endpoint1][db1]:
1✔
1025
                    for endpoint2 in api_test_map:
1✔
1026
                        if endpoint1 == endpoint2:
1✔
1027
                            continue
1✔
1028
                        for endpoint3 in api_test_map:
1✔
1029
                            if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
1030
                                continue
1✔
1031
                            for db3 in api_test_map[endpoint3]:
1✔
1032
                                if not settings.DEBUG:
1✔
1033
                                    time.sleep(0.1)
×
1034
                                url = "/api/{}/{}/{}/{}/{}/{}".format(
1✔
1035
                                    endpoint1, db1, acc1, endpoint2, endpoint3, db3
1036
                                )
1037
                                data = filter_by_endpoint(
1✔
1038
                                    self.all_docs, endpoint1, db1, acc1
1039
                                )
1040
                                data = filter_by_endpoint(data, endpoint2)
1✔
1041
                                data = filter_by_endpoint(data, endpoint3, db3)
1✔
1042
                                response = self._get_in_debug_mode(url)
1✔
1043
                                if len(data) == 0:
1✔
1044
                                    self.assertEqual(
1✔
1045
                                        response.status_code,
1046
                                        status.HTTP_204_NO_CONTENT,
1047
                                        "It should be an empty response for URL {}".format(
1048
                                            url
1049
                                        ),
1050
                                    )
1051
                                else:
1052
                                    self.assertEqual(
1✔
1053
                                        response.status_code,
1054
                                        status.HTTP_200_OK,
1055
                                        "It should be an OK response for URL {}".format(
1056
                                            url
1057
                                        ),
1058
                                    )
1059
                                    eps = [endpoint1, endpoint2, endpoint3]
1✔
1060
                                    dbs = [db1, None, db3]
1✔
1061
                                    accs = [acc1, None, None]
1✔
1062
                                    expected = get_acc_payload(data, eps, dbs, accs)
1✔
1063
                                    self.assert_obj_response_is_as_expected(
1✔
1064
                                        response.data, expected, endpoint1, url
1065
                                    )
1066

1067
                                    # test_acc_db_endpoint
1068
                                    url = "/api/{}/{}/{}/{}/{}/{}".format(
1✔
1069
                                        endpoint1, db1, acc1, endpoint3, db3, endpoint2
1070
                                    )
1071
                                    response = self.client.get(url)
1✔
1072
                                    self.assertEqual(
1✔
1073
                                        response.status_code, status.HTTP_200_OK
1074
                                    )
1075
                                    self.assert_obj_response_is_as_expected(
1✔
1076
                                        response.data, expected, endpoint1, url
1077
                                    )
1078
                                    self.assert_db_integration_urls(
1✔
1079
                                        data, eps, dbs, accs
1080
                                    )
1081
                                    self.assert_chain_urls(data, eps, dbs, accs)
1✔
1082

1083
    def test_acc_endpoint_acc(self):
1✔
1084
        print("test_acc_endpoint_acc")
1✔
1085
        for endpoint1 in tqdm(api_test_map, desc="AEA - Endpoint"):
1✔
1086
            for db1 in tqdm(api_test_map[endpoint1], desc="AEA - DB"):
1✔
1087
                for acc1 in api_test_map[endpoint1][db1]:
1✔
1088
                    for endpoint2 in api_test_map:
1✔
1089
                        if endpoint1 == endpoint2:
1✔
1090
                            continue
1✔
1091
                        for endpoint3 in api_test_map:
1✔
1092
                            if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
1093
                                continue
1✔
1094
                            for db3 in api_test_map[endpoint3]:
1✔
1095
                                for acc3 in api_test_map[endpoint3][db3]:
1✔
1096
                                    if not settings.DEBUG:
1✔
1097
                                        time.sleep(0.1)
×
1098
                                    url = "/api/{}/{}/{}/{}/{}/{}/{}".format(
1✔
1099
                                        endpoint1,
1100
                                        db1,
1101
                                        acc1,
1102
                                        endpoint2,
1103
                                        endpoint3,
1104
                                        db3,
1105
                                        acc3,
1106
                                    )
1107
                                    data = filter_by_endpoint(
1✔
1108
                                        self.all_docs, endpoint1, db1, acc1
1109
                                    )
1110
                                    data = filter_by_endpoint(data, endpoint2)
1✔
1111
                                    data = filter_by_endpoint(
1✔
1112
                                        data, endpoint3, db3, acc3
1113
                                    )
1114
                                    response = self._get_in_debug_mode(url)
1✔
1115
                                    if len(data) == 0:
1✔
1116
                                        self.assertEqual(
1✔
1117
                                            response.status_code,
1118
                                            status.HTTP_204_NO_CONTENT,
1119
                                            "It should be an empty response for URL {}".format(
1120
                                                url
1121
                                            ),
1122
                                        )
1123
                                    else:
1124
                                        self.assertEqual(
1✔
1125
                                            response.status_code,
1126
                                            status.HTTP_200_OK,
1127
                                            "It should be an OK response for URL {}".format(
1128
                                                url
1129
                                            ),
1130
                                        )
1131
                                        eps = [endpoint1, endpoint2, endpoint3]
1✔
1132
                                        dbs = [db1, None, db3]
1✔
1133
                                        accs = [acc1, None, acc3]
1✔
1134
                                        expected = get_acc_payload(data, eps, dbs, accs)
1✔
1135
                                        self.assert_obj_response_is_as_expected(
1✔
1136
                                            response.data, expected, endpoint1, url
1137
                                        )
1138
                                        self.assert_db_integration_urls(
1✔
1139
                                            data, eps, dbs, accs
1140
                                        )
1141
                                        self.assert_chain_urls(data, eps, dbs, accs)
1✔
1142

1143
                                        # test_acc_acc_endpoint
1144
                                        url = "/api/{}/{}/{}/{}/{}/{}/{}".format(
1✔
1145
                                            endpoint1,
1146
                                            db1,
1147
                                            acc1,
1148
                                            endpoint3,
1149
                                            db3,
1150
                                            acc3,
1151
                                            endpoint2,
1152
                                        )
1153
                                        response = self.client.get(url)
1✔
1154
                                        self.assertEqual(
1✔
1155
                                            response.status_code, status.HTTP_200_OK
1156
                                        )
1157
                                        self.assert_obj_response_is_as_expected(
1✔
1158
                                            response.data, expected, endpoint1, url
1159
                                        )
1160

1161
    def test_acc_db_db(self):
1✔
1162
        print("test_acc_db_db")
1✔
1163
        for endpoint1 in tqdm(api_test_map, desc="ADD - Endpoint"):
1✔
1164
            for db1 in tqdm(api_test_map[endpoint1], desc="ADD - DB"):
1✔
1165
                for acc1 in api_test_map[endpoint1][db1]:
1✔
1166
                    for endpoint2 in api_test_map:
1✔
1167
                        if endpoint1 == endpoint2:
1✔
1168
                            continue
1✔
1169
                        for db2 in api_test_map[endpoint2]:
1✔
1170
                            for endpoint3 in api_test_map:
1✔
1171
                                if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
1172
                                    continue
1✔
1173
                                for db3 in api_test_map[endpoint3]:
1✔
1174
                                    if not settings.DEBUG:
1✔
1175
                                        time.sleep(0.1)
×
1176
                                    url = "/api/{}/{}/{}/{}/{}/{}/{}".format(
1✔
1177
                                        endpoint1,
1178
                                        db1,
1179
                                        acc1,
1180
                                        endpoint2,
1181
                                        db2,
1182
                                        endpoint3,
1183
                                        db3,
1184
                                    )
1185
                                    data = filter_by_endpoint(
1✔
1186
                                        self.all_docs, endpoint1, db1, acc1
1187
                                    )
1188
                                    data = filter_by_endpoint(data, endpoint2, db2)
1✔
1189
                                    data = filter_by_endpoint(data, endpoint3, db3)
1✔
1190
                                    response = self._get_in_debug_mode(url)
1✔
1191
                                    if len(data) == 0:
1✔
1192
                                        self.assertEqual(
1✔
1193
                                            response.status_code,
1194
                                            status.HTTP_204_NO_CONTENT,
1195
                                            "It should be an empty response for URL {}".format(
1196
                                                url
1197
                                            ),
1198
                                        )
1199
                                    else:
1200
                                        self.assertEqual(
1✔
1201
                                            response.status_code,
1202
                                            status.HTTP_200_OK,
1203
                                            "It should be an OK response for URL {}".format(
1204
                                                url
1205
                                            ),
1206
                                        )
1207
                                        eps = [endpoint1, endpoint2, endpoint3]
1✔
1208
                                        dbs = [db1, db2, db3]
1✔
1209
                                        accs = [acc1, None, None]
1✔
1210
                                        expected = get_acc_payload(data, eps, dbs, accs)
1✔
1211
                                        self.assert_obj_response_is_as_expected(
1✔
1212
                                            response.data, expected, endpoint1, url
1213
                                        )
1214
                                        self.assert_db_integration_urls(
1✔
1215
                                            data, eps, dbs, accs
1216
                                        )
1217
                                        self.assert_chain_urls(data, eps, dbs, accs)
1✔
1218

1219
    def test_acc_db_acc(self):
1✔
1220
        print("test_acc_db_acc")
1✔
1221
        for endpoint1 in tqdm(api_test_map, desc="ADA - Endpoint"):
1✔
1222
            for db1 in tqdm(api_test_map[endpoint1], desc="ADA - DB"):
1✔
1223
                for acc1 in api_test_map[endpoint1][db1]:
1✔
1224
                    for endpoint2 in api_test_map:
1✔
1225
                        if endpoint1 == endpoint2:
1✔
1226
                            continue
1✔
1227
                        for db2 in api_test_map[endpoint2]:
1✔
1228
                            for endpoint3 in api_test_map:
1✔
1229
                                if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
1230
                                    continue
1✔
1231
                                for db3 in api_test_map[endpoint3]:
1✔
1232
                                    for acc3 in api_test_map[endpoint3][db3]:
1✔
1233
                                        if not settings.DEBUG:
1✔
1234
                                            time.sleep(0.1)
×
1235
                                        url = "/api/{}/{}/{}/{}/{}/{}/{}/{}".format(
1✔
1236
                                            endpoint1,
1237
                                            db1,
1238
                                            acc1,
1239
                                            endpoint2,
1240
                                            db2,
1241
                                            endpoint3,
1242
                                            db3,
1243
                                            acc3,
1244
                                        )
1245
                                        data = filter_by_endpoint(
1✔
1246
                                            self.all_docs, endpoint1, db1, acc1
1247
                                        )
1248
                                        data = filter_by_endpoint(data, endpoint2, db2)
1✔
1249
                                        data = filter_by_endpoint(
1✔
1250
                                            data, endpoint3, db3, acc3
1251
                                        )
1252
                                        response = self._get_in_debug_mode(url)
1✔
1253
                                        if len(data) == 0:
1✔
1254
                                            self.assertEqual(
1✔
1255
                                                response.status_code,
1256
                                                status.HTTP_204_NO_CONTENT,
1257
                                                "It should be an empty response for URL {}".format(
1258
                                                    url
1259
                                                ),
1260
                                            )
1261
                                        else:
1262
                                            self.assertEqual(
1✔
1263
                                                response.status_code,
1264
                                                status.HTTP_200_OK,
1265
                                                "It should be an OK response for URL {}".format(
1266
                                                    url
1267
                                                ),
1268
                                            )
1269
                                            eps = [endpoint1, endpoint2, endpoint3]
1✔
1270
                                            dbs = [db1, db2, db3]
1✔
1271
                                            accs = [acc1, None, acc3]
1✔
1272
                                            expected = get_acc_payload(
1✔
1273
                                                data, eps, dbs, accs
1274
                                            )
1275
                                            self.assert_obj_response_is_as_expected(
1✔
1276
                                                response.data, expected, endpoint1, url
1277
                                            )
1278
                                            self.assert_db_integration_urls(
1✔
1279
                                                data, eps, dbs, accs
1280
                                            )
1281
                                            self.assert_chain_urls(data, eps, dbs, accs)
1✔
1282

1283
                                            # test_acc_acc_db
1284
                                            url = "/api/{}/{}/{}/{}/{}/{}/{}/{}".format(
1✔
1285
                                                endpoint1,
1286
                                                db1,
1287
                                                acc1,
1288
                                                endpoint3,
1289
                                                db3,
1290
                                                acc3,
1291
                                                endpoint2,
1292
                                                db2,
1293
                                            )
1294
                                            response = self.client.get(url)
1✔
1295
                                            self.assertEqual(
1✔
1296
                                                response.status_code, status.HTTP_200_OK
1297
                                            )
1298
                                            self.assert_obj_response_is_as_expected(
1✔
1299
                                                response.data, expected, endpoint1, url
1300
                                            )
1301

1302
    def test_acc_acc_acc(self):
1✔
1303
        print("test_acc_acc_acc")
1✔
1304
        for endpoint1 in tqdm(api_test_map, desc="AAA - Endpoint"):
1✔
1305
            for db1 in tqdm(api_test_map[endpoint1], desc="AAA - DB"):
1✔
1306
                for acc1 in api_test_map[endpoint1][db1]:
1✔
1307
                    for endpoint2 in api_test_map:
1✔
1308
                        if endpoint1 == endpoint2:
1✔
1309
                            continue
1✔
1310
                        for db2 in api_test_map[endpoint2]:
1✔
1311
                            for acc2 in api_test_map[endpoint2][db2]:
1✔
1312
                                for endpoint3 in api_test_map:
1✔
1313
                                    if endpoint1 == endpoint3 or endpoint2 == endpoint3:
1✔
1314
                                        continue
1✔
1315
                                    for db3 in api_test_map[endpoint3]:
1✔
1316
                                        for acc3 in api_test_map[endpoint3][db3]:
1✔
1317
                                            if not settings.DEBUG:
1✔
1318
                                                time.sleep(0.1)
×
1319
                                            url = "/api/{}/{}/{}/{}/{}/{}/{}/{}/{}".format(
1✔
1320
                                                endpoint1,
1321
                                                db1,
1322
                                                acc1,
1323
                                                endpoint2,
1324
                                                db2,
1325
                                                acc2,
1326
                                                endpoint3,
1327
                                                db3,
1328
                                                acc3,
1329
                                            )
1330
                                            data = filter_by_endpoint(
1✔
1331
                                                self.all_docs, endpoint1, db1, acc1
1332
                                            )
1333
                                            data = filter_by_endpoint(
1✔
1334
                                                data, endpoint2, db2, acc2
1335
                                            )
1336
                                            data = filter_by_endpoint(
1✔
1337
                                                data, endpoint3, db3, acc3
1338
                                            )
1339
                                            response = self._get_in_debug_mode(url)
1✔
1340
                                            if len(data) == 0:
1✔
1341
                                                self.assertEqual(
1✔
1342
                                                    response.status_code,
1343
                                                    status.HTTP_204_NO_CONTENT,
1344
                                                    "It should be an empty response for URL {}".format(
1345
                                                        url
1346
                                                    ),
1347
                                                )
1348
                                            else:
1349
                                                self.assertEqual(
1✔
1350
                                                    response.status_code,
1351
                                                    status.HTTP_200_OK,
1352
                                                    "It should be an OK response for URL {}".format(
1353
                                                        url
1354
                                                    ),
1355
                                                )
1356
                                                eps = [endpoint1, endpoint2, endpoint3]
1✔
1357
                                                dbs = [db1, db2, db3]
1✔
1358
                                                accs = [acc1, acc2, acc3]
1✔
1359
                                                expected = get_acc_payload(
1✔
1360
                                                    data, eps, dbs, accs
1361
                                                )
1362
                                                self.assert_obj_response_is_as_expected(
1✔
1363
                                                    response.data,
1364
                                                    expected,
1365
                                                    endpoint1,
1366
                                                    url,
1367
                                                )
1368
                                                self.assert_db_integration_urls(
1✔
1369
                                                    data, eps, dbs, accs
1370
                                                )
1371
                                                self.assert_chain_urls(
1✔
1372
                                                    data, eps, dbs, accs
1373
                                                )
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc