releaf-core 2.0.0 → 2.0.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.
- checksums.yaml +4 -4
- metadata +3 -193
- data/spec/builders/releaf/builders/association_reflector_spec.rb +0 -138
- data/spec/builders/releaf/builders/base_spec.rb +0 -272
- data/spec/builders/releaf/builders/collection_spec.rb +0 -18
- data/spec/builders/releaf/builders/confirm_destroy_dialog_builder_spec.rb +0 -71
- data/spec/builders/releaf/builders/confirm_dialog_builder_spec.rb +0 -107
- data/spec/builders/releaf/builders/edit_builder_spec.rb +0 -322
- data/spec/builders/releaf/builders/form_builder/associations_spec.rb +0 -129
- data/spec/builders/releaf/builders/form_builder/date_fields_spec.rb +0 -86
- data/spec/builders/releaf/builders/form_builder/i18n_fields_spec.rb +0 -48
- data/spec/builders/releaf/builders/form_builder/label_spec.rb +0 -106
- data/spec/builders/releaf/builders/form_builder/number_fields_spec.rb +0 -37
- data/spec/builders/releaf/builders/form_builder_spec.rb +0 -228
- data/spec/builders/releaf/builders/index_builder_spec.rb +0 -364
- data/spec/builders/releaf/builders/page/header_builder_spec.rb +0 -66
- data/spec/builders/releaf/builders/page/layout_builder_spec.rb +0 -237
- data/spec/builders/releaf/builders/page/menu_builder_spec.rb +0 -345
- data/spec/builders/releaf/builders/pagination_builder_spec.rb +0 -330
- data/spec/builders/releaf/builders/resource_dialog_spec.rb +0 -21
- data/spec/builders/releaf/builders/resource_view_spec.rb +0 -158
- data/spec/builders/releaf/builders/show_builder_spec.rb +0 -7
- data/spec/builders/releaf/builders/table_builder_spec.rb +0 -637
- data/spec/builders/releaf/builders/template_spec.rb +0 -12
- data/spec/builders/releaf/builders/toolbox_builder_spec.rb +0 -67
- data/spec/builders/releaf/builders/toolbox_spec.rb +0 -48
- data/spec/builders/releaf/builders/utilities/date_fields_spec.rb +0 -125
- data/spec/builders/releaf/builders/utilities/resolve_attribute_field_method_name_spec.rb +0 -318
- data/spec/builders/releaf/builders/view_spec.rb +0 -281
- data/spec/builders/releaf/builders_spec.rb +0 -144
- data/spec/builders/releaf/settings/form_builder_spec.rb +0 -48
- data/spec/builders/releaf/settings/table_builder_spec.rb +0 -23
- data/spec/controllers/concerns/releaf/richtext_attachments_spec.rb +0 -51
- data/spec/controllers/releaf/action_controller_spec.rb +0 -423
- data/spec/controllers/releaf/root_controller_spec.rb +0 -46
- data/spec/controllers/releaf/settings_controller_spec.rb +0 -52
- data/spec/error_hash_builder_spec.rb +0 -83
- data/spec/ext/array_reorder_spec.rb +0 -12
- data/spec/features/ajaxbox_spec.rb +0 -111
- data/spec/features/authorization_spec.rb +0 -50
- data/spec/features/breadcrumbs_spec.rb +0 -16
- data/spec/features/dragonfly_integration_spec.rb +0 -24
- data/spec/features/edit_actions_spec.rb +0 -186
- data/spec/features/errors_spec.rb +0 -47
- data/spec/features/index_actions_spec.rb +0 -86
- data/spec/features/index_table_spec.rb +0 -35
- data/spec/features/menu_spec.rb +0 -71
- data/spec/features/richtext_attachments_spec.rb +0 -64
- data/spec/features/richtext_custom_config_spec.rb +0 -28
- data/spec/features/richtext_embed_spec.rb +0 -29
- data/spec/features/richtext_spec.rb +0 -31
- data/spec/features/search_spec.rb +0 -825
- data/spec/features/settings_spec.rb +0 -70
- data/spec/features/title_spec.rb +0 -13
- data/spec/fixtures/common_fields.yml +0 -17
- data/spec/fixtures/cs.png +0 -0
- data/spec/fixtures/time.formats.xlsx +0 -0
- data/spec/fixtures/unicorn.jpg +0 -0
- data/spec/helpers/application_helper_spec.rb +0 -73
- data/spec/helpers/button_helper_spec.rb +0 -146
- data/spec/lib/releaf/action_controller/features_spec.rb +0 -171
- data/spec/lib/releaf/action_controller/search_spec.rb +0 -84
- data/spec/lib/releaf/application_spec.rb +0 -43
- data/spec/lib/releaf/assets_resolver_spec.rb +0 -130
- data/spec/lib/releaf/build_errors_hash_spec.rb +0 -141
- data/spec/lib/releaf/configuration_spec.rb +0 -205
- data/spec/lib/releaf/controller_definition_spec.rb +0 -78
- data/spec/lib/releaf/controller_group_definition_spec.rb +0 -33
- data/spec/lib/releaf/default_searchable_fields_spec.rb +0 -161
- data/spec/lib/releaf/instance_cache_spec.rb +0 -98
- data/spec/lib/releaf/resource_base_spec.rb +0 -212
- data/spec/lib/releaf/resource_fields_spec.rb +0 -12
- data/spec/lib/releaf/resource_params_spec.rb +0 -115
- data/spec/lib/releaf/resource_table_fields_spec.rb +0 -20
- data/spec/lib/releaf/resource_utilities_spec.rb +0 -87
- data/spec/lib/releaf/responders/access_denied_responder_spec.rb +0 -12
- data/spec/lib/releaf/responders/after_save_responder_spec.rb +0 -88
- data/spec/lib/releaf/responders/confirm_destroy_responder_spec.rb +0 -26
- data/spec/lib/releaf/responders/destroy_responder_spec.rb +0 -30
- data/spec/lib/releaf/responders/error_responder_spec.rb +0 -26
- data/spec/lib/releaf/responders/feature_disabled_responder_spec.rb +0 -12
- data/spec/lib/releaf/responders/page_not_found_responder_spec.rb +0 -12
- data/spec/lib/releaf/responders_spec.rb +0 -61
- data/spec/lib/releaf/root/configuration_spec.rb +0 -9
- data/spec/lib/releaf/root/default_controller_resolver_spec.rb +0 -44
- data/spec/lib/releaf/root_spec.rb +0 -13
- data/spec/lib/releaf/service_spec.rb +0 -20
- data/spec/lib/releaf/settings/normalize_value_spec.rb +0 -103
- data/spec/lib/releaf/settings/register_spec.rb +0 -135
- data/spec/lib/releaf/settings_manager_spec.rb +0 -22
- data/spec/lib/validation_error_codes_spec.rb +0 -56
- data/spec/misc/factories_spec.rb +0 -31
- data/spec/models/settings_spec.rb +0 -104
- data/spec/routing/route_mapper_spec.rb +0 -185
- data/spec/rspec_helpers/test_helpers_spec.rb +0 -20
- data/spec/rspec_helpers/test_spec.rb +0 -14
- data/spec/services/array/reorder_spec.rb +0 -121
data/spec/misc/factories_spec.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
require "rails_helper"
|
|
2
|
-
|
|
3
|
-
describe "FactoryBot factories" do
|
|
4
|
-
|
|
5
|
-
describe "admin factory" do
|
|
6
|
-
it "creates new user" do
|
|
7
|
-
expect { create(:user) }.to change { Releaf::Permissions::User.count }.by(1)
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
describe "role factory" do
|
|
12
|
-
it "creates new role" do
|
|
13
|
-
expect { create(:admin_role) }.to change { Releaf::Permissions::Role.count }.by(1)
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
describe "node factory" do
|
|
18
|
-
it "creates new content node" do
|
|
19
|
-
expect { create(:node) }.to change { Node.count }.by(1)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "creates new HomePage content node" do
|
|
23
|
-
expect { create(:home_page_node) }.to change { HomePage.count }.by(1)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "creates new TextPage content node" do
|
|
27
|
-
parent = create(:home_page_node)
|
|
28
|
-
expect { create(:text_page_node, parent: parent) }.to change { TextPage.count }.by(1)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
require "rails_helper"
|
|
2
|
-
|
|
3
|
-
describe Releaf::Settings do
|
|
4
|
-
|
|
5
|
-
describe ":registered scope" do
|
|
6
|
-
it "returns only registed settings ordered by `var`" do
|
|
7
|
-
item_1 = Releaf::Settings.create(var: "a", value: "1")
|
|
8
|
-
item_2 = Releaf::Settings.create(var: "b", value: "2")
|
|
9
|
-
Releaf::Settings.create(var: "c", value: "2")
|
|
10
|
-
Releaf::Settings.create(var: "a", value: "3", thing_type: "Releaf::Permissions::User", thing_id: "1")
|
|
11
|
-
|
|
12
|
-
Releaf::Settings.register(key: "a", default: "x", description: "some setting")
|
|
13
|
-
Releaf::Settings.register(key: "b", default: "xxxx", description: "some other setting")
|
|
14
|
-
|
|
15
|
-
expect(described_class.registered).to eq [item_1, item_2]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "returns valid query" do
|
|
19
|
-
expect(described_class.registered.count).to be_instance_of(Integer)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "returns instance of `Releaf::Settings::ActiveRecord_Relation`" do
|
|
23
|
-
expect(described_class.registered).to be_instance_of(Releaf::Settings.const_get(:ActiveRecord_Relation))
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
describe "#releaf_title" do
|
|
28
|
-
it "returns var value" do
|
|
29
|
-
subject.var = "x"
|
|
30
|
-
expect(subject.releaf_title).to eq("x")
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
describe "#input_type" do
|
|
35
|
-
it "returns type from metadata" do
|
|
36
|
-
allow(subject).to receive(:metadata).and_return(type: "xx")
|
|
37
|
-
expect(subject.input_type).to eq("xx")
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
context "when type not defined in meta data" do
|
|
41
|
-
it "returns `:text` as default value" do
|
|
42
|
-
allow(subject).to receive(:metadata).and_return(type: nil)
|
|
43
|
-
expect(subject.input_type).to eq(:text)
|
|
44
|
-
|
|
45
|
-
allow(subject).to receive(:metadata).and_return(asdasd: "xx")
|
|
46
|
-
expect(subject.input_type).to eq(:text)
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
describe "#description" do
|
|
52
|
-
it "returns type from metadata" do
|
|
53
|
-
allow(subject).to receive(:metadata).and_return(description: "xxasd")
|
|
54
|
-
expect(subject.description).to eq("xxasd")
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
describe "#metadata" do
|
|
59
|
-
before do
|
|
60
|
-
subject.var = "xxx"
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "returns metadata values from settings registry fetched by object `var` value" do
|
|
64
|
-
allow(described_class).to receive(:registry).and_return("xxx" => {a: "b"})
|
|
65
|
-
expect(subject.metadata).to eq(a: "b")
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
context "when metadata does not exist" do
|
|
69
|
-
it "returns empty hash" do
|
|
70
|
-
allow(described_class).to receive(:registry).and_return("lasdh" => {a: "b"})
|
|
71
|
-
expect(subject.metadata).to eq({})
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
describe ".register_scoped" do
|
|
77
|
-
it "returns only register scoped settings" do
|
|
78
|
-
allow(described_class).to receive(:where).with(var: ["a", "b"]).and_return("x")
|
|
79
|
-
allow(described_class).to receive(:registered_keys).and_return(["a", "b"])
|
|
80
|
-
|
|
81
|
-
expect(described_class.register_scoped).to eq("x")
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "returns instance of `Releaf::Settings::ActiveRecord_Relation`" do
|
|
85
|
-
expect(described_class.register_scoped).to be_instance_of(Releaf::Settings.const_get(:ActiveRecord_Relation))
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
describe ".register" do
|
|
90
|
-
it "calls `Releaf::Settings::Register` service with given arguments as array" do
|
|
91
|
-
expect(Releaf::Settings::Register).to receive(:call)
|
|
92
|
-
.with(settings: [{key: "a", type: "b"}, {key: "c", type: "d"}])
|
|
93
|
-
described_class.register({key: "a", type: "b"}, {key: "c", type: "d"})
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
describe ".supported_types" do
|
|
98
|
-
it "returns list of supported types as array with symbols" do
|
|
99
|
-
described_class.supported_types.each do|type|
|
|
100
|
-
expect(type).to be_instance_of Symbol
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
require "rails_helper"
|
|
2
|
-
|
|
3
|
-
describe Releaf::RouteMapper do
|
|
4
|
-
after(:all) do
|
|
5
|
-
# reset dummy app routes
|
|
6
|
-
Dummy::Application.reload_routes!
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
describe "#mount_releaf_at" do
|
|
10
|
-
it "it assigns normalized mount location to Releaf.application.config.mount_location" do
|
|
11
|
-
expect{
|
|
12
|
-
routes.draw do
|
|
13
|
-
mount_releaf_at '/xxxx'
|
|
14
|
-
end
|
|
15
|
-
}.to change{ Releaf.application.config.mount_location }.to("xxxx")
|
|
16
|
-
|
|
17
|
-
expect{
|
|
18
|
-
routes.draw do
|
|
19
|
-
mount_releaf_at '/'
|
|
20
|
-
end
|
|
21
|
-
}.to change{ Releaf.application.config.mount_location }.to("")
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
describe "#releaf_resources" do
|
|
26
|
-
before do
|
|
27
|
-
routes.draw do
|
|
28
|
-
mount_releaf_at '/admin' do
|
|
29
|
-
releaf_resources :books
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "mounts resource toolbox route" do
|
|
35
|
-
expect(get: "/admin/books/1/toolbox").to route_to(
|
|
36
|
-
"action"=>"toolbox",
|
|
37
|
-
"controller"=>"admin/books",
|
|
38
|
-
"id"=>"1"
|
|
39
|
-
)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "mounts resource destroy confirm route" do
|
|
43
|
-
expect(get: "/admin/books/1/confirm_destroy").to route_to(
|
|
44
|
-
"action"=>"confirm_destroy",
|
|
45
|
-
"controller"=>"admin/books",
|
|
46
|
-
"id"=>"1"
|
|
47
|
-
)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "mounts resources index route" do
|
|
51
|
-
expect(get: "/admin/books/").to route_to(
|
|
52
|
-
"action"=>"index",
|
|
53
|
-
"controller"=>"admin/books",
|
|
54
|
-
)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "mounts resource create route" do
|
|
58
|
-
expect(post: "/admin/books/").to route_to(
|
|
59
|
-
"action"=>"create",
|
|
60
|
-
"controller"=>"admin/books",
|
|
61
|
-
)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "mounts resource new route" do
|
|
65
|
-
expect(get: "/admin/books/new").to route_to(
|
|
66
|
-
"action"=>"new",
|
|
67
|
-
"controller"=>"admin/books",
|
|
68
|
-
)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "mounts resource edit route" do
|
|
72
|
-
expect(get: "/admin/books/1/edit").to route_to(
|
|
73
|
-
"action"=>"edit",
|
|
74
|
-
"controller"=>"admin/books",
|
|
75
|
-
"id"=>"1"
|
|
76
|
-
)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "mounts resource show route" do
|
|
80
|
-
expect(get: "/admin/books/1").to route_to(
|
|
81
|
-
"action"=>"show",
|
|
82
|
-
"controller"=>"admin/books",
|
|
83
|
-
"id"=>"1"
|
|
84
|
-
)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "mounts resource update route" do
|
|
88
|
-
expect(put: "/admin/books/1").to route_to(
|
|
89
|
-
"action"=>"update",
|
|
90
|
-
"controller"=>"admin/books",
|
|
91
|
-
"id"=>"1"
|
|
92
|
-
)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "mounts resource destroy route" do
|
|
96
|
-
expect(delete: "/admin/books/1").to route_to(
|
|
97
|
-
"action"=>"destroy",
|
|
98
|
-
"controller"=>"admin/books",
|
|
99
|
-
"id"=>"1"
|
|
100
|
-
)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
context "when toolbox route is disabled with except: option" do
|
|
104
|
-
before do
|
|
105
|
-
routes.draw do
|
|
106
|
-
mount_releaf_at '/admin' do
|
|
107
|
-
releaf_resources :books, except: [:toolbox]
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it "route to page not found" do
|
|
113
|
-
expect(get: "/admin/books/1/toolbox")
|
|
114
|
-
.to route_to(controller: "releaf/root", action: "page_not_found", path: "books/1/toolbox")
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
context "when destroy route is skiped within with only: option" do
|
|
119
|
-
before do
|
|
120
|
-
routes.draw do
|
|
121
|
-
mount_releaf_at '/admin' do
|
|
122
|
-
releaf_resources :books, only: [:index]
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
it "route to page not found" do
|
|
128
|
-
expect(get: "/admin/books/1/toolbox")
|
|
129
|
-
.to route_to(controller: "releaf/root", action: "page_not_found", path: "books/1/toolbox")
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
context "when confirm destroy route is disabled with except: option" do
|
|
134
|
-
before do
|
|
135
|
-
routes.draw do
|
|
136
|
-
mount_releaf_at '/admin' do
|
|
137
|
-
releaf_resources :books, except: [:destroy]
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it "does not mount destroy confirm route" do
|
|
143
|
-
expect(get: "/admin/books/1/confirm_destroy")
|
|
144
|
-
.to route_to(controller: "releaf/root", action: "page_not_found", path: "books/1/confirm_destroy")
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
context "when confirm destroy route is skiped within with only: option" do
|
|
149
|
-
before do
|
|
150
|
-
routes.draw do
|
|
151
|
-
mount_releaf_at '/admin' do
|
|
152
|
-
releaf_resources :books, only: [:index]
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "does not mount destroy confirm route" do
|
|
158
|
-
expect(get: "/admin/books/1/confirm_destroy")
|
|
159
|
-
.to route_to(controller: "releaf/root", action: "page_not_found", path: "books/1/confirm_destroy")
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
context "when custom block given" do
|
|
164
|
-
before do
|
|
165
|
-
routes.draw do
|
|
166
|
-
mount_releaf_at '/admin' do
|
|
167
|
-
releaf_resources :books, only: [:index] do
|
|
168
|
-
member do
|
|
169
|
-
get :download
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
it "calls it within resources method" do
|
|
177
|
-
expect(get: "/admin/books/1/download").to route_to(
|
|
178
|
-
"action"=>"download",
|
|
179
|
-
"controller"=>"admin/books",
|
|
180
|
-
"id"=>"1"
|
|
181
|
-
)
|
|
182
|
-
end
|
|
183
|
-
end
|
|
184
|
-
end
|
|
185
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
require "rails_helper"
|
|
2
|
-
|
|
3
|
-
describe Releaf::Test::Helpers do
|
|
4
|
-
describe ".stub_settings" do
|
|
5
|
-
it "stubs given hash by key, value to Releaf::Settings" do
|
|
6
|
-
stub_settings("some.settings" => "x", "something" => "nothing")
|
|
7
|
-
expect(Releaf::Settings["some.settings"]).to eq("x")
|
|
8
|
-
expect(Releaf::Settings["something"]).to eq("nothing")
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "mergs multiple stub calls" do
|
|
12
|
-
stub_settings("some.settings" => "x")
|
|
13
|
-
stub_settings("another.settings" => "xx")
|
|
14
|
-
|
|
15
|
-
expect(Releaf::Settings["some.settings"]).to eq("x")
|
|
16
|
-
expect(Releaf::Settings["another.settings"]).to eq("xx")
|
|
17
|
-
expect(Releaf::Settings["unrelated.settings"]).to eq(nil)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
require "rails_helper"
|
|
2
|
-
|
|
3
|
-
describe Releaf::Test do
|
|
4
|
-
describe ".reset!" do
|
|
5
|
-
it "calls `Releaf::Content::RoutesReloader` reset" do
|
|
6
|
-
# initial there are two calls
|
|
7
|
-
expect(Releaf::Content::RoutesReloader).to receive(:reset!).twice
|
|
8
|
-
described_class.reset!
|
|
9
|
-
|
|
10
|
-
expect(Releaf::Content::RoutesReloader).to receive(:reset!).once
|
|
11
|
-
described_class.reset!
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
require "rails_helper"
|
|
2
|
-
|
|
3
|
-
describe Array::Reorder do
|
|
4
|
-
subject{ described_class.new(array: ["a", "b", "c", "d", {items: "xx"}, "e", "f", "g"],
|
|
5
|
-
values: "c", options: :first) }
|
|
6
|
-
|
|
7
|
-
describe "#values=" do
|
|
8
|
-
context "when `values` is not array" do
|
|
9
|
-
it "wraps it within array before assigning" do
|
|
10
|
-
expect{ subject.values = :a }.to change{ subject.values }.to([:a])
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
context "when `values` is array" do
|
|
15
|
-
it "does not modify it before assigning" do
|
|
16
|
-
expect{ subject.values = [:a] }.to change{ subject.values }.to([:a])
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
describe "#call" do
|
|
22
|
-
it "deletes given values and insert deleted values in reversed order at reorder index" do
|
|
23
|
-
deleted_values = {a: "x", b: "y"}
|
|
24
|
-
subject.values = [:a, :b]
|
|
25
|
-
subject.options = :last
|
|
26
|
-
|
|
27
|
-
expect(subject).to receive(:delete).with([:a, :b]).ordered.and_return(deleted_values)
|
|
28
|
-
expect(subject).to receive(:reorder_index).with(:last).ordered.and_return(1)
|
|
29
|
-
expect{ subject.call }.to change{ subject.array }
|
|
30
|
-
.to(["a", "x", "y", "b", "c", "d", {items: "xx"}, "e", "f", "g"])
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
context "when given value is array" do
|
|
34
|
-
it "process unmodified given value" do
|
|
35
|
-
subject.values = [:a]
|
|
36
|
-
subject.options = :last
|
|
37
|
-
expect(subject).to receive(:delete).with([:a]).and_call_original
|
|
38
|
-
subject.call
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context "when given value is not array" do
|
|
43
|
-
it "puts value within array" do
|
|
44
|
-
subject.values = [:a]
|
|
45
|
-
subject.options = :last
|
|
46
|
-
expect(subject).to receive(:delete).with([:a]).and_call_original
|
|
47
|
-
subject.call
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
describe "#reorder_index" do
|
|
53
|
-
context "when given options is :first" do
|
|
54
|
-
it "returns 0" do
|
|
55
|
-
expect(subject.reorder_index(:first)).to eq(0)
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
context "when given options is :last" do
|
|
60
|
-
it "returns size of array" do
|
|
61
|
-
expect(subject.reorder_index(:last)).to eq(8)
|
|
62
|
-
subject.array = [:a, :b]
|
|
63
|
-
expect(subject.reorder_index(:last)).to eq(2)
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
context "when given options is :before" do
|
|
68
|
-
it "returns index of given `before` value" do
|
|
69
|
-
allow(subject).to receive(:index).with(:items).and_return(4)
|
|
70
|
-
expect(subject.reorder_index(before: :items)).to eq(4)
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
context "when given options is :after" do
|
|
75
|
-
it "returns index of given `after` value increased by 1" do
|
|
76
|
-
allow(subject).to receive(:index).with(:items).and_return(4)
|
|
77
|
-
expect(subject.reorder_index(after: :items)).to eq(5)
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
context "when unknown option given" do
|
|
82
|
-
it "raises ArgumentError" do
|
|
83
|
-
expect{ subject.reorder_index(asdasd: :items) }.to raise_error(ArgumentError, "unknown reorder option")
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
describe "#index" do
|
|
89
|
-
it "returns value index by comparing array and given values casted to strings" do
|
|
90
|
-
expect(subject.index(:c)).to eq(2)
|
|
91
|
-
expect(subject.index("c")).to eq(2)
|
|
92
|
-
subject.array = ["a", :b, :c]
|
|
93
|
-
expect(subject.index("c")).to eq(2)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
context "when array value is Hash" do
|
|
97
|
-
it "compares by hash first key casted to string" do
|
|
98
|
-
expect(subject.index(:items)).to eq(4)
|
|
99
|
-
expect(subject.index("items")).to eq(4)
|
|
100
|
-
|
|
101
|
-
subject.array = ["a", {"items" => "x"}]
|
|
102
|
-
expect(subject.index(:items)).to eq(1)
|
|
103
|
-
expect(subject.index("items")).to eq(1)
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
describe "#delete" do
|
|
109
|
-
before do
|
|
110
|
-
subject.array = [:a, :b, :c, :d, {items: "x"}]
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
it "deletes given values from array" do
|
|
114
|
-
expect{ subject.delete(["a", "b", "items"]) }.to change{ subject.array }.to([:c, :d])
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it "returns hash with mapped deleted values" do
|
|
118
|
-
expect(subject.delete(["a", "b", "items"])).to eq("a" => :a, "b" => :b, "items" => {items: "x"})
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|