iknow_view_models 3.4.1 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -438,19 +438,24 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
438
438
  pv = ParentView.new(@parent1)
439
439
  context = ParentView.new_deserialize_context
440
440
 
441
- nc = pv.replace_associated(:tags,
442
- [{ '_type' => 'Tag', 'name' => 'new_tag' }],
443
- deserialize_context: context)
441
+ data = [{ ViewModel::REFERENCE_ATTRIBUTE => 'tag1' }]
442
+ references = { 'tag1' => { '_type' => 'Tag', 'name' => 'new_tag' } }
443
+
444
+ updated = pv.replace_associated(:tags,
445
+ data, references: references,
446
+ deserialize_context: context)
447
+
448
+ post_children = ParentView.new(Parent.find(@parent1.id))._read_association(:tags)
444
449
 
445
450
  expected_edit_checks = [pv.to_reference,
446
- *nc.map(&:to_reference),]
451
+ *post_children.map(&:to_reference),]
447
452
 
448
453
  assert_contains_exactly(expected_edit_checks,
449
454
  context.valid_edit_refs)
450
455
 
451
- assert_equal(1, nc.size)
452
- assert(nc[0].is_a?(TagView))
453
- assert_equal('new_tag', nc[0].name)
456
+ assert_equal(1, updated.size)
457
+ assert(updated[0].is_a?(TagView))
458
+ assert_equal('new_tag', updated[0].name)
454
459
 
455
460
  @parent1.reload
456
461
  assert_equal(['new_tag'], tags(@parent1).map(&:name))
@@ -467,13 +472,19 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
467
472
  tag2 = @tag2
468
473
 
469
474
  update = build_fupdate do
470
- append([{ '_type' => 'Tag', 'name' => 'new_tag' }])
475
+ append([{ViewModel::REFERENCE_ATTRIBUTE => 'ref_new_tag'}])
471
476
  remove([{ '_type' => 'Tag', 'id' => tag2.id }])
472
- update([{ '_type' => 'Tag', 'id' => tag1.id, 'name' => 'renamed tag1' }])
477
+ update([{ViewModel::REFERENCE_ATTRIBUTE => 'ref_tag1'}])
473
478
  end
474
479
 
475
- nc = pv.replace_associated(:tags, update, deserialize_context: context)
476
- new_tag = nc.detect { |t| t.name == 'new_tag' }
480
+ references = {
481
+ 'ref_new_tag' => { '_type' => 'Tag', 'name' => 'new_tag' },
482
+ 'ref_tag1' => { '_type' => 'Tag', 'id' => tag1.id, 'name' => 'renamed tag1' },
483
+ }
484
+
485
+ updated = pv.replace_associated(:tags, update, references: references, deserialize_context: context)
486
+ post_children = ParentView.new(Parent.find(@parent1.id))._read_association(:tags)
487
+ new_tag = post_children.detect { |t| t.name == 'new_tag' }
477
488
 
478
489
  expected_edit_checks = [ViewModel::Reference.new(ParentView, @parent1.id),
479
490
  ViewModel::Reference.new(TagView, @tag1.id),
@@ -482,7 +493,12 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
482
493
  assert_contains_exactly(expected_edit_checks,
483
494
  context.valid_edit_refs)
484
495
 
485
- assert_equal(2, nc.size)
496
+ assert_equal(2, post_children.size)
497
+ assert_equal(2, update.size)
498
+ assert_contains_exactly(
499
+ ['new_tag', 'renamed tag1'],
500
+ updated.map(&:name),
501
+ )
486
502
 
487
503
  @parent1.reload
488
504
  assert_equal(['renamed tag1', 'new_tag'], tags(@parent1).map(&:name))
@@ -187,7 +187,21 @@ class ViewModel::TraversalContextTest < ActiveSupport::TestCase
187
187
  it 'traverses as expected in replace_associated' do
188
188
  ctx = vm_deserialize_context(viewmodel_class)
189
189
  replacement = subject_association.collection? ? [new_child_hash] : new_child_hash
190
- vm.replace_associated(subject_association_name, replacement, deserialize_context: ctx)
190
+ references = {}
191
+
192
+ # Referenced collections need to be presented as is, _except_ for when they're owned, as
193
+ # this is special cased in NestedControllerBase#write_association (+_bulk) for
194
+ # convenience.
195
+ if subject_association.referenced? && !subject_association.owned?
196
+ replacement = ViewModel::Utils.wrap_one_or_many(replacement) do |replacements|
197
+ replacements.map!.with_index do |update, index|
198
+ references["ref#{index}"] = update
199
+ { ViewModel::REFERENCE_ATTRIBUTE => "ref#{index}" }
200
+ end
201
+ end
202
+ end
203
+
204
+ vm.replace_associated(subject_association_name, replacement, references: references, deserialize_context: ctx)
191
205
 
192
206
  expected = expected_parent_details
193
207
  expected = expected.merge(expected_children_details) unless subject_association.referenced?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iknow_view_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.1
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - iKnow Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-23 00:00:00.000000000 Z
11
+ date: 2021-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 1.0.1
61
+ version: 1.0.2
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 1.0.1
68
+ version: 1.0.2
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: iknow_cache
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -362,7 +362,7 @@ dependencies:
362
362
  version: '0'
363
363
  description: ''
364
364
  email:
365
- - edge@iknow.jp
365
+ - systems@iknow.jp
366
366
  executables: []
367
367
  extensions: []
368
368
  extra_rdoc_files: []
@@ -453,6 +453,7 @@ files:
453
453
  - test/unit/view_model/active_record/belongs_to_test.rb
454
454
  - test/unit/view_model/active_record/cache_test.rb
455
455
  - test/unit/view_model/active_record/cloner_test.rb
456
+ - test/unit/view_model/active_record/controller_nested_test.rb
456
457
  - test/unit/view_model/active_record/controller_test.rb
457
458
  - test/unit/view_model/active_record/counter_test.rb
458
459
  - test/unit/view_model/active_record/customization_test.rb
@@ -514,6 +515,7 @@ test_files:
514
515
  - test/unit/view_model/active_record/belongs_to_test.rb
515
516
  - test/unit/view_model/active_record/cache_test.rb
516
517
  - test/unit/view_model/active_record/cloner_test.rb
518
+ - test/unit/view_model/active_record/controller_nested_test.rb
517
519
  - test/unit/view_model/active_record/controller_test.rb
518
520
  - test/unit/view_model/active_record/counter_test.rb
519
521
  - test/unit/view_model/active_record/customization_test.rb