Skip to content

Commit ab34b8f

Browse files
committed
Integration tests
1 parent 7c08f9e commit ab34b8f

11 files changed

+308
-0
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,10 @@ cd app && python main.py
2424
docker build -t imuse-server .
2525
docker run -d -v $(pwd)/obj:/obj -p 80:80 imuse-server
2626
```
27+
28+
### Integration Tests
29+
To run the integration tests, start the service at localhost on port 8000 (see instructions above), then run the following:
30+
```
31+
python -m unittest discover -s test
32+
```
33+
Alternatively, you could change the `API_BASE` variable in `test/constants_for_tests.py` and run the tests against any running instance of the app.

requirements_dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
requests==2.19.1

test/constants_for_tests.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
API_BASE = 'http://localhost:8000'

test/test_clustering.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import requests
2+
import json
3+
import unittest
4+
5+
from constants_for_tests import *
6+
7+
class TestClustering(unittest.TestCase):
8+
9+
def test_clustering(self):
10+
url = API_BASE + '/clustering'
11+
payload = {
12+
"sources":["ICGC-BRCA-EU"],
13+
"signatures":[
14+
"COSMIC 1",
15+
"COSMIC 2",
16+
"COSMIC 3",
17+
"COSMIC 5",
18+
"COSMIC 6",
19+
"COSMIC 8",
20+
"COSMIC 13",
21+
"COSMIC 17",
22+
"COSMIC 18",
23+
"COSMIC 20",
24+
"COSMIC 26",
25+
"COSMIC 30"
26+
]
27+
}
28+
r = requests.post(url, data=json.dumps(payload))
29+
r.raise_for_status()
30+
res = r.json()
31+
self.assertEqual({'name', 'children'}, set(res.keys()))

test/test_data_listing.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import requests
2+
import unittest
3+
4+
from constants_for_tests import *
5+
6+
class TestDataListing(unittest.TestCase):
7+
8+
def test_data_listing(self):
9+
url = API_BASE + '/data-listing'
10+
r = requests.post(url)
11+
r.raise_for_status()
12+
res = r.json()
13+
self.assertEqual(['sources', 'sigs', 'sig_presets'], list(res.keys()))
14+
self.assertIn("ICGC-BRCA-EU", list(res['sources'].keys()))
15+
brca_obj = {
16+
"name": "Breast ER+ and HER2- Cancer - EU/UK",
17+
"num_donors": 569,
18+
"source": "ICGC",
19+
"has_clinical": True,
20+
"has_ssm": True,
21+
"has_counts": True
22+
}
23+
self.assertEqual(brca_obj, res['sources']['ICGC-BRCA-EU'])
24+
self.assertEqual({'name', 'description', 'index', 'publication'}, set(res['sigs'][0].keys()))
25+
self.assertEqual({'group', 'id', 'cancer-types'}, set(res['sig_presets'][0].keys()))
26+
self.assertEqual({'name', 'id', 'signatures'}, set(res['sig_presets'][0]['cancer-types'][0].keys()))
27+

test/test_exposures.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import requests
2+
import json
3+
import unittest
4+
5+
from constants_for_tests import *
6+
7+
class TestExposures(unittest.TestCase):
8+
9+
def test_exposures(self):
10+
url = API_BASE + '/exposures'
11+
payload = {
12+
"sources": ["ICGC-BRCA-EU"],
13+
"signatures": [
14+
"COSMIC 1",
15+
"COSMIC 2",
16+
"COSMIC 3",
17+
"COSMIC 4",
18+
"COSMIC 5",
19+
"COSMIC 6",
20+
"COSMIC 7",
21+
"COSMIC 8",
22+
"COSMIC 9",
23+
"COSMIC 10",
24+
"COSMIC 11",
25+
"COSMIC 12",
26+
"COSMIC 13",
27+
"COSMIC 14",
28+
"COSMIC 15",
29+
"COSMIC 16",
30+
"COSMIC 17",
31+
"COSMIC 18",
32+
"COSMIC 19",
33+
"COSMIC 20",
34+
"COSMIC 21",
35+
"COSMIC 22",
36+
"COSMIC 23",
37+
"COSMIC 24",
38+
"COSMIC 25",
39+
"COSMIC 26",
40+
"COSMIC 27",
41+
"COSMIC 28",
42+
"COSMIC 29",
43+
"COSMIC 30",
44+
"5* A"
45+
]
46+
}
47+
r = requests.post(url, data=json.dumps(payload))
48+
r.raise_for_status()
49+
res = r.json()
50+
self.assertEqual(569, len(res))
51+
self.assertEqual({'donor_id', 'proj_id', 'exposures', 'clinical'}, set(res[0].keys()))
52+
self.assertEqual(31, len(res[0]['exposures']))
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import requests
2+
import json
3+
import unittest
4+
5+
from constants_for_tests import *
6+
7+
class TestExposuresSingleDonor(unittest.TestCase):
8+
9+
def test_exposures_single_donor(self):
10+
url = API_BASE + '/exposures-single-donor'
11+
payload = {
12+
"donor_id": "DO220823",
13+
"proj_id": "ICGC-BRCA-EU",
14+
"sources":["PCAWG-BRCA-EU"],
15+
"signatures":[
16+
"COSMIC 1",
17+
"COSMIC 2",
18+
"COSMIC 3",
19+
"COSMIC 4",
20+
"COSMIC 5",
21+
"COSMIC 6",
22+
"COSMIC 7",
23+
"COSMIC 8",
24+
"COSMIC 9",
25+
"COSMIC 10",
26+
"COSMIC 11",
27+
"COSMIC 12",
28+
"COSMIC 13",
29+
"COSMIC 14",
30+
"COSMIC 15",
31+
"COSMIC 16",
32+
"COSMIC 17",
33+
"COSMIC 18",
34+
"COSMIC 19",
35+
"COSMIC 20",
36+
"COSMIC 21",
37+
"COSMIC 22",
38+
"COSMIC 23",
39+
"COSMIC 24",
40+
"COSMIC 25",
41+
"COSMIC 26",
42+
"COSMIC 27",
43+
"COSMIC 28",
44+
"COSMIC 29",
45+
"COSMIC 30",
46+
"5* A"
47+
]
48+
}
49+
r = requests.post(url, data=json.dumps(payload))
50+
r.raise_for_status()
51+
res = r.json()
52+
self.assertEqual(1, len(res))
53+
self.assertEqual({'donor_id', 'proj_id', 'exposures', 'clinical'}, set(res[0].keys()))
54+
self.assertEqual(31, len(res[0]['exposures']))

test/test_kataegis.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import requests
2+
import json
3+
import unittest
4+
5+
from constants_for_tests import *
6+
7+
class TestKataegis(unittest.TestCase):
8+
9+
def test_kataegis(self):
10+
url = API_BASE + '/kataegis'
11+
12+
payload = {
13+
"sources":[
14+
"ICGC-BRCA-EU"
15+
]
16+
}
17+
r = requests.post(url, data=json.dumps(payload))
18+
r.raise_for_status()
19+
res = r.json()
20+
self.assertEqual(569, len(res.keys()))
21+
self.assertEqual(4, len(res['DO217786']['kataegis']['1']))

test/test_rainfall.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import requests
2+
import json
3+
import csv
4+
import unittest
5+
6+
from constants_for_tests import *
7+
8+
class TestRainfall(unittest.TestCase):
9+
10+
def test_rainfall(self):
11+
url = API_BASE + '/kataegis-rainfall'
12+
13+
payload = {
14+
"proj_id": "ICGC-BRCA-EU",
15+
"donor_id": "DO217786"
16+
}
17+
r = requests.post(url, data=json.dumps(payload))
18+
r.raise_for_status()
19+
decoded_content = r.content.decode('utf-8')
20+
21+
res = list(csv.reader(decoded_content.splitlines(), delimiter=','))
22+
self.assertEqual({'chr', 'pos', 'cat', 'cat_index', 'mut_dist', 'kataegis'}, set(res[0]))
23+
24+
self.assertEqual(3107, len(res))
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import requests
2+
import json
3+
import unittest
4+
5+
from constants_for_tests import *
6+
7+
class TestSamplesWithSignatures(unittest.TestCase):
8+
9+
def test_samples_with_signatures(self):
10+
url = API_BASE + '/samples-with-signatures'
11+
12+
payload = {
13+
"sources":["ICGC-BRCA-EU"],
14+
"signatures":[
15+
"COSMIC 1",
16+
"COSMIC 2",
17+
"COSMIC 3",
18+
"COSMIC 4",
19+
"COSMIC 5",
20+
"COSMIC 6",
21+
"COSMIC 7",
22+
"COSMIC 8",
23+
"COSMIC 9",
24+
"COSMIC 10",
25+
"COSMIC 11",
26+
"COSMIC 12",
27+
"COSMIC 13",
28+
"COSMIC 14",
29+
"COSMIC 15",
30+
"COSMIC 16",
31+
"COSMIC 17",
32+
"COSMIC 18",
33+
"COSMIC 19",
34+
"COSMIC 20",
35+
"COSMIC 21",
36+
"COSMIC 22",
37+
"COSMIC 23",
38+
"COSMIC 24",
39+
"COSMIC 25",
40+
"COSMIC 26",
41+
"COSMIC 27",
42+
"COSMIC 28",
43+
"COSMIC 29",
44+
"COSMIC 30",
45+
"5* A"
46+
]
47+
}
48+
r = requests.post(url, data=json.dumps(payload))
49+
r.raise_for_status()
50+
res = r.json()
51+
52+
self.assertEqual({'signatures', 'projects'}, set(res.keys()))
53+
self.assertEqual(31, len(list(res['signatures'].keys())))
54+
self.assertEqual(569, res['projects']['ICGC-BRCA-EU'])
55+

0 commit comments

Comments
 (0)