hydra_attribute 0.3.2 → 0.4.0.rc1
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.
- data/CHANGELOG.md +1 -1
- data/README.md +7 -0
- data/features/entity/create.feature +128 -0
- data/features/entity/destroy.feature +111 -0
- data/features/entity/new.feature +121 -0
- data/features/entity/update.feature +147 -0
- data/features/{attributes → hydra_attribute}/create.feature +7 -7
- data/features/{attributes → hydra_attribute}/destroy.feature +2 -4
- data/features/{attributes → hydra_attribute}/update.feature +10 -10
- data/features/hydra_set/destroy.feature +31 -0
- data/features/migrations/create_and_drop.feature +165 -0
- data/features/migrations/migrate_and_rollback.feature +211 -0
- data/features/relation/query_methods/group.feature +42 -0
- data/features/relation/query_methods/order.feature +67 -0
- data/features/relation/query_methods/reorder.feature +29 -0
- data/features/relation/query_methods/reverse_order.feature +29 -0
- data/features/relation/query_methods/select.feature +50 -0
- data/features/relation/query_methods/where.feature +70 -0
- data/features/step_definitions/connections.rb +65 -0
- data/features/step_definitions/model_steps.rb +79 -6
- data/features/step_definitions/query_methods.rb +3 -3
- data/features/step_definitions/record_steps.rb +3 -4
- data/features/support/env.rb +17 -3
- data/features/support/world.rb +15 -10
- data/gemfiles/3.1.gemfile.lock +15 -15
- data/gemfiles/3.2.gemfile.lock +15 -15
- data/lib/hydra_attribute/active_record/association.rb +74 -38
- data/lib/hydra_attribute/active_record/association_preloader.rb +49 -49
- data/lib/hydra_attribute/active_record/attribute_methods.rb +37 -85
- data/lib/hydra_attribute/active_record/migration.rb +2 -2
- data/lib/hydra_attribute/active_record/reflection.rb +1 -1
- data/lib/hydra_attribute/active_record/relation/query_methods.rb +8 -7
- data/lib/hydra_attribute/active_record/relation.rb +1 -0
- data/lib/hydra_attribute/active_record.rb +20 -12
- data/lib/hydra_attribute/association_builder.rb +1 -2
- data/lib/hydra_attribute/builder.rb +7 -8
- data/lib/hydra_attribute/entity_callbacks.rb +12 -32
- data/lib/hydra_attribute/hydra_attribute.rb +25 -16
- data/lib/hydra_attribute/hydra_attribute_methods.rb +85 -0
- data/lib/hydra_attribute/hydra_methods.rb +123 -0
- data/lib/hydra_attribute/hydra_set.rb +36 -0
- data/lib/hydra_attribute/hydra_set_methods.rb +39 -0
- data/lib/hydra_attribute/hydra_value_methods.rb +14 -0
- data/lib/hydra_attribute/memoize.rb +37 -0
- data/lib/hydra_attribute/migrator.rb +100 -51
- data/lib/hydra_attribute/railtie.rb +1 -3
- data/lib/hydra_attribute/version.rb +1 -1
- data/lib/hydra_attribute.rb +7 -1
- data/spec/hydra_attribute_methods_spec.rb +458 -0
- data/spec/hydra_attribute_spec.rb +19 -0
- data/spec/hydra_methods_spec.rb +457 -0
- data/spec/hydra_set_methods_spec.rb +203 -0
- data/spec/hydra_set_spec.rb +19 -0
- data/spec/memoize_spec.rb +95 -0
- data/spec/spec_helper.rb +42 -2
- metadata +71 -43
- data/features/create.feature +0 -47
- data/features/define.feature +0 -38
- data/features/destroy.feature +0 -102
- data/features/query_methods/group.feature +0 -42
- data/features/query_methods/order.feature +0 -99
- data/features/query_methods/select.feature +0 -50
- data/features/query_methods/where.feature +0 -70
- data/features/support/schema.rb +0 -79
- data/features/update.feature +0 -114
@@ -1,99 +0,0 @@
|
|
1
|
-
Feature: order conditions by hydra attributes
|
2
|
-
When order records by hydra attribute
|
3
|
-
Then correct table should be joined and order by value should be added
|
4
|
-
|
5
|
-
When correct table is already joined
|
6
|
-
Then only order condition should be added
|
7
|
-
|
8
|
-
When order by several attributes
|
9
|
-
Then order all of them by ascending
|
10
|
-
|
11
|
-
When reorder by attributes
|
12
|
-
Then old hydra attributes should be removed and new should be added
|
13
|
-
|
14
|
-
Background: create hydra attributes
|
15
|
-
Given create hydra attributes for "Product" with role "admin" as "hashes":
|
16
|
-
| name | backend_type | white_list |
|
17
|
-
| [string:code] | [string:integer] | [boolean:true] |
|
18
|
-
| [string:state] | [string:integer] | [boolean:true] |
|
19
|
-
| [string:title] | [string:string] | [boolean:true] |
|
20
|
-
|
21
|
-
Scenario Outline: order by one field
|
22
|
-
Given create "Product" model with attributes as "hashes":
|
23
|
-
| name | code | state |
|
24
|
-
| [string:c] | [integer:1] | [integer:1] |
|
25
|
-
| [string:b] | [integer:2] | [integer:2] |
|
26
|
-
| [string:a] | [integer:3] | [integer:3] |
|
27
|
-
When order "Product" records by "<attributes>"
|
28
|
-
Then "first" record should have "<first identifier>"
|
29
|
-
And "last" record should have "<last identifier>"
|
30
|
-
|
31
|
-
Scenarios: order conditions
|
32
|
-
| attributes | first identifier | last identifier |
|
33
|
-
| state=asc | code=[integer:1] | code=[integer:3] |
|
34
|
-
| state=desc | code=[integer:3] | code=[integer:1] |
|
35
|
-
| name=asc | code=[integer:3] | code=[integer:1] |
|
36
|
-
| name=desc | code=[integer:1] | code=[integer:3] |
|
37
|
-
|
38
|
-
Scenario Outline: order by several attributes
|
39
|
-
Given create "Product" model with attributes as "hashes":
|
40
|
-
| name | code | state | title |
|
41
|
-
| [string:c] | [integer:1] | [integer:1] | [string:b] |
|
42
|
-
| [string:b] | [integer:2] | [integer:2] | [string:a] |
|
43
|
-
| [string:a] | [integer:3] | [integer:3] | [string:c] |
|
44
|
-
When order "Product" records by "<attributes>"
|
45
|
-
Then "first" record should have "<first identifier>"
|
46
|
-
And "last" record should have "<last identifier>"
|
47
|
-
|
48
|
-
Scenarios: order conditions
|
49
|
-
| attributes | first identifier | last identifier |
|
50
|
-
| name state | code=[integer:3] | code=[integer:1] |
|
51
|
-
| state title | code=[integer:1] | code=[integer:3] |
|
52
|
-
| title state | code=[integer:2] | code=[integer:3] |
|
53
|
-
|
54
|
-
Scenario Outline: order by filtered attribute
|
55
|
-
Given create "Product" model with attributes as "hashes":
|
56
|
-
| code | state | title |
|
57
|
-
| [integer:1] | [integer:1] | |
|
58
|
-
| [integer:2] | | [nil:] |
|
59
|
-
| [integer:3] | [integer:1] | [string:a] |
|
60
|
-
When filter "Product" records by "<filter attribute>"
|
61
|
-
And order records by "<order attributes>"
|
62
|
-
Then total records should be "<count>"
|
63
|
-
And "first" record should have "<first identifier>"
|
64
|
-
And "last" record should have "<last identifier>"
|
65
|
-
|
66
|
-
Scenarios: order conditions
|
67
|
-
| filter attribute | order attributes | count | first identifier | last identifier |
|
68
|
-
| state=[integer:1] | state code | 2 | code=[integer:1] | code=[integer:3] |
|
69
|
-
| state=[nil:] | state code | 1 | code=[integer:2] | code=[integer:2] |
|
70
|
-
| title=[nil:] | title code | 2 | code=[integer:1] | code=[integer:2] |
|
71
|
-
|
72
|
-
Scenario Outline: reorder
|
73
|
-
Given create "Product" model with attributes as "hashes":
|
74
|
-
| code | name | title |
|
75
|
-
| [integer:1] | [string:a] | [string:c] |
|
76
|
-
| [integer:2] | [string:b] | [string:b] |
|
77
|
-
| [integer:3] | [string:c] | [string:a] |
|
78
|
-
When order "Product" records by "<order>"
|
79
|
-
And reorder records by "<reorder>"
|
80
|
-
Then total records should be "<count>"
|
81
|
-
And "first" record should have "<first identifier>"
|
82
|
-
And "last" record should have "<last identifier>"
|
83
|
-
|
84
|
-
Scenarios: order conditions
|
85
|
-
| order | reorder | count | first identifier | last identifier |
|
86
|
-
| title | name title | 3 | code=[integer:1] | code=[integer:3] |
|
87
|
-
| name | title name | 3 | code=[integer:3] | code=[integer:1] |
|
88
|
-
|
89
|
-
Scenario: reverse order
|
90
|
-
Given create "Product" model with attributes as "hashes":
|
91
|
-
| code | title |
|
92
|
-
| [integer:1] | [string:a] |
|
93
|
-
| [integer:2] | [string:b] |
|
94
|
-
| [integer:3] | [string:c] |
|
95
|
-
When order "Product" records by "title"
|
96
|
-
And reverse order records
|
97
|
-
Then total records should be "3"
|
98
|
-
And "first" record should have "code=[integer:3]"
|
99
|
-
And "last" record should have "code=[integer:1]"
|
@@ -1,50 +0,0 @@
|
|
1
|
-
Feature: select concrete attributes
|
2
|
-
When select concrete attribute
|
3
|
-
Then model should response only to these attributes
|
4
|
-
|
5
|
-
Background: create hydra attributes
|
6
|
-
Given create hydra attributes for "Product" with role "admin" as "hashes":
|
7
|
-
| name | backend_type | white_list |
|
8
|
-
| [string:code] | [string:integer] | [boolean:true] |
|
9
|
-
| [string:price] | [string:float] | [boolean:true] |
|
10
|
-
| [string:title] | [string:string] | [boolean:true] |
|
11
|
-
| [string:note] | [string:text] | [boolean:true] |
|
12
|
-
| [string:active] | [string:boolean] | [boolean:true] |
|
13
|
-
| [string:schedule] | [string:datetime] | [boolean:true] |
|
14
|
-
And create "Product" model with attributes as "hashes":
|
15
|
-
| name | code | price | title | note | active | schedule |
|
16
|
-
| [string:a] | [integer:1] | [float:4] | [string:q] | [string:z] | [boolean:true] | [datetime:2012-06-01] |
|
17
|
-
| [string:b] | [integer:2] | [float:5] | [string:w] | [string:x] | [boolean:false] | [datetime:2012-06-02] |
|
18
|
-
| [string:c] | [integer:3] | [float:6] | | [string:c] | [boolean:true] | [datetime:2012-06-03] |
|
19
|
-
| [string:d] | [nil:] | [float:7] | | [string:v] | [boolean:false] | [datetime:2012-06-04] |
|
20
|
-
|
21
|
-
Scenario Outline: select concrete attributes
|
22
|
-
When "Product" select only the following columns "<selected columns>"
|
23
|
-
Then records should have only the following "<expected columns>" names
|
24
|
-
And records should raise "ActiveModel::MissingAttributeError" when call the following "<methods>"
|
25
|
-
And total records should be "4"
|
26
|
-
|
27
|
-
Scenarios: select attributes
|
28
|
-
| selected columns | expected columns | methods |
|
29
|
-
| name | name | code price title note active schedule |
|
30
|
-
| name code | id name code | price title note active schedule |
|
31
|
-
| name code price | id name code price | title note active schedule |
|
32
|
-
| code price title | id code price title | name note active schedule |
|
33
|
-
| title note active | id title note active | name code price schedule |
|
34
|
-
| schedule | id schedule | name code price title note active |
|
35
|
-
| id schedule | id schedule | name code price title note active |
|
36
|
-
|
37
|
-
Scenario Outline: filter collection and select concrete attributes
|
38
|
-
When "Product" select only the following columns "<selected columns>"
|
39
|
-
And filter records by "<filter attributes>"
|
40
|
-
Then records should have only the following "<expected columns>" names
|
41
|
-
And records should raise "ActiveModel::MissingAttributeError" when call the following "<methods>"
|
42
|
-
And total records should be "<total>"
|
43
|
-
|
44
|
-
Scenarios: filter and select attributes
|
45
|
-
| selected columns | expected columns | filter attributes | methods | total |
|
46
|
-
| name code | id name code | name=[string:a] | price title note active schedule | 1 |
|
47
|
-
| code | id code | code=[integer:1] | name price title note active schedule | 1 |
|
48
|
-
| name code | id name code | code=[integer:1] | price title note active schedule | 1 |
|
49
|
-
| code title | id code title | title=[nil:] | name price note active schedule | 2 |
|
50
|
-
| code note | id code note | title=[nil:] | name price title active schedule | 2 |
|
@@ -1,70 +0,0 @@
|
|
1
|
-
Feature: hydra attribute where conditions
|
2
|
-
When filter by hydra attribute and this value is not nil
|
3
|
-
Then records with this attribute should be selected
|
4
|
-
|
5
|
-
When filter by hydra attribute and this value is nil
|
6
|
-
Then records with nil and blank value should be selected
|
7
|
-
|
8
|
-
Background: create hydra attributes
|
9
|
-
Given create hydra attributes for "Product" with role "admin" as "hashes":
|
10
|
-
| name | backend_type | white_list |
|
11
|
-
| [string:code] | [string:string] | [boolean:true] |
|
12
|
-
| [string:summary] | [string:string] | [boolean:true] |
|
13
|
-
| [string:title] | [string:string] | [boolean:true] |
|
14
|
-
| [string:price] | [string:float] | [boolean:true] |
|
15
|
-
| [string:active] | [string:boolean] | [boolean:true] |
|
16
|
-
| [string:state] | [string:integer] | [boolean:true] |
|
17
|
-
|
18
|
-
Scenario: filter by one hydra attribute
|
19
|
-
Given create "Product" model with attributes as "hashes":
|
20
|
-
| code | price |
|
21
|
-
| [string:1] | [float:2.75] |
|
22
|
-
| [string:2] | [float:2.75] |
|
23
|
-
| [string:3] | [float:2.76] |
|
24
|
-
| [string:4] | [nil:] |
|
25
|
-
When filter "Product" by:
|
26
|
-
| field | value |
|
27
|
-
| price | [string:2.75] |
|
28
|
-
Then total records should be "2"
|
29
|
-
And records should have the following attributes:
|
30
|
-
| field | value |
|
31
|
-
| code | [string:1] |
|
32
|
-
| code | [string:2] |
|
33
|
-
|
34
|
-
Scenario: filter by one hydra attribute with nil value
|
35
|
-
Given create "Product" model with attributes as "hashes":
|
36
|
-
| code | price |
|
37
|
-
| [string:1] | [nil:] |
|
38
|
-
| [string:2] | [float:0] |
|
39
|
-
| [string:3] | |
|
40
|
-
When filter "Product" by:
|
41
|
-
| field | value |
|
42
|
-
| price | [nil:] |
|
43
|
-
Then total records should be "2"
|
44
|
-
And records should have the following attributes:
|
45
|
-
| field | value |
|
46
|
-
| code | [string:1] |
|
47
|
-
| code | [string:3] |
|
48
|
-
|
49
|
-
Scenario: filter by several fields including both the hydra and general attributes
|
50
|
-
Given create "Product" model with attributes as "hashes":
|
51
|
-
| name | code | title | price | active | state | summary |
|
52
|
-
| [string:toy] | [string:1] | [string:story] | [float:2.40] | [boolean:true] | | |
|
53
|
-
| [string:toy] | [string:2] | [string:story] | [float:2.45] | [boolean:true] | | [nil:] |
|
54
|
-
| [string:toy] | [string:3] | [string:story] | [float:2.45] | [boolean:true] | [nil:] | [nil:] |
|
55
|
-
| [string:toy] | [string:4] | | [float:2.45] | [boolean:false] | [nil:] | [nil:] |
|
56
|
-
| | [string:5] | | [float:2.45] | [boolean:true] | [nil:] | [nil:] |
|
57
|
-
| [string:toy] | [string:6] | | [float:2.46] | [boolean:true] | [nil:] | [nil:] |
|
58
|
-
When filter "Product" by:
|
59
|
-
| field | value |
|
60
|
-
| name | [string:toy] |
|
61
|
-
| title | [string:story] |
|
62
|
-
| summary | [nil:] |
|
63
|
-
| price | [string:2.45] |
|
64
|
-
| active | [boolean:true] |
|
65
|
-
| state | [nil:] |
|
66
|
-
Then total records should be "2"
|
67
|
-
And records should have the following attributes:
|
68
|
-
| field | value |
|
69
|
-
| code | [string:2] |
|
70
|
-
| code | [string:3] |
|
data/features/support/schema.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
ActiveRecord::Schema.define do
|
2
|
-
create_table "products", :force => true do |t|
|
3
|
-
t.string "name"
|
4
|
-
t.datetime "created_at", :null => false
|
5
|
-
t.datetime "updated_at", :null => false
|
6
|
-
end
|
7
|
-
|
8
|
-
create_table "hydra_attributes", :force => true do |t|
|
9
|
-
t.string "entity_type", :limit => 32, :null => false
|
10
|
-
t.string "name", :limit => 32, :null => false
|
11
|
-
t.string "backend_type", :limit => 16, :null => false
|
12
|
-
t.string "default_value"
|
13
|
-
t.boolean "white_list", :null => false, :default => false
|
14
|
-
t.datetime "created_at", :null => false
|
15
|
-
t.datetime "updated_at", :null => false
|
16
|
-
end
|
17
|
-
|
18
|
-
add_index "hydra_attributes", ["entity_type", "name"], :name => "hydra_attributes_index", :unique => true
|
19
|
-
|
20
|
-
create_table "hydra_boolean_products", :force => true do |t|
|
21
|
-
t.integer "entity_id", :null => false
|
22
|
-
t.integer "hydra_attribute_id", :null => false
|
23
|
-
t.boolean "value"
|
24
|
-
t.datetime "created_at", :null => false
|
25
|
-
t.datetime "updated_at", :null => false
|
26
|
-
end
|
27
|
-
|
28
|
-
add_index "hydra_boolean_products", ["entity_id", "hydra_attribute_id"], :name => "hydra_boolean_products_index", :unique => true
|
29
|
-
|
30
|
-
create_table "hydra_datetime_products", :force => true do |t|
|
31
|
-
t.integer "entity_id", :null => false
|
32
|
-
t.integer "hydra_attribute_id", :null => false
|
33
|
-
t.datetime "value"
|
34
|
-
t.datetime "created_at", :null => false
|
35
|
-
t.datetime "updated_at", :null => false
|
36
|
-
end
|
37
|
-
|
38
|
-
add_index "hydra_datetime_products", ["entity_id", "hydra_attribute_id"], :name => "hydra_datetime_products_index", :unique => true
|
39
|
-
|
40
|
-
create_table "hydra_float_products", :force => true do |t|
|
41
|
-
t.integer "entity_id", :null => false
|
42
|
-
t.integer "hydra_attribute_id", :null => false
|
43
|
-
t.float "value"
|
44
|
-
t.datetime "created_at", :null => false
|
45
|
-
t.datetime "updated_at", :null => false
|
46
|
-
end
|
47
|
-
|
48
|
-
add_index "hydra_float_products", ["entity_id", "hydra_attribute_id"], :name => "hydra_float_products_index", :unique => true
|
49
|
-
|
50
|
-
create_table "hydra_integer_products", :force => true do |t|
|
51
|
-
t.integer "entity_id", :null => false
|
52
|
-
t.integer "hydra_attribute_id", :null => false
|
53
|
-
t.integer "value"
|
54
|
-
t.datetime "created_at", :null => false
|
55
|
-
t.datetime "updated_at", :null => false
|
56
|
-
end
|
57
|
-
|
58
|
-
add_index "hydra_integer_products", ["entity_id", "hydra_attribute_id"], :name => "hydra_integer_products_index", :unique => true
|
59
|
-
|
60
|
-
create_table "hydra_string_products", :force => true do |t|
|
61
|
-
t.integer "entity_id", :null => false
|
62
|
-
t.integer "hydra_attribute_id", :null => false
|
63
|
-
t.string "value"
|
64
|
-
t.datetime "created_at", :null => false
|
65
|
-
t.datetime "updated_at", :null => false
|
66
|
-
end
|
67
|
-
|
68
|
-
add_index "hydra_string_products", ["entity_id", "hydra_attribute_id"], :name => "hydra_string_products_index", :unique => true
|
69
|
-
|
70
|
-
create_table "hydra_text_products", :force => true do |t|
|
71
|
-
t.integer "entity_id", :null => false
|
72
|
-
t.integer "hydra_attribute_id", :null => false
|
73
|
-
t.text "value"
|
74
|
-
t.datetime "created_at", :null => false
|
75
|
-
t.datetime "updated_at", :null => false
|
76
|
-
end
|
77
|
-
|
78
|
-
add_index "hydra_text_products", ["entity_id", "hydra_attribute_id"], :name => "hydra_text_products_index", :unique => true
|
79
|
-
end
|
data/features/update.feature
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
Feature: update hydra attributes
|
2
|
-
When update attribute
|
3
|
-
Then entity should be touched
|
4
|
-
|
5
|
-
Background: create hydra attributes
|
6
|
-
Given create hydra attributes for "Product" with role "admin" as "hashes":
|
7
|
-
| name | backend_type | default_value | white_list |
|
8
|
-
| [string:code] | [string:string] | [string:###] | [boolean:true] |
|
9
|
-
| [string:title] | [string:string] | | [boolean:true] |
|
10
|
-
| [string:total] | [string:integer] | [integer:1] | [boolean:true] |
|
11
|
-
And create "Product" model
|
12
|
-
|
13
|
-
Scenario Outline: update attributes
|
14
|
-
Given select last "Product" record
|
15
|
-
When assign attributes as "rows_hash":
|
16
|
-
| code | <set code> |
|
17
|
-
| title | <set title> |
|
18
|
-
| total | <set total> |
|
19
|
-
And save record
|
20
|
-
Then last created "Product" should have the following attributes:
|
21
|
-
| code | <code> |
|
22
|
-
| title | <title> |
|
23
|
-
| total | <total> |
|
24
|
-
|
25
|
-
Scenarios: attributes
|
26
|
-
| set code | set title | set total | code | title | total |
|
27
|
-
| [string:a] | [string:b] | [integer:2] | [string:a] | [string:b] | [integer:2] |
|
28
|
-
| [string:] | [string:] | [nil:] | [string:] | [string:] | [nil:] |
|
29
|
-
| | | [string:3] | [string:###] | [nil:] | [integer:3] |
|
30
|
-
|
31
|
-
# Is a better solution to call several scenarios but don't call hooks and backgrounds before?
|
32
|
-
Scenario: update the same model several times
|
33
|
-
Given select first "Product" record
|
34
|
-
And save record
|
35
|
-
Then last created "Product" should have the following attributes:
|
36
|
-
| code | [string:###] |
|
37
|
-
| title | [nil:] |
|
38
|
-
| total | [integer:1] |
|
39
|
-
|
40
|
-
When assign attributes as "rows_hash":
|
41
|
-
| title | [string:] |
|
42
|
-
| total | [nil:] |
|
43
|
-
And save record
|
44
|
-
Then last created "Product" should have the following attributes:
|
45
|
-
| code | [string:###] |
|
46
|
-
| title | [string:] |
|
47
|
-
| total | [nil:] |
|
48
|
-
|
49
|
-
When assign attributes as "rows_hash":
|
50
|
-
| code | [string:a] |
|
51
|
-
| total | [string:2] |
|
52
|
-
And save record
|
53
|
-
Then last created "Product" should have the following attributes:
|
54
|
-
| code | [string:a] |
|
55
|
-
| title | [string:] |
|
56
|
-
| total | [integer:2] |
|
57
|
-
|
58
|
-
When assign attributes as "rows_hash":
|
59
|
-
| title | [string:b] |
|
60
|
-
And save record
|
61
|
-
Then last created "Product" should have the following attributes:
|
62
|
-
| code | [string:a] |
|
63
|
-
| title | [string:b] |
|
64
|
-
| total | [integer:2] |
|
65
|
-
|
66
|
-
Scenario: touch entity when attribute is updated
|
67
|
-
Given select last "Product" record
|
68
|
-
And keep "updated_at" attribute
|
69
|
-
And save record
|
70
|
-
Then attribute "updated_at" should be the same
|
71
|
-
|
72
|
-
Given select last "Product" record
|
73
|
-
And keep "updated_at" attribute
|
74
|
-
When assign attributes as "rows_hash":
|
75
|
-
| code | [string:###] |
|
76
|
-
| total | [integer:1] |
|
77
|
-
And save record
|
78
|
-
Then attribute "updated_at" should be the same
|
79
|
-
|
80
|
-
Given select last "Product" record
|
81
|
-
And keep "updated_at" attribute
|
82
|
-
When assign attributes as "rows_hash":
|
83
|
-
| code | [nil:] |
|
84
|
-
And save record
|
85
|
-
Then attribute "updated_at" should not be the same
|
86
|
-
|
87
|
-
Given select last "Product" record
|
88
|
-
And keep "updated_at" attribute
|
89
|
-
When assign attributes as "rows_hash":
|
90
|
-
| code | [nil:] |
|
91
|
-
And save record
|
92
|
-
Then attribute "updated_at" should be the same
|
93
|
-
|
94
|
-
Given select last "Product" record
|
95
|
-
And keep "updated_at" attribute
|
96
|
-
When assign attributes as "rows_hash":
|
97
|
-
| total | [nil:] |
|
98
|
-
And save record
|
99
|
-
Then attribute "updated_at" should not be the same
|
100
|
-
|
101
|
-
Given select last "Product" record
|
102
|
-
And keep "updated_at" attribute
|
103
|
-
When assign attributes as "rows_hash":
|
104
|
-
| code | [string:] |
|
105
|
-
And save record
|
106
|
-
Then attribute "updated_at" should not be the same
|
107
|
-
|
108
|
-
Given select last "Product" record
|
109
|
-
And keep "updated_at" attribute
|
110
|
-
When assign attributes as "rows_hash":
|
111
|
-
| title | [string:] |
|
112
|
-
| total | [integer:0] |
|
113
|
-
And save record
|
114
|
-
Then attribute "updated_at" should not be the same
|