|
1 |
| -require "test_helper" |
| 1 | +require 'test_helper' |
2 | 2 |
|
3 | 3 | class ArrayEnumTest < Minitest::Test
|
4 | 4 | def setup
|
5 | 5 | User.delete_all
|
6 | 6 | end
|
7 | 7 |
|
8 | 8 | def test_assigning_enum_values
|
9 |
| - user = User.new(favourite_colors: ["red", "blue"]) |
10 |
| - assert_equal ["red", "blue"], user.favourite_colors |
| 9 | + user = User.new(favourite_colors: %w[red blue]) |
| 10 | + assert_equal %w[red blue], user.favourite_colors |
11 | 11 | end
|
12 | 12 |
|
13 | 13 | def test_assigning_enum_values_as_symbols
|
14 |
| - user = User.new(favourite_colors: [:red, :blue]) |
15 |
| - assert_equal ["red", "blue"], user.favourite_colors |
| 14 | + user = User.new(favourite_colors: %i[red blue]) |
| 15 | + assert_equal %w[red blue], user.favourite_colors |
16 | 16 | end
|
17 | 17 |
|
18 | 18 | def test_raising_error_on_unknown_value
|
19 | 19 | error = assert_raises(ArgumentError) do
|
20 |
| - User.new(favourite_colors: ["black"]) |
| 20 | + User.new(favourite_colors: ['black']) |
21 | 21 | end
|
22 | 22 | assert_match(/black is not a valid value for favourite_colors/, error.message)
|
23 | 23 | end
|
24 | 24 |
|
25 | 25 | def test_storing_values_as_integers
|
26 |
| - user = User.create!(favourite_colors: ["red"]) |
| 26 | + user = User.create!(favourite_colors: ['red']) |
27 | 27 | user.reload
|
28 |
| - assert_equal "{1}", user.read_attribute_before_type_cast("favourite_colors") |
| 28 | + assert_equal '{1}', user.read_attribute_before_type_cast('favourite_colors') |
29 | 29 | end
|
30 | 30 |
|
31 | 31 | # with_attr scope
|
32 | 32 | def test_quering_db_with_single_matching_value
|
33 |
| - user = User.create!(favourite_colors: ["red"]) |
34 |
| - assert_equal [user], User.with_favourite_colors("red") |
| 33 | + user = User.create!(favourite_colors: ['red']) |
| 34 | + assert_equal [user], User.with_favourite_colors('red') |
35 | 35 | end
|
36 | 36 |
|
37 | 37 | def test_quering_db_with_single_matching_symbol_value
|
38 |
| - user = User.create!(favourite_colors: ["red"]) |
| 38 | + user = User.create!(favourite_colors: ['red']) |
39 | 39 | assert_equal [user], User.with_favourite_colors(:red)
|
40 | 40 | end
|
41 | 41 |
|
42 | 42 | def test_quering_db_by_one_of_matching_value
|
43 |
| - user = User.create!(favourite_colors: ["red", "blue"]) |
44 |
| - assert_equal [user], User.with_favourite_colors("red") |
| 43 | + user = User.create!(favourite_colors: %w[red blue]) |
| 44 | + assert_equal [user], User.with_favourite_colors('red') |
45 | 45 | end
|
46 | 46 |
|
47 | 47 | def test_quering_db_by_excluded_value_does_not_return_record
|
48 |
| - User.create!(favourite_colors: ["red", "blue"]) |
49 |
| - assert_equal [], User.with_favourite_colors("green") |
| 48 | + User.create!(favourite_colors: %w[red blue]) |
| 49 | + assert_equal [], User.with_favourite_colors('green') |
50 | 50 | end
|
51 | 51 |
|
52 | 52 | def test_quering_db_by_many_values_does_not_return_record_on_excluded_value
|
53 |
| - User.create!(favourite_colors: ["red", "blue"]) |
54 |
| - assert_equal [], User.with_favourite_colors(["red", "green"]) |
| 53 | + User.create!(favourite_colors: %w[red blue]) |
| 54 | + assert_equal [], User.with_favourite_colors(%w[red green]) |
55 | 55 | end
|
56 | 56 |
|
57 | 57 | def test_quering_db_only_with_single_matching_value
|
58 |
| - user = User.create!(favourite_colors: ["red"]) |
59 |
| - assert_equal [user], User.only_with_favourite_colors(["red"]) |
| 58 | + user = User.create!(favourite_colors: ['red']) |
| 59 | + assert_equal [user], User.only_with_favourite_colors(['red']) |
60 | 60 | end
|
61 | 61 |
|
62 | 62 | def test_quering_db_only_with_single_matching_value_from_many_values_does_not_return_record
|
63 |
| - User.create!(favourite_colors: ["red", "blue"]) |
64 |
| - assert_equal [], User.only_with_favourite_colors(["red"]) |
| 63 | + User.create!(favourite_colors: %w[red blue]) |
| 64 | + assert_equal [], User.only_with_favourite_colors(['red']) |
65 | 65 | end
|
66 | 66 |
|
67 | 67 | def test_quering_db_by_non_existing_value_raises_error
|
68 |
| - User.create!(favourite_colors: ["red", "blue"]) |
| 68 | + User.create!(favourite_colors: %w[red blue]) |
69 | 69 | error = assert_raises(ArgumentError) do
|
70 |
| - User.with_favourite_colors("black") |
| 70 | + User.with_favourite_colors('black') |
71 | 71 | end
|
72 | 72 | assert_match(/black is not a valid value for favourite_colors/, error.message)
|
73 | 73 | end
|
74 | 74 |
|
75 | 75 | # with_any_of_attr scope
|
76 | 76 | def test_with_any_of_attr_matching_value
|
77 |
| - user = User.create!(favourite_colors: ["red"]) |
78 |
| - assert_equal [user], User.with_any_of_favourite_colors("red") |
| 77 | + user = User.create!(favourite_colors: ['red']) |
| 78 | + assert_equal [user], User.with_any_of_favourite_colors('red') |
79 | 79 | end
|
80 | 80 |
|
81 | 81 | def test_with_any_of_attr_matching_symbol_value
|
82 |
| - user = User.create!(favourite_colors: ["red"]) |
| 82 | + user = User.create!(favourite_colors: ['red']) |
83 | 83 | assert_equal [user], User.with_any_of_favourite_colors(:red)
|
84 | 84 | end
|
85 | 85 |
|
86 | 86 | def test_with_any_of_attr_one_of_matching_value
|
87 |
| - user = User.create!(favourite_colors: ["red", "blue"]) |
88 |
| - assert_equal [user], User.with_any_of_favourite_colors("red") |
| 87 | + user = User.create!(favourite_colors: %w[red blue]) |
| 88 | + assert_equal [user], User.with_any_of_favourite_colors('red') |
89 | 89 | end
|
90 | 90 |
|
91 | 91 | def test_with_any_of_attr_excluded_value_does_not_return_record
|
92 |
| - User.create!(favourite_colors: ["red", "blue"]) |
93 |
| - assert_equal [], User.with_any_of_favourite_colors("green") |
| 92 | + User.create!(favourite_colors: %w[red blue]) |
| 93 | + assert_equal [], User.with_any_of_favourite_colors('green') |
94 | 94 | end
|
95 | 95 |
|
96 | 96 | def test_with_any_of_attr_many_value_when_single_match
|
97 |
| - user = User.create!(favourite_colors: ["red", "blue"]) |
98 |
| - assert_equal [user], User.with_any_of_favourite_colors(["red", "green"]) |
| 97 | + user = User.create!(favourite_colors: %w[red blue]) |
| 98 | + assert_equal [user], User.with_any_of_favourite_colors(%w[red green]) |
99 | 99 | end
|
100 | 100 |
|
101 | 101 | def test_with_any_of_attr_by_non_existing_value_raises_error
|
102 |
| - User.create!(favourite_colors: ["red", "blue"]) |
| 102 | + User.create!(favourite_colors: %w[red blue]) |
103 | 103 | error = assert_raises(ArgumentError) do
|
104 |
| - User.with_any_of_favourite_colors("black") |
| 104 | + User.with_any_of_favourite_colors('black') |
105 | 105 | end
|
106 | 106 | assert_match(/black is not a valid value for favourite_colors/, error.message)
|
107 | 107 | end
|
108 | 108 |
|
109 |
| - |
110 | 109 | def test_lists_values
|
111 |
| - assert_equal User.favourite_colors, {"red"=>1, "blue"=>2, "green"=>3} |
| 110 | + assert_equal User.favourite_colors, { 'red' => 1, 'blue' => 2, 'green' => 3 } |
112 | 111 | end
|
113 | 112 |
|
114 | 113 | def test_values_can_be_accessed_indifferently
|
115 | 114 | assert_equal User.favourite_colors[:red], 1
|
116 | 115 | assert_equal User.favourite_colors[:blue], 2
|
117 | 116 | assert_equal User.favourite_colors[:green], 3
|
118 |
| - assert_equal User.favourite_colors["red"], 1 |
| 117 | + assert_equal User.favourite_colors['red'], 1 |
| 118 | + end |
| 119 | + |
| 120 | + def test_user_with_join_table_which_has_same_array_enum_col |
| 121 | + user = User.create!(favourite_colors: %w[red blue], |
| 122 | + profiles: [Profile.new(slug: 'profile_slug')]) |
| 123 | + |
| 124 | + assert_equal [user], User.joins(:profiles).with_any_of_favourite_colors(%w[red]) |
119 | 125 | end
|
120 | 126 | end
|
0 commit comments