iknow_view_models 3.2.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +13 -0
  3. data/Appraisals +6 -6
  4. data/Rakefile +5 -5
  5. data/gemfiles/rails_5_2.gemfile +5 -5
  6. data/gemfiles/rails_6_0.gemfile +5 -5
  7. data/iknow_view_models.gemspec +40 -39
  8. data/lib/iknow_view_models.rb +9 -7
  9. data/lib/iknow_view_models/version.rb +1 -1
  10. data/lib/view_model.rb +17 -14
  11. data/lib/view_model/access_control.rb +5 -2
  12. data/lib/view_model/access_control/composed.rb +10 -9
  13. data/lib/view_model/access_control/open.rb +2 -0
  14. data/lib/view_model/access_control/read_only.rb +2 -0
  15. data/lib/view_model/access_control/tree.rb +11 -6
  16. data/lib/view_model/access_control_error.rb +4 -1
  17. data/lib/view_model/active_record.rb +12 -11
  18. data/lib/view_model/active_record/association_data.rb +2 -1
  19. data/lib/view_model/active_record/association_manipulation.rb +6 -4
  20. data/lib/view_model/active_record/cache.rb +4 -2
  21. data/lib/view_model/active_record/collection_nested_controller.rb +3 -3
  22. data/lib/view_model/active_record/controller_base.rb +4 -1
  23. data/lib/view_model/active_record/nested_controller_base.rb +1 -0
  24. data/lib/view_model/active_record/update_context.rb +8 -6
  25. data/lib/view_model/active_record/update_data.rb +32 -30
  26. data/lib/view_model/active_record/update_operation.rb +17 -13
  27. data/lib/view_model/active_record/visitor.rb +0 -1
  28. data/lib/view_model/after_transaction_runner.rb +0 -1
  29. data/lib/view_model/callbacks.rb +3 -1
  30. data/lib/view_model/controller.rb +13 -3
  31. data/lib/view_model/deserialization_error.rb +15 -12
  32. data/lib/view_model/error.rb +12 -10
  33. data/lib/view_model/error_view.rb +3 -1
  34. data/lib/view_model/migration/no_path_error.rb +1 -0
  35. data/lib/view_model/migration/one_way_error.rb +1 -0
  36. data/lib/view_model/migration/unspecified_version_error.rb +1 -0
  37. data/lib/view_model/record.rb +11 -13
  38. data/lib/view_model/reference.rb +3 -1
  39. data/lib/view_model/references.rb +8 -5
  40. data/lib/view_model/registry.rb +1 -1
  41. data/lib/view_model/schemas.rb +9 -4
  42. data/lib/view_model/serialization_error.rb +4 -1
  43. data/lib/view_model/serialize_context.rb +4 -4
  44. data/lib/view_model/test_helpers.rb +8 -3
  45. data/lib/view_model/test_helpers/arvm_builder.rb +19 -14
  46. data/lib/view_model/traversal_context.rb +2 -1
  47. data/test/.rubocop.yml +14 -0
  48. data/test/helpers/arvm_test_models.rb +12 -9
  49. data/test/helpers/arvm_test_utilities.rb +5 -3
  50. data/test/helpers/controller_test_helpers.rb +31 -29
  51. data/test/helpers/match_enumerator.rb +1 -0
  52. data/test/helpers/query_logging.rb +2 -1
  53. data/test/helpers/test_access_control.rb +5 -3
  54. data/test/helpers/viewmodel_spec_helpers.rb +21 -20
  55. data/test/unit/view_model/access_control_test.rb +144 -144
  56. data/test/unit/view_model/active_record/alias_test.rb +15 -13
  57. data/test/unit/view_model/active_record/belongs_to_test.rb +40 -39
  58. data/test/unit/view_model/active_record/cache_test.rb +27 -26
  59. data/test/unit/view_model/active_record/cloner_test.rb +67 -63
  60. data/test/unit/view_model/active_record/controller_test.rb +37 -38
  61. data/test/unit/view_model/active_record/counter_test.rb +10 -9
  62. data/test/unit/view_model/active_record/customization_test.rb +59 -58
  63. data/test/unit/view_model/active_record/has_many_test.rb +112 -111
  64. data/test/unit/view_model/active_record/has_many_through_poly_test.rb +15 -14
  65. data/test/unit/view_model/active_record/has_many_through_test.rb +33 -38
  66. data/test/unit/view_model/active_record/has_one_test.rb +37 -36
  67. data/test/unit/view_model/active_record/migration_test.rb +13 -13
  68. data/test/unit/view_model/active_record/namespacing_test.rb +19 -17
  69. data/test/unit/view_model/active_record/poly_test.rb +44 -45
  70. data/test/unit/view_model/active_record/shared_test.rb +30 -28
  71. data/test/unit/view_model/active_record/version_test.rb +9 -7
  72. data/test/unit/view_model/active_record_test.rb +72 -72
  73. data/test/unit/view_model/callbacks_test.rb +19 -15
  74. data/test/unit/view_model/controller_test.rb +4 -2
  75. data/test/unit/view_model/record_test.rb +92 -97
  76. data/test/unit/view_model/traversal_context_test.rb +4 -5
  77. data/test/unit/view_model_test.rb +18 -16
  78. metadata +7 -5
@@ -1,9 +1,11 @@
1
- require_relative "../../../helpers/arvm_test_utilities.rb"
2
- require_relative "../../../helpers/arvm_test_models.rb"
1
+ # frozen_string_literal: true
3
2
 
4
- require "minitest/autorun"
3
+ require_relative '../../../helpers/arvm_test_utilities'
4
+ require_relative '../../../helpers/arvm_test_models'
5
5
 
6
- require "view_model/active_record"
6
+ require 'minitest/autorun'
7
+
8
+ require 'view_model/active_record'
7
9
 
8
10
  class ViewModel::ActiveRecord::HasManyThroughPolyTest < ActiveSupport::TestCase
9
11
  include ARVMTestUtilities
@@ -99,7 +101,7 @@ class ViewModel::ActiveRecord::HasManyThroughPolyTest < ActiveSupport::TestCase
99
101
  parents_tags: [ParentsTag.new(tag: @tag_a1, position: 1.0),
100
102
  ParentsTag.new(tag: @tag_a2, position: 2.0),
101
103
  ParentsTag.new(tag: @tag_b1, position: 3.0),
102
- ParentsTag.new(tag: @tag_b2, position: 4.0)])
104
+ ParentsTag.new(tag: @tag_b2, position: 4.0),])
103
105
 
104
106
  enable_logging!
105
107
  end
@@ -135,7 +137,7 @@ class ViewModel::ActiveRecord::HasManyThroughPolyTest < ActiveSupport::TestCase
135
137
  end
136
138
 
137
139
  def test_preload_dependencies
138
- # TODO not part of ARVM; but depends on the particular context from #before_all
140
+ # TODO: not part of ARVM; but depends on the particular context from #before_all
139
141
  # If we refactor out the contexts from their tests, this should go in another test file.
140
142
 
141
143
  root_updates, _ref_updates = ViewModel::ActiveRecord::UpdateData.parse_hashes([{ '_type' => 'Parent' }])
@@ -145,7 +147,7 @@ class ViewModel::ActiveRecord::HasManyThroughPolyTest < ActiveSupport::TestCase
145
147
 
146
148
  root_updates, _ref_updates = ViewModel::ActiveRecord::UpdateData.parse_hashes([{ '_type' => 'Parent',
147
149
  'tags' => [{ '_ref' => 'r1' }] }],
148
- { 'r1' => { '_type' => 'TagB' } })
150
+ { 'r1' => { '_type' => 'TagB' } })
149
151
 
150
152
  assert_equal(DeepPreloader::Spec.new(
151
153
  'parents_tags' => DeepPreloader::Spec.new(
@@ -154,7 +156,6 @@ class ViewModel::ActiveRecord::HasManyThroughPolyTest < ActiveSupport::TestCase
154
156
  'mentioning tags causes through association loading, excluding shared')
155
157
  end
156
158
 
157
-
158
159
  def test_serialize
159
160
  view, refs = serialize_with_references(ParentView.new(@parent1))
160
161
 
@@ -162,7 +163,7 @@ class ViewModel::ActiveRecord::HasManyThroughPolyTest < ActiveSupport::TestCase
162
163
  assert_equal([{ 'id' => @tag_a1.id, '_type' => 'TagA', '_version' => 1, 'name' => 'tag A1' },
163
164
  { 'id' => @tag_a2.id, '_type' => 'TagA', '_version' => 1, 'name' => 'tag A2' },
164
165
  { 'id' => @tag_b1.id, '_type' => 'TagB', '_version' => 1, 'name' => 'tag B1' },
165
- { 'id' => @tag_b2.id, '_type' => 'TagB', '_version' => 1, 'name' => 'tag B2' }],
166
+ { 'id' => @tag_b2.id, '_type' => 'TagB', '_version' => 1, 'name' => 'tag B2' },],
166
167
  tag_data)
167
168
  end
168
169
 
@@ -186,7 +187,7 @@ class ViewModel::ActiveRecord::HasManyThroughPolyTest < ActiveSupport::TestCase
186
187
  end
187
188
 
188
189
  def test_reordering_swap_type
189
- alter_by_view!(ParentView, @parent1) do |view, refs|
190
+ alter_by_view!(ParentView, @parent1) do |view, _refs|
190
191
  t1, t2, t3, t4 = view['tags']
191
192
  view['tags'] = [t3, t2, t1, t4]
192
193
  end
@@ -248,16 +249,16 @@ class ViewModel::ActiveRecord::HasManyThroughPolyTest < ActiveSupport::TestCase
248
249
  def test_renamed_roundtrip
249
250
  context = ParentView.new_serialize_context
250
251
  alter_by_view!(ParentView, @parent, serialize_context: context) do |view, refs|
251
- assert_equal({refs.keys.first => { 'id' => @parent.parents_tags.first.tag.id,
252
+ assert_equal({ refs.keys.first => { 'id' => @parent.parents_tags.first.tag.id,
252
253
  '_type' => 'TagA',
253
254
  '_version' => 1,
254
- 'name' => 'tag A name' }}, refs)
255
+ 'name' => 'tag A name' } }, refs)
255
256
  assert_equal([{ '_ref' => refs.keys.first }],
256
257
  view['something_else'])
257
258
 
258
259
  refs.clear
259
- refs['new'] = {'_type' => 'TagB', 'name' => 'tag B name'}
260
- view['something_else'] = [{'_ref' => 'new'}]
260
+ refs['new'] = { '_type' => 'TagB', 'name' => 'tag B name' }
261
+ view['something_else'] = [{ '_ref' => 'new' }]
261
262
  end
262
263
 
263
264
  assert_equal('tag B name', @parent.parents_tags.first.tag.name)
@@ -1,9 +1,11 @@
1
- require_relative "../../../helpers/arvm_test_utilities.rb"
2
- require_relative "../../../helpers/arvm_test_models.rb"
1
+ # frozen_string_literal: true
3
2
 
4
- require "minitest/autorun"
3
+ require_relative '../../../helpers/arvm_test_utilities'
4
+ require_relative '../../../helpers/arvm_test_models'
5
5
 
6
- require "view_model/active_record"
6
+ require 'minitest/autorun'
7
+
8
+ require 'view_model/active_record'
7
9
 
8
10
  class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
9
11
  include ARVMTestUtilities
@@ -78,7 +80,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
78
80
  define_model do
79
81
  belongs_to :parent
80
82
  belongs_to :tag
81
- # TODO list membership?
83
+ # TODO: list membership?
82
84
  end
83
85
 
84
86
  no_viewmodel
@@ -100,7 +102,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
100
102
 
101
103
  @parent1 = Parent.create(name: 'p1',
102
104
  parents_tags: [ParentsTag.new(tag: @tag1, position: 1.0),
103
- ParentsTag.new(tag: @tag2, position: 2.0)])
105
+ ParentsTag.new(tag: @tag2, position: 2.0),])
104
106
 
105
107
  enable_logging!
106
108
  end
@@ -130,7 +132,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
130
132
  end
131
133
 
132
134
  def test_preload_dependencies
133
- # TODO not part of ARVM; but depends on the particular context from #before_all
135
+ # TODO: not part of ARVM; but depends on the particular context from #before_all
134
136
  # If we refactor out the contexts from their tests, this should go in another test file.
135
137
 
136
138
  root_updates, _ref_updates = ViewModel::ActiveRecord::UpdateData.parse_hashes([{ '_type' => 'Parent' }])
@@ -153,7 +155,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
153
155
 
154
156
  tag_data = view['tags'].map { |hash| refs[hash['_ref']] }
155
157
  assert_equal([{ 'id' => @tag1.id, '_type' => 'Tag', '_version' => 1, 'name' => 'tag1' },
156
- { 'id' => @tag2.id, '_type' => 'Tag', '_version' => 1, 'name' => 'tag2' }],
158
+ { 'id' => @tag2.id, '_type' => 'Tag', '_version' => 1, 'name' => 'tag2' },],
157
159
  tag_data)
158
160
  end
159
161
 
@@ -197,7 +199,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
197
199
  def test_child_edit_doesnt_editcheck_parent
198
200
  # editing child doesn't edit check parent
199
201
  pv, d_context = alter_by_view!(ParentView, @parent1) do |view, refs|
200
- refs[view['tags'][0]["_ref"]]["name"] = "changed"
202
+ refs[view['tags'][0]['_ref']]['name'] = 'changed'
201
203
  end
202
204
 
203
205
  nc = pv.tags.detect { |t| t.name == 'changed' }
@@ -259,7 +261,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
259
261
  fupdate_tags(@parent1) do |tags|
260
262
  c1, c2 = tags
261
263
  { :fupdate => build_fupdate { append([{ '_ref' => 'new_tag' }]) },
262
- :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag' } }
264
+ :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag' } },
263
265
  }
264
266
  end
265
267
  assert_equal([c1.name, c2.name, 'new tag'],
@@ -272,7 +274,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
272
274
  c1, c2 = tags
273
275
  { :fupdate => build_fupdate { append([{ '_ref' => 'new_tag' }],
274
276
  before: { '_type' => 'Tag', 'id' => c2.id }) },
275
- :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag' } }
277
+ :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag' } },
276
278
  }
277
279
  end
278
280
  assert_equal([c1.name, 'new tag', c2.name],
@@ -285,7 +287,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
285
287
  c1, c2 = tags
286
288
  { :fupdate => build_fupdate { append([{ '_ref' => 'new_tag' }],
287
289
  before: { '_type' => 'Tag', 'id' => c1.id }) },
288
- :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag' } }
290
+ :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag' } },
289
291
  }
290
292
  end
291
293
  assert_equal(['new tag', c1.name, c2.name],
@@ -298,21 +300,20 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
298
300
  c1, c2 = tags
299
301
  { :fupdate => build_fupdate { append([{ '_ref' => 'c2' }],
300
302
  before: { '_type' => 'Tag', 'id' => c1.id }) },
301
- :refs => { 'c2' => { '_type' => 'Tag', 'id' => c2.id } }
303
+ :refs => { 'c2' => { '_type' => 'Tag', 'id' => c2.id } },
302
304
  }
303
305
  end
304
306
  assert_equal([c2.name, c1.name],
305
307
  tags(@parent1).map(&:name))
306
308
  end
307
309
 
308
-
309
310
  def test_functional_update_append_after_mid
310
311
  c1 = c2 = nil
311
312
  fupdate_tags(@parent1) do |tags|
312
313
  c1, c2 = tags
313
314
  { :fupdate => build_fupdate { append([{ '_ref' => 'new_tag' }],
314
315
  after: { '_type' => 'Tag', 'id' => c1.id }) },
315
- :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag' } }
316
+ :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag' } },
316
317
  }
317
318
  end
318
319
  assert_equal([c1.name, 'new tag', c2.name],
@@ -325,7 +326,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
325
326
  c1, c2 = tags
326
327
  { :fupdate => build_fupdate { append([{ '_ref' => 'new_tag' }],
327
328
  after: { '_type' => 'Tag', 'id' => c2.id }) },
328
- :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag' } }
329
+ :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag' } },
329
330
  }
330
331
  end
331
332
  assert_equal([c1.name, c2.name, 'new tag'],
@@ -338,7 +339,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
338
339
  c1, c2 = tags
339
340
  { :fupdate => build_fupdate { append([{ '_ref' => 'c1' }],
340
341
  after: { '_type' => 'Tag', 'id' => c2.id }) },
341
- :refs => { 'c1' => { '_type' => 'Tag', 'id' => c1.id } }
342
+ :refs => { 'c1' => { '_type' => 'Tag', 'id' => c1.id } },
342
343
  }
343
344
  end
344
345
  assert_equal([c2.name, c1.name],
@@ -375,7 +376,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
375
376
  @parent1.parents_tags.where(tag_id: c2.id).destroy_all
376
377
  { :fupdate => build_fupdate { append([{ '_ref' => 'new_tag' }],
377
378
  after: { '_type' => 'Tag', 'id' => c2.id }) },
378
- :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag name' } }
379
+ :refs => { 'new_tag' => { '_type' => 'Tag', 'name' => 'new tag name' } },
379
380
  }
380
381
  end
381
382
  end
@@ -387,13 +388,12 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
387
388
  c1 = c2 = nil
388
389
  fupdate_tags(@parent1) do |tags|
389
390
  c1, c2 = tags
390
- { :fupdate => build_fupdate { update([{ '_ref' => 'c1' }])},
391
- :refs => { 'c1' => { '_type' => 'Tag', 'id' => c1.id, 'name' => 'c1 new name' } }
391
+ { :fupdate => build_fupdate { update([{ '_ref' => 'c1' }]) },
392
+ :refs => { 'c1' => { '_type' => 'Tag', 'id' => c1.id, 'name' => 'c1 new name' } },
392
393
  }
393
394
  end
394
395
  assert_equal(['c1 new name', c2.name],
395
396
  tags(@parent1).map(&:name))
396
-
397
397
  end
398
398
 
399
399
  def test_functional_update_update_stale
@@ -403,14 +403,13 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
403
403
  c2.parents_tags.destroy_all
404
404
 
405
405
  ex = assert_raises(ViewModel::DeserializationError::AssociatedNotFound) do
406
- fupdate_tags(@parent1) do |tags|
407
- # @parent1.parents_tags.where(tag_id: c2.id).destroy_all
406
+ fupdate_tags(@parent1) do |_tags|
408
407
  { :fupdate => build_fupdate { update([{ '_ref' => 'c2' }]) },
409
- :refs => { 'c2' => { '_type' => 'Tag', 'id' => c2.id, 'name' => 'c2 new name' } }
408
+ :refs => { 'c2' => { '_type' => 'Tag', 'id' => c2.id, 'name' => 'c2 new name' } },
410
409
  }
411
410
  end
412
411
  end
413
- assert_equal("tags", ex.association)
412
+ assert_equal('tags', ex.association)
414
413
  assert_equal([ViewModel::Reference.new(TagView, c2.id)], ex.missing_nodes)
415
414
  end
416
415
 
@@ -442,7 +441,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
442
441
  deserialize_context: context)
443
442
 
444
443
  expected_edit_checks = [pv.to_reference,
445
- *nc.map(&:to_reference)]
444
+ *nc.map(&:to_reference),]
446
445
 
447
446
  assert_contains_exactly(expected_edit_checks,
448
447
  context.valid_edit_refs)
@@ -476,7 +475,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
476
475
 
477
476
  expected_edit_checks = [ViewModel::Reference.new(ParentView, @parent1.id),
478
477
  ViewModel::Reference.new(TagView, @tag1.id),
479
- ViewModel::Reference.new(TagView, new_tag.id)]
478
+ ViewModel::Reference.new(TagView, new_tag.id),]
480
479
 
481
480
  assert_contains_exactly(expected_edit_checks,
482
481
  context.valid_edit_refs)
@@ -518,7 +517,6 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
518
517
 
519
518
  assert_equal(expected_edit_checks, context.valid_edit_refs.to_set)
520
519
 
521
-
522
520
  assert_equal([@tag2, @tag1],
523
521
  tags(@parent1))
524
522
 
@@ -536,8 +534,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
536
534
  # append
537
535
  pv.append_associated(:tags,
538
536
  { '_type' => 'Tag', 'id' => @tag1.id },
539
- deserialize_context: (context = ParentView.new_deserialize_context))
540
-
537
+ deserialize_context: ParentView.new_deserialize_context)
541
538
 
542
539
  assert_equal([@tag2, @tag1],
543
540
  tags(@parent1))
@@ -563,7 +560,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
563
560
 
564
561
  # insert after
565
562
  pv.append_associated(:tags,
566
- { '_type' => 'Tag', 'id' => @tag3.id },
563
+ { '_type' => 'Tag', 'id' => @tag3.id },
567
564
  after: ViewModel::Reference.new(TagView, @tag1.id),
568
565
  deserialize_context: (context = ParentView.new_deserialize_context))
569
566
 
@@ -577,8 +574,7 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
577
574
  # append
578
575
  pv.append_associated(:tags,
579
576
  { '_type' => 'Tag', 'id' => @tag3.id },
580
- deserialize_context: (context = ParentView.new_deserialize_context))
581
-
577
+ deserialize_context: ParentView.new_deserialize_context)
582
578
 
583
579
  assert_equal([@tag1, @tag2, @tag3],
584
580
  tags(@parent1))
@@ -611,7 +607,6 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
611
607
  ViewModel::ActiveRecord::HasManyThroughTest.build_join_table_model(self)
612
608
  end
613
609
 
614
-
615
610
  def setup
616
611
  super
617
612
 
@@ -629,16 +624,16 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
629
624
  def test_renamed_roundtrip
630
625
  context = ParentView.new_serialize_context
631
626
  alter_by_view!(ParentView, @parent, serialize_context: context) do |view, refs|
632
- assert_equal({refs.keys.first => { 'id' => @parent.parents_tags.first.tag.id,
627
+ assert_equal({ refs.keys.first => { 'id' => @parent.parents_tags.first.tag.id,
633
628
  '_type' => 'Tag',
634
629
  '_version' => 1,
635
- 'name' => 'tag name' }}, refs)
630
+ 'name' => 'tag name' } }, refs)
636
631
  assert_equal([{ '_ref' => refs.keys.first }],
637
632
  view['something_else'])
638
633
 
639
634
  refs.clear
640
- refs['new'] = {'_type' => 'Tag', 'name' => 'tag new name'}
641
- view['something_else'] = [{'_ref' => 'new'}]
635
+ refs['new'] = { '_type' => 'Tag', 'name' => 'tag new name' }
636
+ view['something_else'] = [{ '_ref' => 'new' }]
642
637
  end
643
638
 
644
639
  assert_equal('tag new name', @parent.parents_tags.first.tag.name)
@@ -1,10 +1,12 @@
1
- require_relative "../../../helpers/arvm_test_utilities.rb"
2
- require_relative "../../../helpers/arvm_test_models.rb"
3
- require_relative '../../../helpers/viewmodel_spec_helpers.rb'
1
+ # frozen_string_literal: true
4
2
 
5
- require "minitest/autorun"
3
+ require_relative '../../../helpers/arvm_test_utilities'
4
+ require_relative '../../../helpers/arvm_test_models'
5
+ require_relative '../../../helpers/viewmodel_spec_helpers'
6
6
 
7
- require "view_model/active_record"
7
+ require 'minitest/autorun'
8
+
9
+ require 'view_model/active_record'
8
10
 
9
11
  class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
10
12
  include ARVMTestUtilities
@@ -15,13 +17,13 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
15
17
  def setup
16
18
  super
17
19
 
18
- # TODO make a `has_list?` that allows a model to set all children as an array
19
- @model1 = model_class.new(name: "p1",
20
- child: child_model_class.new(name: "p1t"))
20
+ # TODO: make a `has_list?` that allows a model to set all children as an array
21
+ @model1 = model_class.new(name: 'p1',
22
+ child: child_model_class.new(name: 'p1t'))
21
23
  @model1.save!
22
24
 
23
- @model2 = model_class.new(name: "p2",
24
- child: child_model_class.new(name: "p2t"))
25
+ @model2 = model_class.new(name: 'p2',
26
+ child: child_model_class.new(name: 'p2t'))
25
27
 
26
28
  @model2.save!
27
29
 
@@ -38,9 +40,9 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
38
40
 
39
41
  def test_create_from_view
40
42
  view = {
41
- "_type" => "Model",
42
- "name" => "p",
43
- "child" => { "_type" => "Child", "name" => "t" },
43
+ '_type' => 'Model',
44
+ 'name' => 'p',
45
+ 'child' => { '_type' => 'Child', 'name' => 't' },
44
46
  }
45
47
 
46
48
  pv = ModelView.deserialize_from_view(view)
@@ -49,23 +51,22 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
49
51
  assert(!p.changed?)
50
52
  assert(!p.new_record?)
51
53
 
52
- assert_equal("p", p.name)
53
-
54
+ assert_equal('p', p.name)
54
55
 
55
56
  assert(p.child.present?)
56
- assert_equal("t", p.child.name)
57
+ assert_equal('t', p.child.name)
57
58
  end
58
59
 
59
60
  def test_serialize_view
60
61
  view, _refs = serialize_with_references(ModelView.new(@model1))
61
- assert_equal({ "_type" => "Model",
62
- "_version" => 1,
63
- "id" => @model1.id,
64
- "name" => @model1.name,
65
- "child" => { "_type" => "Child",
66
- "_version" => 1,
67
- "id" => @model1.child.id,
68
- "name" => @model1.child.name } },
62
+ assert_equal({ '_type' => 'Model',
63
+ '_version' => 1,
64
+ 'id' => @model1.id,
65
+ 'name' => @model1.name,
66
+ 'child' => { '_type' => 'Child',
67
+ '_version' => 1,
68
+ 'id' => @model1.child.id,
69
+ 'name' => @model1.child.name } },
69
70
  view)
70
71
  end
71
72
 
@@ -77,11 +78,11 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
77
78
 
78
79
  ModelView.deserialize_from_view(
79
80
  [update_hash_for(ModelView, @model1) { |p| p['child'] = update_hash_for(ChildView, t2) },
80
- update_hash_for(ModelView, @model2) { |p| p['child'] = update_hash_for(ChildView, t1) }],
81
+ update_hash_for(ModelView, @model2) { |p| p['child'] = update_hash_for(ChildView, t1) },],
81
82
  deserialize_context: deserialize_context)
82
83
 
83
84
  assert_equal(Set.new([ViewModel::Reference.new(ModelView, @model1.id),
84
- ViewModel::Reference.new(ModelView, @model2.id)]),
85
+ ViewModel::Reference.new(ModelView, @model2.id),]),
85
86
  deserialize_context.valid_edit_refs.to_set)
86
87
 
87
88
  @model1.reload
@@ -100,7 +101,7 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
100
101
  def test_has_one_create
101
102
  @model1.update(child: nil)
102
103
 
103
- alter_by_view!(ModelView, @model1) do |view, refs|
104
+ alter_by_view!(ModelView, @model1) do |view, _refs|
104
105
  view['child'] = { '_type' => 'Child', 'name' => 't' }
105
106
  end
106
107
 
@@ -108,8 +109,8 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
108
109
  end
109
110
 
110
111
  def test_has_one_update
111
- alter_by_view!(ModelView, @model1) do |view, refs|
112
- view['child']['name'] = "hello"
112
+ alter_by_view!(ModelView, @model1) do |view, _refs|
113
+ view['child']['name'] = 'hello'
113
114
  end
114
115
 
115
116
  assert_equal('hello', @model1.child.name)
@@ -117,7 +118,7 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
117
118
 
118
119
  def test_has_one_destroy
119
120
  old_child = @model1.child
120
- alter_by_view!(ModelView, @model1) do |view, refs|
121
+ alter_by_view!(ModelView, @model1) do |view, _refs|
121
122
  view['child'] = nil
122
123
  end
123
124
  assert(Child.where(id: old_child.id).blank?)
@@ -127,7 +128,7 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
127
128
  old_model1_child = @model1.child
128
129
  old_model2_child = @model2.child
129
130
 
130
- alter_by_view!(ModelView, [@model1, @model2]) do |(p1, p2), refs|
131
+ alter_by_view!(ModelView, [@model1, @model2]) do |(p1, p2), _refs|
131
132
  p2['child'] = p1['child']
132
133
  p1['child'] = nil
133
134
  end
@@ -179,8 +180,8 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
179
180
 
180
181
  def test_bad_single_association
181
182
  view = {
182
- "_type" => "Model",
183
- "child" => []
183
+ '_type' => 'Model',
184
+ 'child' => [],
184
185
  }
185
186
  ex = assert_raises(ViewModel::DeserializationError::InvalidSyntax) do
186
187
  ModelView.deserialize_from_view(view)
@@ -190,7 +191,7 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
190
191
 
191
192
  describe 'owned reference child' do
192
193
  def child_attributes
193
- super.merge(viewmodel: ->(v) { root! })
194
+ super.merge(viewmodel: ->(_v) { root! })
194
195
  end
195
196
 
196
197
  def new_model
@@ -419,7 +420,7 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
419
420
  end
420
421
 
421
422
  def test_renamed_roundtrip
422
- alter_by_view!(ModelView, @model) do |view, refs|
423
+ alter_by_view!(ModelView, @model) do |view, _refs|
423
424
  assert_equal({ 'id' => @model.child.id,
424
425
  '_type' => 'Child',
425
426
  '_version' => 1,
@@ -428,7 +429,7 @@ class ViewModel::ActiveRecord::HasOneTest < ActiveSupport::TestCase
428
429
  view['something_else']['name'] = 'child new name'
429
430
  end
430
431
 
431
- assert_equal('child new name', @model.child.name)
432
+ assert_equal('child new name', @model.child.name)
432
433
  end
433
434
  end
434
435