|
4 | 4 | from ravendb.tests.test_base import TestBase, Order, Employee, Company, User |
5 | 5 |
|
6 | 6 |
|
| 7 | +class CounterResult4: |
| 8 | + def __init__(self, downloads: int, name: str, likes: Dict[str, int]): |
| 9 | + self.downloads = downloads |
| 10 | + self.name = name |
| 11 | + self.likes = likes |
| 12 | + |
| 13 | + |
7 | 14 | class TestQueryOnCounters(TestBase): |
8 | 15 | def setUp(self): |
9 | 16 | super(TestQueryOnCounters, self).setUp() |
@@ -603,3 +610,48 @@ def test_raw_query_js_with_counter_raw_values(self): |
603 | 610 | self.assertSequenceContainsElements(names, "Jerry", "Bob", "Pigpen") |
604 | 611 | self.assertSequenceContainsElements(downloads, 100, 300, None) |
605 | 612 | self.assertSequenceContainsElements(likes, 200, 400, 500) |
| 613 | + |
| 614 | + def test_raw_query_js_projection_with_counter_raw_values(self): |
| 615 | + with self.store.open_session() as session: |
| 616 | + user1 = User("Jerry") |
| 617 | + user2 = User("Bob") |
| 618 | + user3 = User("Pigpen") |
| 619 | + |
| 620 | + session.store(user1, "users/1-A") |
| 621 | + session.store(user2, "users/2-A") |
| 622 | + session.store(user3, "users/3-A") |
| 623 | + |
| 624 | + session.counters_for("users/1-A").increment("downloads", 100) |
| 625 | + session.counters_for("users/1-A").increment("likes", 200) |
| 626 | + |
| 627 | + session.counters_for("users/2-A").increment("downloads", 300) |
| 628 | + session.counters_for("users/2-A").increment("likes", 400) |
| 629 | + |
| 630 | + session.counters_for("users/3-A").increment("likes", 500) |
| 631 | + |
| 632 | + session.save_changes() |
| 633 | + |
| 634 | + with self.store.open_session() as session: |
| 635 | + query = list( |
| 636 | + session.advanced.raw_query( |
| 637 | + "from Users as u select { " |
| 638 | + "name: u.name, " |
| 639 | + "downloads: counter(u, 'downloads'), " |
| 640 | + "likes: counterRaw(u, 'likes') " |
| 641 | + "}", |
| 642 | + CounterResult4, |
| 643 | + ) |
| 644 | + ) |
| 645 | + |
| 646 | + self.assertEqual(3, len(query)) |
| 647 | + self.assertEqual("Jerry", query[0].name) |
| 648 | + self.assertEqual(100, query[0].downloads) |
| 649 | + self.assertEqual(200, query[0].likes.values().__iter__().__next__()) |
| 650 | + |
| 651 | + self.assertEqual("Bob", query[1].name) |
| 652 | + self.assertEqual(300, query[1].downloads) |
| 653 | + self.assertEqual(400, query[1].likes.values().__iter__().__next__()) |
| 654 | + |
| 655 | + self.assertEqual("Pigpen", query[2].name) |
| 656 | + self.assertEqual(500, query[2].likes.values().__iter__().__next__()) |
| 657 | + self.assertIsNone(query[2].downloads) |
0 commit comments