1
1
import os
2
2
import responses
3
- from cellengine import _helpers
3
+ import cellengine
4
4
from cellengine import loader
5
5
6
+ # TODO: pull the double-responses from a name request into a fixture
7
+ # see the `responses` documentation on pytest fixtures
8
+
6
9
7
10
base_url = os .environ .get ("CELLENGINE_DEVELOPMENT" , "https://cellengine.com/api/v1/" )
8
11
9
12
10
13
@responses .activate
11
- def test_get_experiment_cache (client , experiments , fcsfiles , experiment ):
14
+ def test_lru_cache (client , experiments ):
12
15
"""Test to see if the LRU cache added hits. Multiple queries of the same
13
16
object should add hits and new queries should add a miss."""
17
+ loader .by_name .cache_clear ()
18
+
19
+ responses .add (responses .GET , base_url + "experiments" , json = experiments [0 ])
20
+ responses .add (
21
+ responses .GET ,
22
+ base_url + "experiments/5d38a6f79fae87499999a74b" ,
23
+ json = experiments [0 ],
24
+ )
25
+ exp1 = client .get_experiment (name = "test_experiment" )
26
+ assert loader .by_name .cache_info ().misses == 1
27
+
28
+ responses .add (responses .GET , base_url + "experiments" , json = experiments [0 ])
29
+ responses .add (
30
+ responses .GET ,
31
+ base_url + "experiments/5d38a6f79fae87499999a74b" ,
32
+ json = experiments [0 ],
33
+ )
34
+ exp1 = client .get_experiment (name = "test_experiment" )
35
+ assert loader .by_name .cache_info ().misses == 1
36
+ assert loader .by_name .cache_info ().hits == 1
37
+
38
+ responses .add (responses .GET , base_url + "experiments" , json = experiments [1 ])
39
+ responses .add (
40
+ responses .GET ,
41
+ base_url + "experiments/5d38a6f79fae87499999a74b" ,
42
+ json = experiments [1 ],
43
+ )
44
+ exp2 = client .get_experiment (name = "test_experiment-1" )
45
+ assert loader .by_name .cache_info ().misses == 2
46
+
47
+
48
+ @responses .activate
49
+ def test_lru_cache_paths (client , experiments , fcsfiles , experiment ):
50
+ """Test whether the cache returns a url with a name query on the first
51
+ request and then an ID on the second request."""
52
+ loader .by_name .cache_clear ()
53
+
14
54
responses .add (responses .GET , base_url + "experiments" , json = experiments [0 ])
15
55
responses .add (
16
56
responses .GET ,
17
57
base_url + "experiments/5d38a6f79fae87499999a74b" ,
18
58
json = experiments [0 ],
19
59
)
20
- loader .lookup_by_name_or_cached_id .cache_clear ()
21
60
22
61
exp = client .get_experiment (name = "test_experiment" )
23
62
assert (
24
63
responses .calls [0 ].request .url
25
64
== base_url + "experiments?query=eq(name,%22test_experiment%22)&limit=2"
26
65
)
27
- assert loader .lookup_by_name_or_cached_id .cache_info ().misses == 1
28
66
29
67
responses .add (responses .GET , base_url + "experiments" , json = experiments [0 ])
30
68
exp_copy = client .get_experiment (name = "test_experiment" )
31
- assert loader .lookup_by_name_or_cached_id .cache_info ().hits == 1
32
-
33
- responses .add (responses .GET , base_url + "experiments" , json = experiments [0 ])
34
- exp_copy2 = client .get_experiment (name = "test_experiment" )
35
- assert loader .lookup_by_name_or_cached_id .cache_info ().hits == 2
69
+ assert (
70
+ responses .calls [1 ].request .url
71
+ == base_url + "experiments/5d38a6f79fae87499999a74b"
72
+ )
36
73
37
74
responses .add (responses .GET , base_url + "experiments" , json = [experiments [1 ]])
38
75
responses .add (
@@ -41,6 +78,85 @@ def test_get_experiment_cache(client, experiments, fcsfiles, experiment):
41
78
json = experiments [1 ],
42
79
)
43
80
different_exp = client .get_experiment (name = "pytest_experiment" )
44
- assert different_exp .name == "pytest_experiment"
45
- assert loader .lookup_by_name_or_cached_id .cache_info ().misses == 2
46
- assert loader .lookup_by_name_or_cached_id .cache_info ().hits == 2
81
+ assert (
82
+ responses .calls [2 ].request .url
83
+ == base_url + "experiments/5d38a6f79fae87499999a74b"
84
+ )
85
+
86
+
87
+ @responses .activate
88
+ def test_different_item_cache_accessor (client , experiments , fcsfiles ):
89
+ """Test to see if the LRU cache adds hits. Multiple queries of the same
90
+ object should add hits and new queries should add a miss.
91
+
92
+ Multiple queries of files of the same name in different experiments should
93
+ register as different queries."""
94
+ loader .by_name .cache_clear ()
95
+
96
+ responses .add (responses .GET , base_url + "experiments" , json = experiments [0 ])
97
+ responses .add (
98
+ responses .GET ,
99
+ base_url + "experiments/5d38a6f79fae87499999a74b" ,
100
+ json = experiments [0 ],
101
+ )
102
+ exp1 = client .get_experiment (name = "test_experiment" )
103
+
104
+ responses .add (
105
+ responses .GET ,
106
+ base_url + "experiments/5d38a6f79fae87499999a74b/fcsfiles" ,
107
+ json = fcsfiles [0 ],
108
+ )
109
+ responses .add (
110
+ responses .GET ,
111
+ base_url
112
+ + "experiments/5d38a6f79fae87499999a74b/fcsfiles/5d64abe2ca9df61349ed8e79" ,
113
+ json = fcsfiles [0 ],
114
+ )
115
+ file1 = exp1 .get_fcsfile (name = "Specimen_001_A12_A12.fcs" )
116
+ assert loader .by_name .cache_info ().misses == 2
117
+
118
+ responses .add (responses .GET , base_url + "experiments" , json = experiments [0 ])
119
+ responses .add (
120
+ responses .GET ,
121
+ base_url + "experiments/5d38a6f79fae87499999a74b" ,
122
+ json = experiments [0 ],
123
+ )
124
+ exp2 = client .get_experiment (name = "test_experiment-1" )
125
+ assert loader .by_name .cache_info ().misses == 3
126
+
127
+ responses .add (
128
+ responses .GET ,
129
+ base_url + "experiments/5d38a6f79fae87499999a74b/fcsfiles" ,
130
+ json = fcsfiles [0 ],
131
+ )
132
+ responses .add (
133
+ responses .GET ,
134
+ base_url
135
+ + "experiments/5d38a6f79fae87499999a74b/fcsfiles/5d64abe2ca9df61349ed8e79" ,
136
+ json = fcsfiles [0 ],
137
+ )
138
+ file2 = exp2 .get_fcsfile (name = "Specimen_001_A12_A12.fcs" )
139
+ assert (
140
+ loader .by_name .cache_info ().misses == 4
141
+ ) # not 3 because this is a different experiment
142
+
143
+
144
+ @responses .activate
145
+ def test_global_cache_accessor (client , experiments ):
146
+ loader .by_name .cache_clear ()
147
+ assert cellengine .cache_info ().misses == 0
148
+ assert loader .by_name .cache_info ().misses == 0
149
+
150
+ responses .add (responses .GET , base_url + "experiments" , json = experiments [0 ])
151
+ responses .add (
152
+ responses .GET ,
153
+ base_url + "experiments/5d38a6f79fae87499999a74b" ,
154
+ json = experiments [0 ],
155
+ )
156
+ exp1 = client .get_experiment (name = "test_experiment" )
157
+ assert cellengine .cache_info ().misses == 1
158
+ assert loader .by_name .cache_info ().misses == 1
159
+
160
+ cellengine .clear_cache ()
161
+ assert cellengine .cache_info ().misses == 0
162
+ assert loader .by_name .cache_info ().misses == 0
0 commit comments