ree_lib 1.0.67 → 1.0.69

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,981 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'faker'
3
- require 'benchmark'
4
-
5
- RSpec.describe :load_agg do
6
- link :build_pg_connection, from: :ree_dao
7
- link :load_agg, from: :ree_dao
8
-
9
- after do
10
- Ree.disable_irb_mode
11
- end
12
-
13
- before :all do
14
- connection = build_pg_connection(ReeDaoLoadAggTest::Db::DB_CONFIG)
15
-
16
- connection.drop_table(:organizations, cascade: true) if connection.table_exists?(:organizations)
17
- connection.drop_table(:users, cascade: true) if connection.table_exists?(:users)
18
- connection.drop_table(:user_passports, cascade: true) if connection.table_exists?(:user_passports)
19
- connection.drop_table(:books, cascade: true) if connection.table_exists?(:books)
20
- connection.drop_table(:chapters, cascade: true) if connection.table_exists?(:chapters)
21
- connection.drop_table(:authors, cascade: true) if connection.table_exists?(:authors)
22
- connection.drop_table(:reviews, cascade: true) if connection.table_exists?(:reviews)
23
- connection.drop_table(:review_authors, cascade: true) if connection.table_exists?(:review_authors)
24
-
25
- connection.create_table :organizations do
26
- primary_key :id
27
-
28
- column :name, 'varchar(256)'
29
- end
30
-
31
- connection.create_table :users do
32
- primary_key :id
33
-
34
- column :name, 'varchar(256)'
35
- column :age, :integer
36
- foreign_key :organization_id, :organizations, null: false, on_delete: :cascade
37
- end
38
-
39
- connection.create_table :user_passports do
40
- primary_key :id
41
-
42
- foreign_key :user_id, :users, null: false, on_delete: :cascade
43
- column :info, 'varchar(256)'
44
- end
45
-
46
- connection.create_table :books do
47
- primary_key :id
48
-
49
- foreign_key :user_id, :users, null: false, on_delete: :cascade
50
- column :title, 'varchar(256)'
51
- end
52
-
53
- connection.create_table :chapters do
54
- primary_key :id
55
-
56
- foreign_key :book_id, :books, null: false, on_delete: :cascade
57
- column :title, 'varchar(256)'
58
- end
59
-
60
- connection.create_table :reviews do
61
- primary_key :id
62
-
63
- foreign_key :book_id, :books, null: false, on_delete: :cascade
64
- column :rating, :integer
65
- end
66
-
67
- connection.create_table :review_authors do
68
- primary_key :id
69
-
70
- foreign_key :review_id, :reviews, null: false, on_delete: :cascade
71
- column :name, 'varchar(256)'
72
- end
73
-
74
- connection.create_table :authors do
75
- primary_key :id
76
-
77
- foreign_key :book_id, :books, null: false, on_delete: :cascade
78
- column :name, 'varchar(256)'
79
- end
80
-
81
- connection.disconnect
82
- end
83
-
84
- require_relative 'ree_dao_load_agg_test'
85
-
86
- class ReeDaoLoadAggTest::UsersAgg
87
- include ReeDao::AggregateDSL
88
-
89
- aggregate :users_agg do
90
- link :users, from: :ree_dao_load_agg_test
91
- link :organizations, from: :ree_dao_load_agg_test
92
- link :user_passports, from: :ree_dao_load_agg_test
93
- link :books, from: :ree_dao_load_agg_test
94
- link :chapters, from: :ree_dao_load_agg_test
95
- link :authors, from: :ree_dao_load_agg_test
96
- link :reviews, from: :ree_dao_load_agg_test
97
- link :review_authors, from: :ree_dao_load_agg_test
98
- link :load_agg, from: :ree_dao
99
- end
100
-
101
- def call(ids_or_scope, **opts)
102
- load_agg(users, ids_or_scope, **opts) do |users_list|
103
- belongs_to :organization
104
- has_many :books do |books_list|
105
- has_one :author
106
- has_many :chapters
107
-
108
- has_many :reviews, -> { reviews_opts } do |reviews_list|
109
- has_one :review_author
110
-
111
- field :review_calculatetable_field, -> { some_method(reviews_list) }
112
- end
113
-
114
- field :book_calculatetable_field, -> { change_book_titles(books_list) }
115
- end
116
-
117
- has_one :passport, -> { passport_opts }
118
- has_one :custom_field, -> { custom_field_opts }
119
-
120
- field :user_calculatetable_field, -> { some_method(users_list) }
121
- end
122
- end
123
-
124
- private
125
-
126
- def change_book_titles(books_list)
127
- books_list.each do |book|
128
- book.title = "#{book.title.upcase} changed"
129
- end
130
- end
131
-
132
- def some_method(list)
133
- # puts list.map(&:id)
134
- # puts list.map { _1.class.name }
135
- end
136
-
137
- def passport_opts
138
- {
139
- foreign_key: :user_id,
140
- scope: user_passports
141
- }
142
- end
143
-
144
- def custom_field_opts
145
- {
146
- scope: books.where(title: "1984")
147
- }
148
- end
149
-
150
- def reviews_opts
151
- { autoload_children: true }
152
- end
153
- end
154
-
155
- class ReeDaoLoadAggTest::UsersAggWithDto
156
- include ReeDao::AggregateDSL
157
-
158
- aggregate :users_agg_with_dto do
159
- link :users, from: :ree_dao_load_agg_test
160
- link :books, from: :ree_dao_load_agg_test
161
- link :authors, from: :ree_dao_load_agg_test
162
- link :chapters, from: :ree_dao_load_agg_test
163
- link :organizations, from: :ree_dao_load_agg_test
164
- link :load_agg, from: :ree_dao
165
- end
166
-
167
- def call(ids_or_scope, **opts)
168
- load_agg(users, ids_or_scope, **opts) do
169
- belongs_to :organization
170
-
171
- has_many :books, -> { books_opts } do
172
- has_one :author, -> { author_opts }
173
- has_many :chapters, -> { chapters_opts }
174
- end
175
- end
176
- end
177
-
178
- private
179
-
180
- def books_opts
181
- {
182
- to_dto: -> (book) { ReeDaoLoadAggTest::BookDto.new(book) },
183
- setter: -> (item, child_index) {
184
- item.set_books(child_index[item.id] || [])
185
- }
186
- }
187
- end
188
-
189
- def author_opts
190
- { to_dto: -> (author) { ReeDaoLoadAggTest::AuthorDto.new(author) }}
191
- end
192
-
193
- def chapters_opts
194
- { to_dto: -> (chapter) { ReeDaoLoadAggTest::ChapterDto.new(chapter) }}
195
- end
196
- end
197
-
198
- class ReeDaoLoadAggTest::UsersAggAutoloadBooksChildren
199
- include ReeDao::AggregateDSL
200
-
201
- aggregate :users_agg_autoload_books_children do
202
- link :users, from: :ree_dao_load_agg_test
203
- link :books, from: :ree_dao_load_agg_test
204
- link :chapters, from: :ree_dao_load_agg_test
205
- link :authors, from: :ree_dao_load_agg_test
206
- link :reviews, from: :ree_dao_load_agg_test
207
- link :review_authors, from: :ree_dao_load_agg_test
208
- link :load_agg, from: :ree_dao
209
- end
210
-
211
- def call(ids_or_scope, **opts)
212
- load_agg(users, ids_or_scope, **opts) do
213
- belongs_to :organization
214
- has_many :books, -> { books_opts } do
215
- has_one :author
216
- has_many :chapters
217
-
218
- has_many :reviews do
219
- has_one :review_author
220
- end
221
- end
222
- end
223
- end
224
-
225
- private
226
-
227
- def books_opts
228
- { autoload_children: true }
229
- end
230
- end
231
-
232
- class ReeDaoLoadAggTest::UsersAggAutoloadReviewsChildren
233
- include ReeDao::AggregateDSL
234
-
235
- aggregate :users_agg_autoload_reviews_children do
236
- link :users, from: :ree_dao_load_agg_test
237
- link :books, from: :ree_dao_load_agg_test
238
- link :chapters, from: :ree_dao_load_agg_test
239
- link :authors, from: :ree_dao_load_agg_test
240
- link :reviews, from: :ree_dao_load_agg_test
241
- link :review_authors, from: :ree_dao_load_agg_test
242
- link :load_agg, from: :ree_dao
243
- end
244
-
245
- def call(ids_or_scope, **opts)
246
- load_agg(users, ids_or_scope, **opts) do
247
- belongs_to :organization
248
- has_many :books do
249
- has_one :author
250
- has_many :chapters
251
-
252
- has_many :reviews, -> { { autoload_children: true } } do
253
- has_one :review_author
254
- end
255
- end
256
- end
257
- end
258
-
259
- private
260
-
261
- def reviews_opts
262
- { autoload_children: true }
263
- end
264
- end
265
-
266
- class ReeDaoLoadAggTest::UsersAggBlockTest
267
- include ReeDao::AggregateDSL
268
-
269
- aggregate :users_agg_block_test do
270
- link :users, from: :ree_dao_load_agg_test
271
- link :organizations, from: :ree_dao_load_agg_test
272
- link :books, from: :ree_dao_load_agg_test
273
- link :load_agg, from: :ree_dao
274
- end
275
-
276
- def call(ids_or_scope, **opts)
277
- load_agg(users, ids_or_scope, **opts) do
278
- belongs_to :organization
279
- has_many :books, -> { books_opts }
280
- end
281
- end
282
-
283
- private
284
-
285
- def books_opts
286
- {
287
- setter: -> (item, items_index) {
288
- b = items_index[item.id].each { |b| b.title = "Changed" }
289
- item.set_books(b)
290
- }
291
- }
292
- end
293
- end
294
-
295
- class ReeDaoLoadAggTest::UsersAggScopeMethodTest
296
- include ReeDao::AggregateDSL
297
-
298
- aggregate :users_agg_scope_method_test do
299
- link :users, from: :ree_dao_load_agg_test
300
- link :organizations, from: :ree_dao_load_agg_test
301
- link :books, from: :ree_dao_load_agg_test
302
- link :load_agg, from: :ree_dao
303
- end
304
-
305
- def call(ids_or_scope, **opts)
306
- load_agg(users, ids_or_scope, **opts) do |agg_list|
307
- some_id = agg_list.first.id
308
- title = "1984"
309
- belongs_to :organization
310
-
311
- has_many :books, -> { books_opts(title) }
312
- has_many :active_books, books
313
- end
314
- end
315
-
316
- private
317
-
318
- def books_opts(title)
319
- { scope: books_scope(title) }
320
- end
321
-
322
- def books_scope(title)
323
- books.where(title: title)
324
- end
325
- end
326
-
327
- class ReeDaoLoadAggTest::UsersAggOnlyDataset
328
- include ReeDao::AggregateDSL
329
-
330
- aggregate :users_agg_only_dataset do
331
- link :users, from: :ree_dao_load_agg_test
332
- link :books, from: :ree_dao_load_agg_test
333
- link :load_agg, from: :ree_dao
334
- end
335
-
336
- def call(ids_or_scope, **opts)
337
- load_agg(users, ids_or_scope, **opts) do
338
- has_many :books, books.where(title: "1408")
339
- end
340
- end
341
- end
342
-
343
- class ReeDaoLoadAggTest::UsersAggWithoutDao
344
- include ReeDao::AggregateDSL
345
-
346
- aggregate :users_agg_without_dao do
347
- link :users, from: :ree_dao_load_agg_test
348
- link :organizations, from: :ree_dao_load_agg_test
349
- link :books, from: :ree_dao_load_agg_test
350
- link :load_agg, from: :ree_dao
351
- end
352
-
353
- def call(ids_or_scope, **opts)
354
- load_agg(users, ids_or_scope, **opts) do
355
- has_many :something
356
- end
357
- end
358
- end
359
-
360
- class ReeDaoLoadAggTest::UsersAggOnlyExceptKeys
361
- include ReeDao::AggregateDSL
362
-
363
- aggregate :users_agg_only_except_keys do
364
- link :users, from: :ree_dao_load_agg_test
365
- link :organizations, from: :ree_dao_load_agg_test
366
- link :books, from: :ree_dao_load_agg_test
367
- link :load_agg, from: :ree_dao
368
- end
369
-
370
- def call(ids_or_scope, **opts)
371
- load_agg(users, ids_or_scope, **opts) do
372
- belongs_to :organization
373
- has_many :books
374
- end
375
- end
376
- end
377
-
378
- let(:users_agg) { ReeDaoLoadAggTest::UsersAgg.new }
379
- let(:users_agg_block) { ReeDaoLoadAggTest::UsersAggBlockTest.new }
380
- let(:users_agg_scope_method) { ReeDaoLoadAggTest::UsersAggScopeMethodTest.new }
381
- let(:users_agg_autoload_books_children) { ReeDaoLoadAggTest::UsersAggAutoloadBooksChildren.new }
382
- let(:users_agg_autoload_reviews_children) { ReeDaoLoadAggTest::UsersAggAutoloadReviewsChildren.new }
383
- let(:users_agg_without_dao) { ReeDaoLoadAggTest::UsersAggWithoutDao.new }
384
- let(:users_agg_with_dto) { ReeDaoLoadAggTest::UsersAggWithDto.new }
385
- let(:users_agg_only_dataset) { ReeDaoLoadAggTest::UsersAggOnlyDataset.new }
386
- let(:user_agg_only_except_keys) { ReeDaoLoadAggTest::UsersAggOnlyExceptCase.new }
387
- let(:organizations) { ReeDaoLoadAggTest::Organizations.new }
388
- let(:users) { ReeDaoLoadAggTest::Users.new }
389
- let(:user_passports) { ReeDaoLoadAggTest::UserPassports.new }
390
- let(:books) { ReeDaoLoadAggTest::Books.new }
391
- let(:chapters) { ReeDaoLoadAggTest::Chapters.new }
392
- let(:authors) { ReeDaoLoadAggTest::Authors.new }
393
- let(:reviews) { ReeDaoLoadAggTest::Reviews.new }
394
- let(:review_authors) { ReeDaoLoadAggTest::ReviewAuthors.new }
395
-
396
- it {
397
- organizations.delete_all
398
- users.delete_all
399
-
400
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
401
- organizations.put(organization)
402
-
403
- user = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
404
- users.put(user)
405
-
406
- expect {
407
- users_agg_without_dao.call(users.all)
408
- }.to raise_error(ArgumentError)
409
- }
410
-
411
- it {
412
- organizations.delete_all
413
- users.delete_all
414
- user_passports.delete_all
415
- books.delete_all
416
- chapters.delete_all
417
-
418
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
419
- organizations.put(organization)
420
-
421
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
422
- user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
423
- users.put(user_1)
424
- users.put(user_2)
425
-
426
- passport_1 = ReeDaoLoadAggTest::UserPassport.new(user_id: user_1.id, info: "some info")
427
- user_passports.put(passport_1)
428
- user_passports.put(ReeDaoLoadAggTest::UserPassport.new(user_id: user_2.id, info: "another info"))
429
-
430
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
431
- book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
432
-
433
- books.put(book_1)
434
- books.put(book_2)
435
-
436
- chapter = ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "beginning")
437
- chapters.put(chapter)
438
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "interlude"))
439
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "tragic ending"))
440
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "beginning"))
441
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "ending"))
442
-
443
-
444
- authors.put(ReeDaoLoadAggTest::Author.new(book_id: book_1.id, name: "George Orwell"))
445
- review = ReeDaoLoadAggTest::Review.new(book_id: book_1.id, rating: 10)
446
- reviews.put(review)
447
- reviews.put(ReeDaoLoadAggTest::Review.new(book_id: book_1.id, rating: 7))
448
- review_authors.put(ReeDaoLoadAggTest::ReviewAuthor.new(review_id: review.id, name: "John Review"))
449
-
450
- res = users_agg.call(
451
- users.all,
452
- only: [:books, :reviews],
453
- except: [:review_author]
454
- )
455
-
456
- expect(res.first.books.first.reviews.first.review_author).to eq(nil)
457
- }
458
-
459
- it {
460
- organizations.delete_all
461
- users.delete_all
462
-
463
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
464
- organizations.put(organization)
465
-
466
- user = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
467
- users.put(user)
468
-
469
- expect {
470
- users_agg_without_dao.call(users.all, only: [:books], except: [:books])
471
- }.to raise_error(ArgumentError, "you can't use both :only and :except for \"books\" keys")
472
- }
473
-
474
- it {
475
- organizations.delete_all
476
- users.delete_all
477
-
478
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
479
- organizations.put(organization)
480
-
481
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
482
- user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
483
- users.put(user_1)
484
- users.put(user_2)
485
-
486
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
487
- books.put(book_1)
488
-
489
- authors.put(ReeDaoLoadAggTest::Author.new(book_id: book_1.id, name: "George Orwell"))
490
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "interlude"))
491
-
492
- res = users_agg_with_dto.call(
493
- users.all,
494
- to_dto: -> (user) {
495
- ReeDaoLoadAggTest::UserDto.new(
496
- id: user.id,
497
- name: user.name,
498
- organization_id: user.organization_id,
499
- full_name: user.name
500
- )
501
- }
502
- )
503
-
504
- book = res.first.books.first
505
-
506
- expect(res.first.class).to eq(ReeDaoLoadAggTest::UserDto)
507
- expect(book.class).to eq(ReeDaoLoadAggTest::BookDto)
508
- expect(book.author.class).to eq(ReeDaoLoadAggTest::AuthorDto)
509
- expect(book.chapters.first.class).to eq(ReeDaoLoadAggTest::ChapterDto)
510
- }
511
-
512
- it {
513
- organizations.delete_all
514
- users.delete_all
515
-
516
- org = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
517
- organizations.put(org)
518
-
519
- user = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: org.id)
520
- users.put(user)
521
-
522
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user.id, title: "1984")
523
- book_2 = ReeDaoLoadAggTest::Book.new(user_id: user.id, title: "1408")
524
- book_3 = ReeDaoLoadAggTest::Book.new(user_id: user.id, title: "1408")
525
-
526
- books.put(book_1)
527
- books.put(book_2)
528
- books.put(book_3)
529
-
530
- res = users_agg_only_dataset.call(users.where(name: "John"))
531
-
532
- user = res[0]
533
- expect(user.books.map(&:title).uniq).to eq(["1408"])
534
- }
535
-
536
- it {
537
- organizations.delete_all
538
- users.delete_all
539
- user_passports.delete_all
540
- books.delete_all
541
- chapters.delete_all
542
-
543
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
544
- organizations.put(organization)
545
-
546
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
547
- user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
548
- users.put(user_1)
549
- users.put(user_2)
550
-
551
- passport_1 = ReeDaoLoadAggTest::UserPassport.new(user_id: user_1.id, info: "some info")
552
- user_passports.put(passport_1)
553
- user_passports.put(ReeDaoLoadAggTest::UserPassport.new(user_id: user_2.id, info: "another info"))
554
-
555
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
556
- book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
557
-
558
- books.put(book_1)
559
- books.put(book_2)
560
-
561
- chapter = ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "beginning")
562
- chapters.put(chapter)
563
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "interlude"))
564
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "tragic ending"))
565
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "beginning"))
566
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "ending"))
567
-
568
-
569
- authors.put(ReeDaoLoadAggTest::Author.new(book_id: book_1.id, name: "George Orwell"))
570
- review = ReeDaoLoadAggTest::Review.new(book_id: book_1.id, rating: 10)
571
- reviews.put(review)
572
- reviews.put(ReeDaoLoadAggTest::Review.new(book_id: book_1.id, rating: 7))
573
- review_authors.put(ReeDaoLoadAggTest::ReviewAuthor.new(review_id: review.id, name: "John Review"))
574
-
575
- res = users_agg.call(
576
- users.all,
577
- chapters: -> (scope) { scope.ids(chapter.id) }
578
- )
579
-
580
- res_user = res[0]
581
- expect(res_user.id).to eq(user_1.id)
582
- expect(res_user.organization).to eq(organization)
583
- expect(res_user.passport).to eq(passport_1)
584
- expect(res_user.passport.info).to eq("some info")
585
- expect(res_user.books.count).to eq(2)
586
- expect(res_user.books.map(&:title)).to eq(["1984 changed", "1408 changed"])
587
- expect(res_user.books[0].author.name).to eq("George Orwell")
588
- expect(res_user.books[0].chapters.map(&:title)).to eq(["beginning"])
589
- expect(res_user.books[0].reviews[0].review_author.name).to eq("John Review")
590
- expect(res_user.custom_field).to_not eq(nil)
591
- }
592
-
593
- it {
594
- organizations.delete_all
595
- users.delete_all
596
- user_passports.delete_all
597
- books.delete_all
598
- chapters.delete_all
599
-
600
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
601
- organizations.put(organization)
602
-
603
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
604
- user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
605
- users.put(user_1)
606
- users.put(user_2)
607
-
608
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
609
- book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
610
-
611
- books.put(book_1)
612
- books.put(book_2)
613
-
614
- author_1 = ReeDaoLoadAggTest::Author.new(book_id: book_1.id, name: "George Orwell")
615
- author_2 = ReeDaoLoadAggTest::Author.new(book_id: book_2.id, name: "Stephen King")
616
- authors.put(author_1)
617
- authors.put(author_2)
618
-
619
- res = users_agg.call(
620
- users.all
621
- )
622
-
623
- expect(res[0].books.first.author).to_not eq(nil)
624
-
625
- authors.delete(author_1)
626
- authors.delete(author_2)
627
-
628
- res = users_agg.call(
629
- users.all
630
- )
631
-
632
- expect(res[0].books[0].author).to eq(nil)
633
- expect(res[0].books[1].author).to eq(nil)
634
- }
635
-
636
- it {
637
- organizations.delete_all
638
- users.delete_all
639
- user_passports.delete_all
640
- books.delete_all
641
- chapters.delete_all
642
-
643
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
644
- organizations.put(organization)
645
-
646
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
647
- user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
648
- users.put(user_1)
649
- users.put(user_2)
650
-
651
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
652
- book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
653
-
654
- books.put(book_1)
655
- books.put(book_2)
656
-
657
- res = users_agg.call(
658
- users.all
659
- )
660
-
661
- expect(res[0].books).to_not eq([])
662
- expect(res[1].books).to eq([])
663
-
664
- books.delete(book_1)
665
- books.delete(book_2)
666
-
667
- res = users_agg.call(
668
- users.all
669
- )
670
-
671
- expect(res[0].books).to eq([])
672
- expect(res[1].books).to eq([])
673
- }
674
-
675
- it {
676
- organizations.delete_all
677
- users.delete_all
678
- books.delete_all
679
-
680
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
681
- organizations.put(organization)
682
-
683
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
684
- user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
685
- users.put(user_1)
686
- users.put(user_2)
687
-
688
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
689
- book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
690
-
691
- books.put(book_1)
692
- books.put(book_2)
693
-
694
- res = users_agg_scope_method.call(users.all)
695
-
696
- res_user = res[0]
697
- expect(res_user.id).to eq(user_1.id)
698
- expect(res_user.organization).to eq(organization)
699
- expect(res_user.books.count).to eq(1)
700
- expect(res_user.active_books.count).to eq(2)
701
- }
702
-
703
- it {
704
- organizations.delete_all
705
- users.delete_all
706
- books.delete_all
707
-
708
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
709
- organizations.put(organization)
710
-
711
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
712
- user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
713
- users.put(user_1)
714
- users.put(user_2)
715
-
716
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
717
- book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
718
-
719
- books.put(book_1)
720
- books.put(book_2)
721
-
722
- expect {
723
- users_agg_scope_method.call(users.where(name: "Another names"))
724
- }.to_not raise_error
725
- }
726
-
727
- it {
728
- organizations.delete_all
729
- users.delete_all
730
- user_passports.delete_all
731
- books.delete_all
732
- chapters.delete_all
733
-
734
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
735
- organizations.put(organization)
736
-
737
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
738
- users.put(user_1)
739
-
740
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
741
- book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
742
-
743
- books.put(book_1)
744
- books.put(book_2)
745
-
746
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "beginning"))
747
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "interlude"))
748
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "tragic ending"))
749
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "beginning"))
750
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "ending"))
751
-
752
- res = users_agg.call(
753
- users.all,
754
- only: [:books, :chapters]
755
- )
756
-
757
- u = res[0]
758
- expect(u.books.count).to eq(2)
759
- expect(u.books[0].chapters.count).to_not eq(0)
760
- }
761
-
762
- it {
763
- organizations.delete_all
764
- users.delete_all
765
- user_passports.delete_all
766
- books.delete_all
767
- chapters.delete_all
768
-
769
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
770
- organizations.put(organization)
771
-
772
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
773
- users.put(user_1)
774
-
775
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
776
- book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
777
-
778
- books.put(book_1)
779
- books.put(book_2)
780
-
781
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "beginning"))
782
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "interlude"))
783
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "tragic ending"))
784
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "beginning"))
785
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "ending"))
786
-
787
- res = users_agg.call(
788
- users.all,
789
- only: [:books, :chapters]
790
- )
791
-
792
- u = res[0]
793
- expect(u.books.count).to eq(2)
794
- expect(u.books[0].chapters.count).to_not eq(0)
795
- }
796
-
797
- it {
798
- organizations.delete_all
799
- users.delete_all
800
- user_passports.delete_all
801
- books.delete_all
802
- chapters.delete_all
803
-
804
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
805
- organizations.put(organization)
806
-
807
- user = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
808
- users.put(user)
809
-
810
- book = ReeDaoLoadAggTest::Book.new(user_id: user.id, title: "1984")
811
- books.put(book)
812
-
813
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "beginning"))
814
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "interlude"))
815
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "tragic ending"))
816
-
817
- authors.put(ReeDaoLoadAggTest::Author.new(book_id: book.id, name: "George Orwell"))
818
-
819
- review = ReeDaoLoadAggTest::Review.new(book_id: book.id, rating: 5)
820
- reviews.put(review)
821
- review_authors.put(ReeDaoLoadAggTest::ReviewAuthor.new(review_id: review.id, name: "John"))
822
-
823
- res = users_agg_autoload_books_children.call(
824
- users.all,
825
- only: [:books]
826
- )
827
-
828
- u = res[0]
829
- expect(u.books).to_not eq(nil)
830
- expect(u.books[0].chapters).to_not eq(nil)
831
- expect(u.books[0].author).to_not eq(nil)
832
- expect(u.books[0].reviews).to_not eq(nil)
833
- expect(u.books[0].reviews[0].review_author).to eq(nil)
834
- }
835
-
836
- it {
837
- organizations.delete_all
838
- users.delete_all
839
- user_passports.delete_all
840
- books.delete_all
841
- chapters.delete_all
842
-
843
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
844
- organizations.put(organization)
845
-
846
- user = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
847
- users.put(user)
848
-
849
- book = ReeDaoLoadAggTest::Book.new(user_id: user.id, title: "1984")
850
- books.put(book)
851
-
852
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "beginning"))
853
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "interlude"))
854
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "tragic ending"))
855
-
856
- authors.put(ReeDaoLoadAggTest::Author.new(book_id: book.id, name: "George Orwell"))
857
-
858
- review = ReeDaoLoadAggTest::Review.new(book_id: book.id, rating: 5)
859
- reviews.put(review)
860
- review_authors.put(ReeDaoLoadAggTest::ReviewAuthor.new(review_id: review.id, name: "John"))
861
-
862
- res = users_agg_autoload_reviews_children.call(
863
- users.all,
864
- only: [:books, :reviews]
865
- )
866
-
867
- u = res[0]
868
- expect(u.books).to_not eq(nil)
869
- expect(u.books[0].chapters).to eq(nil)
870
- expect(u.books[0].author).to eq(nil)
871
- expect(u.books[0].reviews).to_not eq(nil)
872
- expect(u.books[0].reviews[0].review_author).to_not eq(nil)
873
- }
874
-
875
- it {
876
- organizations.delete_all
877
- users.delete_all
878
- user_passports.delete_all
879
- books.delete_all
880
-
881
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
882
- organizations.put(organization)
883
-
884
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
885
- users.put(user_1)
886
-
887
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
888
-
889
- books.put(book_1)
890
-
891
- res = users_agg_block.call(user_1.id)
892
-
893
- u = res[0]
894
- expect(u.books.map(&:title)).to eq(["Changed"])
895
- }
896
-
897
- it {
898
- organizations.delete_all
899
- users.delete_all
900
- user_passports.delete_all
901
- books.delete_all
902
- chapters.delete_all
903
-
904
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
905
- organizations.put(organization)
906
-
907
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
908
- users.put(user_1)
909
-
910
- book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
911
- book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
912
-
913
- books.put(book_1)
914
- books.put(book_2)
915
-
916
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "beginning"))
917
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "interlude"))
918
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "tragic ending"))
919
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "beginning"))
920
- chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "ending"))
921
-
922
- res = users_agg.call(
923
- users.all,
924
- except: [:organization, :passport, :custom_field]
925
- )
926
-
927
- u = res[0]
928
- expect(u.books.count).to eq(2)
929
- expect(u.passport).to eq(nil)
930
- expect(u.organization).to eq(nil)
931
- expect(u.custom_field).to eq(nil)
932
- }
933
-
934
- it {
935
- organizations.delete_all
936
- users.delete_all
937
-
938
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
939
- organizations.put(organization)
940
-
941
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
942
- user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
943
- users.put(user_1)
944
- users.put(user_2)
945
-
946
- ids = [user_1, user_2].map(&:id)
947
-
948
- res = load_agg(users, ids)
949
- expect(res.count).to eq(2)
950
- }
951
-
952
- it {
953
- organizations.delete_all
954
- users.delete_all
955
-
956
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
957
- organizations.put(organization)
958
-
959
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
960
- users.put(user_1)
961
-
962
- res = load_agg(users, user_1.id)
963
- expect(res.count).to eq(1)
964
- }
965
-
966
- it {
967
- organizations.delete_all
968
- users.delete_all
969
-
970
- organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
971
- organizations.put(organization)
972
-
973
- user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
974
- user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
975
- users.put(user_1)
976
- users.put(user_2)
977
-
978
- res = load_agg(users, users.where(organization_id: organization.id))
979
- expect(res.count).to eq(2)
980
- }
981
- end