Skip to content

Commit fba1f5d

Browse files
committed
RDBC-692 BasicCountersIndexes_JavaScript::basicMapReduceIndexWithLoad
1 parent 476592e commit fba1f5d

File tree

1 file changed

+67
-1
lines changed

1 file changed

+67
-1
lines changed

ravendb/tests/jvm_migrated_tests/client_tests/indexing_tests/counters_tests/test_basic_counters_indexes_javascript.py

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
from ravendb import GetTermsOperation
12
from ravendb.documents.indexes.counters import AbstractJavaScriptCountersIndexCreationTask
23
from ravendb.infrastructure.entities import User
3-
from ravendb.infrastructure.orders import Company
4+
from ravendb.infrastructure.orders import Company, Address
45
from ravendb.tests.test_base import TestBase
56

67

@@ -55,6 +56,38 @@ def __init__(self):
5556
self.maps = maps
5657

5758

59+
class AverageHeartRate_WithLoad(AbstractJavaScriptCountersIndexCreationTask):
60+
class Result:
61+
def __init__(self, heart_beat: float = None, city: str = None, count: int = None):
62+
self.heart_beat = heart_beat
63+
self.city = city
64+
self.count = count
65+
66+
def __init__(self):
67+
super(AverageHeartRate_WithLoad, self).__init__()
68+
mapp = (
69+
"counters.map('Users', 'heartRate', function (counter) {\n"
70+
"var user = load(counter.DocumentId, 'Users');\n"
71+
"var address = load(user.address_id, 'Addresses');\n"
72+
"return {\n"
73+
" heartBeat: counter.Value,\n"
74+
" count: 1,\n"
75+
" city: address.city\n"
76+
"};\n"
77+
"})"
78+
)
79+
self.maps = [mapp]
80+
81+
self.reduce = (
82+
"groupBy(r => ({ city: r.city }))\n"
83+
" .aggregate(g => ({\n"
84+
" heartBeat: g.values.reduce((total, val) => val.heartBeat + total, 0) / g.values.reduce((total, val) => val.count + total, 0),\n"
85+
" city: g.key.city,\n"
86+
" count: g.values.reduce((total, val) => val.count + total, 0)\n"
87+
" }))"
88+
)
89+
90+
5891
class TestBasicCountersIndexes_JavaScript(TestBase):
5992
def setUp(self):
6093
super(TestBasicCountersIndexes_JavaScript, self).setUp()
@@ -80,3 +113,36 @@ def test_basic_multi_map_index(self):
80113
with self.store.open_session() as session:
81114
results = list(session.query_index_type(MyMultiMapCounterIndex, MyMultiMapCounterIndex.Result))
82115
self.assertEqual(3, len(results))
116+
117+
def test_basic_map_reduce_index_with_load(self):
118+
with self.store.open_session() as session:
119+
for i in range(10):
120+
address = Address(city="NY")
121+
session.store(address, f"addresses/{i}")
122+
123+
user = User(address_id=f"addresses/{i}")
124+
session.store(user, f"users/{i}")
125+
126+
session.counters_for_entity(user).increment("heartRate", 180 + i)
127+
128+
session.save_changes()
129+
130+
time_series_index = AverageHeartRate_WithLoad()
131+
index_name = time_series_index.index_name
132+
index_definition = time_series_index.create_index_definition()
133+
134+
time_series_index.execute(self.store)
135+
136+
self.wait_for_indexing(self.store)
137+
138+
terms = self.store.maintenance.send(GetTermsOperation(index_name, "heartBeat", None))
139+
self.assertEqual(1, len(terms))
140+
self.assertIn("184.5", terms)
141+
142+
terms = self.store.maintenance.send(GetTermsOperation(index_name, "count", None))
143+
self.assertEqual(1, len(terms))
144+
self.assertIn("10", terms)
145+
146+
terms = self.store.maintenance.send(GetTermsOperation(index_name, "city", None))
147+
self.assertEqual(1, len(terms))
148+
self.assertIn("ny", terms)

0 commit comments

Comments
 (0)