1
+ import datetime as dt
2
+
1
3
from arctic .store .metadata_store import MetadataStore
2
4
from mock import create_autospec , call
3
5
4
6
5
7
def test_ensure_index ():
6
8
ms = create_autospec (MetadataStore )
7
9
MetadataStore ._ensure_index (ms )
8
- assert ms .create_index .call_args_list == [call ([('symbol' , 1 ), ('start_time' , - 1 )], unique = True , background = True )]
10
+ assert ms .create_index .call_args_list == [call ([('symbol' , 1 ),
11
+ ('start_time' , - 1 )],
12
+ unique = True ,
13
+ background = True )]
14
+
15
+
16
+ def test_list_symbols_simple ():
17
+ ms = create_autospec (MetadataStore )
18
+ ms .distinct .return_value = []
19
+
20
+ MetadataStore .list_symbols (ms )
21
+ ms .distinct .assert_called_once_with ('symbol' )
22
+
23
+
24
+ def test_list_symbols_regex ():
25
+ ms = create_autospec (MetadataStore )
26
+ ms .aggregate .return_value = []
27
+
28
+ expected_pipeline = [
29
+ {'$sort' : {'symbol' : 1 , 'start_time' : - 1 }},
30
+ {'$match' : {'symbol' : {'$regex' : 'test.*' }}},
31
+ {'$group' : {'_id' : '$symbol' , 'metadata' : {'$first' : '$metadata' }}},
32
+ {'$project' : {'_id' : 0 , 'symbol' : '$_id' }}
33
+ ]
34
+
35
+ MetadataStore .list_symbols (ms , regex = 'test.*' )
36
+ ms .aggregate .assert_called_once_with (expected_pipeline )
37
+
38
+
39
+ def test_list_symbols_as_of ():
40
+ ms = create_autospec (MetadataStore )
41
+ ms .aggregate .return_value = []
42
+
43
+ expected_pipeline = [
44
+ {'$sort' : {'symbol' : 1 , 'start_time' : - 1 }},
45
+ {'$match' : {'symbol' : {'$regex' : '^' },
46
+ 'start_time' : {'$lte' : dt .datetime (2018 , 5 , 11 )}}},
47
+ {'$group' : {'_id' : '$symbol' , 'metadata' : {'$first' : '$metadata' }}},
48
+ {'$project' : {'_id' : 0 , 'symbol' : '$_id' }}
49
+ ]
50
+
51
+ MetadataStore .list_symbols (ms , as_of = dt .datetime (2018 , 5 , 11 ))
52
+ ms .aggregate .assert_called_once_with (expected_pipeline )
53
+
54
+
55
+ def test_list_symbols_as_of_regex ():
56
+ ms = create_autospec (MetadataStore )
57
+ ms .aggregate .return_value = []
58
+
59
+ expected_pipeline = [
60
+ {'$sort' : {'symbol' : 1 , 'start_time' : - 1 }},
61
+ {'$match' : {'symbol' : {'$regex' : 'test.*' },
62
+ 'start_time' : {'$lte' : dt .datetime (2018 , 5 , 11 )}}},
63
+ {'$group' : {'_id' : '$symbol' , 'metadata' : {'$first' : '$metadata' }}},
64
+ {'$project' : {'_id' : 0 , 'symbol' : '$_id' }}
65
+ ]
66
+
67
+ MetadataStore .list_symbols (ms ,
68
+ regex = 'test.*' ,
69
+ as_of = dt .datetime (2018 , 5 , 11 ))
70
+ ms .aggregate .assert_called_once_with (expected_pipeline )
71
+
72
+
73
+ def test_list_symbols_metadata_query ():
74
+ ms = create_autospec (MetadataStore )
75
+ ms .aggregate .return_value = []
76
+
77
+ expected_pipeline = [
78
+ {'$sort' : {'symbol' : 1 , 'start_time' : - 1 }},
79
+ {'$group' : {'_id' : '$symbol' , 'metadata' : {'$first' : '$metadata' }}},
80
+ {'$match' : {'metadata.foo' : 'bar' }},
81
+ {'$project' : {'_id' : 0 , 'symbol' : '$_id' }}
82
+ ]
83
+
84
+ MetadataStore .list_symbols (ms , foo = 'bar' )
85
+ ms .aggregate .assert_called_once_with (expected_pipeline )
86
+
87
+
88
+ def test_list_symbols_all_options ():
89
+ ms = create_autospec (MetadataStore )
90
+ ms .aggregate .return_value = []
91
+
92
+ expected_pipeline = [
93
+ {'$sort' : {'symbol' : 1 , 'start_time' : - 1 }},
94
+ {'$match' : {'symbol' : {'$regex' : 'test.*' },
95
+ 'start_time' : {'$lte' : dt .datetime (2018 , 5 , 11 )}}},
96
+ {'$group' : {'_id' : '$symbol' , 'metadata' : {'$first' : '$metadata' }}},
97
+ {'$match' : {'metadata.foo' : 'bar' }},
98
+ {'$project' : {'_id' : 0 , 'symbol' : '$_id' }}
99
+ ]
100
+
101
+ MetadataStore .list_symbols (ms ,
102
+ regex = 'test.*' ,
103
+ as_of = dt .datetime (2018 , 5 , 11 ),
104
+ foo = 'bar' )
105
+ ms .aggregate .assert_called_once_with (expected_pipeline )
0 commit comments