releaf-permissions 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- metadata +5 -53
- data/spec/builders/releaf/permissions/page/header_builder_spec.rb +0 -86
- data/spec/builders/releaf/permissions/page/layout_builder_spec.rb +0 -60
- data/spec/builders/releaf/permissions/page/menu_builder_spec.rb +0 -112
- data/spec/builders/releaf/permissions/profile/form_builder_spec.rb +0 -18
- data/spec/builders/releaf/permissions/roles/form_builder_spec.rb +0 -56
- data/spec/builders/releaf/permissions/roles/table_builder_spec.rb +0 -41
- data/spec/builders/releaf/permissions/users/form_builder_spec.rb +0 -23
- data/spec/builders/releaf/permissions/users/table_builder_spec.rb +0 -21
- data/spec/controllers/permissions/profile_controller_spec.rb +0 -40
- data/spec/controllers/permissions/users_controller_spec.rb +0 -28
- data/spec/features/profile_updating_spec.rb +0 -35
- data/spec/features/roles_spec.rb +0 -64
- data/spec/features/users_spec.rb +0 -107
- data/spec/lib/access_control_spec.rb +0 -66
- data/spec/lib/releaf/permissions/configuration_spec.rb +0 -38
- data/spec/lib/releaf/permissions/controller_support_spec.rb +0 -76
- data/spec/lib/releaf/permissions/default_controller_resolver_spec.rb +0 -49
- data/spec/lib/releaf/permissions/layout_spec.rb +0 -10
- data/spec/lib/releaf/permissions/profile_spec.rb +0 -11
- data/spec/lib/releaf/permissions/roles_spec.rb +0 -10
- data/spec/lib/releaf/permissions/settings_manager_spec.rb +0 -38
- data/spec/lib/releaf/permissions/users_spec.rb +0 -17
- data/spec/models/permissions/role_spec.rb +0 -13
- data/spec/models/permissions/user_spec.rb +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0623a5fb8f65df7425de74395566b750377c68cce26064fd8c8fbade05091bb0
|
4
|
+
data.tar.gz: af7ac5e232ed0b859a051ad9700ff14bfcd61b84dc1b130516bd878b9325bc16
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e11770c7153bafa05e50aff973b092871574bcd24bdd060f52b161f44237806096a0162afbfcc0b399db85e40d5e1e37550e0a320b2f04c82bdf7d86e0529122
|
7
|
+
data.tar.gz: 903fc5b48075e3d1bc14b1cafdb843269ba8c6133143e70782a9da5d8b4c56bdddb7f48798d3863796065f7dc48f67a3826c62387cc1b49b6aceb5466b832542
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: releaf-permissions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CubeSystems
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: releaf-core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.0.
|
19
|
+
version: 2.0.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.0.
|
26
|
+
version: 2.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: devise
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,30 +74,6 @@ files:
|
|
74
74
|
- lib/releaf/permissions/roles.rb
|
75
75
|
- lib/releaf/permissions/settings_manager.rb
|
76
76
|
- lib/releaf/permissions/users.rb
|
77
|
-
- spec/builders/releaf/permissions/page/header_builder_spec.rb
|
78
|
-
- spec/builders/releaf/permissions/page/layout_builder_spec.rb
|
79
|
-
- spec/builders/releaf/permissions/page/menu_builder_spec.rb
|
80
|
-
- spec/builders/releaf/permissions/profile/form_builder_spec.rb
|
81
|
-
- spec/builders/releaf/permissions/roles/form_builder_spec.rb
|
82
|
-
- spec/builders/releaf/permissions/roles/table_builder_spec.rb
|
83
|
-
- spec/builders/releaf/permissions/users/form_builder_spec.rb
|
84
|
-
- spec/builders/releaf/permissions/users/table_builder_spec.rb
|
85
|
-
- spec/controllers/permissions/profile_controller_spec.rb
|
86
|
-
- spec/controllers/permissions/users_controller_spec.rb
|
87
|
-
- spec/features/profile_updating_spec.rb
|
88
|
-
- spec/features/roles_spec.rb
|
89
|
-
- spec/features/users_spec.rb
|
90
|
-
- spec/lib/access_control_spec.rb
|
91
|
-
- spec/lib/releaf/permissions/configuration_spec.rb
|
92
|
-
- spec/lib/releaf/permissions/controller_support_spec.rb
|
93
|
-
- spec/lib/releaf/permissions/default_controller_resolver_spec.rb
|
94
|
-
- spec/lib/releaf/permissions/layout_spec.rb
|
95
|
-
- spec/lib/releaf/permissions/profile_spec.rb
|
96
|
-
- spec/lib/releaf/permissions/roles_spec.rb
|
97
|
-
- spec/lib/releaf/permissions/settings_manager_spec.rb
|
98
|
-
- spec/lib/releaf/permissions/users_spec.rb
|
99
|
-
- spec/models/permissions/role_spec.rb
|
100
|
-
- spec/models/permissions/user_spec.rb
|
101
77
|
homepage: https://github.com/cubesystems/releaf
|
102
78
|
licenses:
|
103
79
|
- MIT
|
@@ -121,28 +97,4 @@ rubygems_version: 3.0.8
|
|
121
97
|
signing_key:
|
122
98
|
specification_version: 4
|
123
99
|
summary: Built-in admin and role support for releaf
|
124
|
-
test_files:
|
125
|
-
- spec/builders/releaf/permissions/page/menu_builder_spec.rb
|
126
|
-
- spec/builders/releaf/permissions/page/layout_builder_spec.rb
|
127
|
-
- spec/builders/releaf/permissions/page/header_builder_spec.rb
|
128
|
-
- spec/builders/releaf/permissions/roles/table_builder_spec.rb
|
129
|
-
- spec/builders/releaf/permissions/roles/form_builder_spec.rb
|
130
|
-
- spec/builders/releaf/permissions/profile/form_builder_spec.rb
|
131
|
-
- spec/builders/releaf/permissions/users/table_builder_spec.rb
|
132
|
-
- spec/builders/releaf/permissions/users/form_builder_spec.rb
|
133
|
-
- spec/features/roles_spec.rb
|
134
|
-
- spec/features/profile_updating_spec.rb
|
135
|
-
- spec/features/users_spec.rb
|
136
|
-
- spec/models/permissions/user_spec.rb
|
137
|
-
- spec/models/permissions/role_spec.rb
|
138
|
-
- spec/lib/releaf/permissions/settings_manager_spec.rb
|
139
|
-
- spec/lib/releaf/permissions/configuration_spec.rb
|
140
|
-
- spec/lib/releaf/permissions/roles_spec.rb
|
141
|
-
- spec/lib/releaf/permissions/layout_spec.rb
|
142
|
-
- spec/lib/releaf/permissions/controller_support_spec.rb
|
143
|
-
- spec/lib/releaf/permissions/profile_spec.rb
|
144
|
-
- spec/lib/releaf/permissions/users_spec.rb
|
145
|
-
- spec/lib/releaf/permissions/default_controller_resolver_spec.rb
|
146
|
-
- spec/lib/access_control_spec.rb
|
147
|
-
- spec/controllers/permissions/users_controller_spec.rb
|
148
|
-
- spec/controllers/permissions/profile_controller_spec.rb
|
100
|
+
test_files: []
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Page::HeaderBuilder, type: :class do
|
4
|
-
class PageHeaderBuilderTestHelper < ActionView::Base
|
5
|
-
include Rails.application.routes.url_helpers
|
6
|
-
include FontAwesome::Rails::IconHelper
|
7
|
-
|
8
|
-
def protect_against_forgery?
|
9
|
-
true
|
10
|
-
end
|
11
|
-
|
12
|
-
def form_authenticity_token(_)
|
13
|
-
"xxx"
|
14
|
-
end
|
15
|
-
|
16
|
-
def request_forgery_protection_token
|
17
|
-
"yyy"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
subject { described_class.new(template) }
|
22
|
-
let(:template){ PageHeaderBuilderTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
|
23
|
-
|
24
|
-
describe "#items" do
|
25
|
-
it "returns array of home link, profile block and logout form content" do
|
26
|
-
allow(subject).to receive(:home_link).and_return("a")
|
27
|
-
allow(subject).to receive(:profile_block).and_return("b")
|
28
|
-
allow(subject).to receive(:sign_out_form).and_return("c")
|
29
|
-
expect(subject.items).to eq(["a", "b", "c"])
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "#profile_path" do
|
34
|
-
it "returns profile edit url for defined profile controller" do
|
35
|
-
expect(subject.profile_path).to eq("/admin/profile")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#profile_block" do
|
40
|
-
it "returns profile block with content" do
|
41
|
-
allow(subject).to receive(:profile_user_name).and_return("neim")
|
42
|
-
allow(subject).to receive(:profile_path).and_return("url_b")
|
43
|
-
content = '<a class="button profile" href="url_b"><span class="name">neim</span></a>'
|
44
|
-
expect(subject.profile_block).to eq(content)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#user" do
|
49
|
-
it "returns permissions manager user" do
|
50
|
-
controller = Releaf::RootController.new
|
51
|
-
allow(subject).to receive(:controller).and_return(controller)
|
52
|
-
allow(controller).to receive(:user).and_return("x")
|
53
|
-
expect(subject.user).to eq("x")
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe "#profile_user_name" do
|
58
|
-
it "returns title for user instance" do
|
59
|
-
user = Releaf::Permissions::User.new(name: "a", surname: "b")
|
60
|
-
allow(subject).to receive(:user).and_return(user)
|
61
|
-
allow(subject).to receive(:resource_title).with(user).and_return("x t")
|
62
|
-
expect(subject.profile_user_name).to eq("x t")
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe "#sign_out_path" do
|
67
|
-
it "returns sign out url" do
|
68
|
-
expect(subject.sign_out_path).to eq("/admin/sign_out")
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "#sign_out_form" do
|
73
|
-
it "returns sign out form" do
|
74
|
-
allow(subject).to receive(:sign_out_path).and_return("url_a")
|
75
|
-
content = %Q[
|
76
|
-
<form class="sign-out" action="url_a" accept-charset="UTF-8" method="post">
|
77
|
-
<input type="hidden" name="_method" value="delete" />
|
78
|
-
<input type="hidden" name="yyy" value="xxx" />
|
79
|
-
<button class="button only-icon" type="submit" title="Sign out">
|
80
|
-
<i class="fa fa-power-off fa-icon-header"></i>
|
81
|
-
</button>
|
82
|
-
</form>]
|
83
|
-
expect(subject.sign_out_form).to match_html( content )
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Page::LayoutBuilder, type: :class do
|
4
|
-
class PermissionsLayoutBuilderView < ActionView::Base; end
|
5
|
-
|
6
|
-
let(:controller){ Releaf::RootController.new }
|
7
|
-
let(:template){ PermissionsLayoutBuilderView.new(ActionView::LookupContext.new(nil), {}, nil) }
|
8
|
-
subject { described_class.new(template) }
|
9
|
-
|
10
|
-
before do
|
11
|
-
allow(subject).to receive(:controller).and_return(controller)
|
12
|
-
end
|
13
|
-
|
14
|
-
it "inherits Releaf::Builders::Page::LayoutBuilder" do
|
15
|
-
expect(described_class.superclass).to eq(Releaf::Builders::Page::LayoutBuilder)
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "#header_builder" do
|
19
|
-
it "returns `Releaf::Permissions::Page::HeaderBuilder` class" do
|
20
|
-
expect(subject.header_builder).to eq(Releaf::Permissions::Page::HeaderBuilder)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "#menu_builder" do
|
25
|
-
it "returns `Releaf::Permissions::Page::MenuBuilder` class" do
|
26
|
-
expect(subject.menu_builder).to eq(Releaf::Permissions::Page::MenuBuilder)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "#body_content_blocks" do
|
31
|
-
before do
|
32
|
-
allow(subject).to receive(:header).and_return("_header")
|
33
|
-
allow(subject).to receive(:menu).and_return("_menu")
|
34
|
-
allow(subject).to receive(:notifications).and_return("_notifications")
|
35
|
-
allow(subject).to receive(:assets).and_return("_assets_")
|
36
|
-
end
|
37
|
-
|
38
|
-
context "when controller responds to `authorized?` and `authorized?` call return true" do
|
39
|
-
it "returns `super` content" do
|
40
|
-
allow(controller).to receive(:authorized?).and_return(true)
|
41
|
-
expect(subject.body_content_blocks{ "x" }).to eq(["_header", "_menu", "<main id=\"main\">x</main>",
|
42
|
-
"_notifications", "_assets_"])
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "when controller responds to `authorized?` and `authorized?` call return false" do
|
47
|
-
it "returns given block content" do
|
48
|
-
allow(controller).to receive(:authorized?).and_return(false)
|
49
|
-
expect(subject.body_content_blocks{ "x" }).to eq(["x"])
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
context "when controller does not responds to `authorized?`" do
|
54
|
-
it "returns given block content" do
|
55
|
-
allow(controller).to receive(:respond_to?).with(:authorized?).and_return(false)
|
56
|
-
expect(subject.body_content_blocks{ "x" }).to eq(["x"])
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,112 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Page::MenuBuilder, type: :class do
|
4
|
-
class MenuBuilderTestHelper < ActionView::Base
|
5
|
-
include FontAwesome::Rails::IconHelper
|
6
|
-
end
|
7
|
-
|
8
|
-
let(:user){ Releaf::Permissions::User.new }
|
9
|
-
let(:controller){ Releaf::ActionController.new }
|
10
|
-
let(:template){ MenuBuilderTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
|
11
|
-
let(:group_item){ Releaf::ControllerGroupDefinition.new(name: "x", items: []) }
|
12
|
-
let(:controller_item){ Releaf::ControllerDefinition.new(name: "y", controller: "_controller_") }
|
13
|
-
subject { described_class.new(template) }
|
14
|
-
|
15
|
-
before do
|
16
|
-
allow(template).to receive(:controller).and_return(controller)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "inherits `Releaf::Builders::Page::MenuBuilder`" do
|
20
|
-
expect(described_class.ancestors).to include(Releaf::Builders::Page::MenuBuilder)
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "#menu_item" do
|
24
|
-
before do
|
25
|
-
allow(subject).to receive(:item_attributes).and_return({})
|
26
|
-
allow(subject).to receive(:menu_item_group).and_return("_content_")
|
27
|
-
end
|
28
|
-
|
29
|
-
context "when item is permitted" do
|
30
|
-
it "returns parent method content" do
|
31
|
-
allow(subject).to receive(:menu_item_permitted?).with(group_item).and_return(true)
|
32
|
-
expect(subject.menu_item(group_item)).to eq("<li>_content_</li>")
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "when item is not permitted" do
|
37
|
-
it "returns nil" do
|
38
|
-
allow(subject).to receive(:menu_item_permitted?).with(group_item).and_return(false)
|
39
|
-
expect(subject.menu_item(group_item)).to be nil
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "#menu_item_permitted?" do
|
45
|
-
context "when item is instance of `Releaf::ControllerGroupDefinition`" do
|
46
|
-
before do
|
47
|
-
allow(group_item).to receive(:controllers).and_return([
|
48
|
-
Releaf::ControllerDefinition.new(name: "a1", controller: "c1"),
|
49
|
-
Releaf::ControllerDefinition.new(name: "a2", controller: "c2"),
|
50
|
-
Releaf::ControllerDefinition.new(name: "a3", controller: "c3"),
|
51
|
-
])
|
52
|
-
end
|
53
|
-
|
54
|
-
context "when any of group item controller is allowed" do
|
55
|
-
it "returns true" do
|
56
|
-
allow(subject).to receive(:controller_permitted?).with("c1").and_return(false)
|
57
|
-
allow(subject).to receive(:controller_permitted?).with("c2").and_return(true)
|
58
|
-
expect(subject).to_not receive(:controller_permitted?).with("c3")
|
59
|
-
expect(subject.menu_item_permitted?(group_item)).to be true
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "when none of group item controller is allowed" do
|
64
|
-
it "returns false" do
|
65
|
-
allow(subject).to receive(:controller_permitted?).with("c1").and_return(false)
|
66
|
-
allow(subject).to receive(:controller_permitted?).with("c2").and_return(false)
|
67
|
-
allow(subject).to receive(:controller_permitted?).with("c3").and_return(false)
|
68
|
-
expect(subject.menu_item_permitted?(group_item)).to be false
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context "when item is instance of `Releaf::ControllerDefinition`" do
|
74
|
-
context "when item controller is allowed" do
|
75
|
-
it "returns true" do
|
76
|
-
allow(subject).to receive(:controller_permitted?).with("_controller_").and_return(true)
|
77
|
-
expect(subject.menu_item_permitted?(controller_item)).to be true
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context "when item controller is not allowed" do
|
82
|
-
it "returns false" do
|
83
|
-
allow(subject).to receive(:controller_permitted?).with("_controller_").and_return(false)
|
84
|
-
expect(subject.menu_item_permitted?(controller_item)).to be false
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe "#controller_permitted?" do
|
91
|
-
it "returns access controller controller permission query result for given controller name" do
|
92
|
-
access_control = Releaf::Permissions::AccessControl.new(user: user)
|
93
|
-
allow(subject).to receive(:access_control).and_return(access_control)
|
94
|
-
allow(access_control).to receive(:controller_permitted?).with("kjasdasd").and_return("_true")
|
95
|
-
|
96
|
-
expect(subject.controller_permitted?("kjasdasd")).to eq("_true")
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe "#access_control" do
|
101
|
-
it "returns cached access control instance" do
|
102
|
-
allow(controller).to receive(:user).and_return("x")
|
103
|
-
access_control = Releaf::Permissions::AccessControl.new(user: user)
|
104
|
-
|
105
|
-
allow(Releaf.application.config.permissions.access_control).to receive(:new).with(user: "x").and_return(access_control)
|
106
|
-
expect(subject.access_control).to eq access_control
|
107
|
-
|
108
|
-
expect(Releaf.application.config.permissions.access_control).to_not receive(:new)
|
109
|
-
expect(subject.access_control).to eq access_control
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Profile::FormBuilder, type: :class do
|
4
|
-
class FormBuilderTestHelper < ActionView::Base; end
|
5
|
-
let(:template){ FormBuilderTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
|
6
|
-
let(:object){ Releaf::Permissions::User.new }
|
7
|
-
let(:subject){ described_class.new(:resource, object, template, {}) }
|
8
|
-
|
9
|
-
it "inherits Releaf::Permissions::Users::FormBuilder" do
|
10
|
-
expect(described_class.superclass).to eq(Releaf::Permissions::Users::FormBuilder)
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "#field_names" do
|
14
|
-
it "returns name, surname, locale, email, password and password_confirmation as field names array" do
|
15
|
-
expect(subject.field_names).to eq(%w(name surname locale email password password_confirmation))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Roles::FormBuilder, type: :class do
|
4
|
-
class FormBuilderTestHelper < ActionView::Base; end
|
5
|
-
let(:template){ FormBuilderTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
|
6
|
-
let(:object){ Releaf::Permissions::Role.new }
|
7
|
-
let(:subject){ described_class.new(:resource, object, template, {}) }
|
8
|
-
|
9
|
-
before do
|
10
|
-
allow(Releaf.application.config).to receive(:available_controllers)
|
11
|
-
.and_return(["releaf/content/nodes", "admin/chapters"])
|
12
|
-
|
13
|
-
definition_1 = Releaf::ControllerDefinition.new("xx")
|
14
|
-
allow(definition_1).to receive(:localized_name).and_return("controller 1")
|
15
|
-
allow(definition_1).to receive(:controller_name).and_return("admin/controller_1")
|
16
|
-
|
17
|
-
definition_2 = Releaf::ControllerDefinition.new("xx")
|
18
|
-
allow(definition_2).to receive(:localized_name).and_return("controller 2")
|
19
|
-
allow(definition_2).to receive(:controller_name).and_return("admin/controller_2")
|
20
|
-
|
21
|
-
allow(Releaf::ControllerDefinition).to receive(:for).with("releaf/content/nodes").and_return(definition_1)
|
22
|
-
allow(Releaf::ControllerDefinition).to receive(:for).with("admin/chapters").and_return(definition_2)
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#render_default_controller" do
|
26
|
-
it "pass localized controller options to releaf item field" do
|
27
|
-
translated_controllers = {
|
28
|
-
"controller 1" => "admin/controller_1",
|
29
|
-
"controller 2" => "admin/controller_2"
|
30
|
-
}
|
31
|
-
|
32
|
-
allow(subject).to receive(:releaf_item_field)
|
33
|
-
.with(:default_controller, options: {select_options: translated_controllers})
|
34
|
-
.and_return("x")
|
35
|
-
expect(subject.render_default_controller).to eq("x")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#render_permissions" do
|
40
|
-
it "returns associated set field" do
|
41
|
-
options = {association: {items: "x", field: :permission}}
|
42
|
-
allow(subject).to receive(:permission_items).and_return("x")
|
43
|
-
allow(subject).to receive(:releaf_associated_set_field).with(:permissions, options: options).and_return("y")
|
44
|
-
expect(subject.render_permissions).to eq("y")
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#permission_items" do
|
49
|
-
it "returns scoped and translated controller values" do
|
50
|
-
expect(subject.permission_items).to eq(
|
51
|
-
"controller.admin/controller_1" => "controller 1",
|
52
|
-
"controller.admin/controller_2" => "controller 2"
|
53
|
-
)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Roles::TableBuilder, type: :class do
|
4
|
-
class TableBuilderTestHelper < ActionView::Base; end
|
5
|
-
let(:template){ TableBuilderTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
|
6
|
-
let(:resource_class){ Releaf::Permissions::Role }
|
7
|
-
let(:subject){ described_class.new([], resource_class, template, {}) }
|
8
|
-
|
9
|
-
describe "#column_names" do
|
10
|
-
it "returns name and default_controller as column names array" do
|
11
|
-
expect(subject.column_names).to eq([:name, :default_controller])
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "#default_controller_content" do
|
16
|
-
context "when given resource default controller definition exists" do
|
17
|
-
it "returns localized controller name from definitioned followed by application name" do
|
18
|
-
definition = Releaf::ControllerDefinition.new("xx")
|
19
|
-
allow(definition).to receive(:localized_name).and_return("x")
|
20
|
-
allow(Releaf::ControllerDefinition).to receive(:for).with("contr").and_return(definition)
|
21
|
-
expect(subject.default_controller_content(resource_class.new(default_controller: "contr"))).to eq("x")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context "when given resource default controller definition does not exist" do
|
26
|
-
it "returns dash" do
|
27
|
-
definition = Releaf::ControllerDefinition.new("xx")
|
28
|
-
allow(definition).to receive(:localized_name).and_return("x")
|
29
|
-
allow(Releaf::ControllerDefinition).to receive(:for).with("contr").and_return(nil)
|
30
|
-
expect(subject.default_controller_content(resource_class.new(default_controller: "contr"))).to eq("-")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
context "when default controller is not defined for given resource" do
|
35
|
-
it "returns dash" do
|
36
|
-
expect(Releaf::ControllerDefinition).to_not receive(:for)
|
37
|
-
expect(subject.default_controller_content(resource_class.new)).to eq("-")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Users::FormBuilder, type: :class do
|
4
|
-
class FormBuilderTestHelper < ActionView::Base; end
|
5
|
-
let(:template){ FormBuilderTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
|
6
|
-
let(:object){ Releaf::Permissions::Role.new }
|
7
|
-
let(:subject){ described_class.new(:resource, object, template, {}) }
|
8
|
-
|
9
|
-
describe "#field_names" do
|
10
|
-
it "returns name, surname, locale, role_id, email, password and password_confirmation as field names array" do
|
11
|
-
expect(subject.field_names).to eq(%w(name surname locale role_id email password password_confirmation))
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "#render_locale" do
|
16
|
-
it "pass localized controller options to releaf item field" do
|
17
|
-
allow(Releaf.application.config).to receive(:available_admin_locales).and_return(["de", "ze"])
|
18
|
-
allow(subject).to receive(:locale_options).with(["de", "ze"]).and_return(["xx", "yy"])
|
19
|
-
allow(subject).to receive(:releaf_item_field).with(:locale, options: {select_options: ["xx", "yy"]}).and_return("x")
|
20
|
-
expect(subject.render_locale).to eq("x")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Users::TableBuilder, type: :class do
|
4
|
-
class TableBuilderTestHelper < ActionView::Base; end
|
5
|
-
let(:template){ TableBuilderTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
|
6
|
-
let(:resource_class){ Releaf::Permissions::User }
|
7
|
-
let(:subject){ described_class.new([], resource_class, template, {}) }
|
8
|
-
|
9
|
-
describe "#column_names" do
|
10
|
-
it "returns name, surname, role, email and locale as column names array" do
|
11
|
-
expect(subject.column_names).to eq([:name, :surname, :role, :email, :locale])
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "#locale_content" do
|
16
|
-
it "returns translated locale" do
|
17
|
-
allow(subject).to receive(:translate_locale).with("de").and_return("deutch")
|
18
|
-
expect(subject.locale_content(resource_class.new(locale: "de"))).to eq("deutch")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
describe Releaf::Permissions::ProfileController do
|
4
|
-
let(:another_role){ FactoryBot.create(:content_role) }
|
5
|
-
let(:user){ subject.current_releaf_permissions_user }
|
6
|
-
login_as_user :user
|
7
|
-
|
8
|
-
describe "#resource_class" do
|
9
|
-
it "returns current releaf user user class" do
|
10
|
-
expect(described_class.new.resource_class).to eq(Releaf::Permissions::User)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "PATCH update" do
|
15
|
-
context 'when attributes contain role_id' do
|
16
|
-
it "does not update it" do
|
17
|
-
expect{ patch :update, params: {resource: {role_id: another_role.id}} }.to_not change{ user.role_id }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context 'with allowed attributes' do
|
22
|
-
it "saves new attributes" do
|
23
|
-
attributes = ActionController::Parameters.new({
|
24
|
-
"name" => "new name",
|
25
|
-
"surname" => "new surname",
|
26
|
-
"email" => "new.email@example.com",
|
27
|
-
"locale" => "lv"
|
28
|
-
})
|
29
|
-
attributes.permit!
|
30
|
-
|
31
|
-
# This is needed in order to get same instance as we expect.
|
32
|
-
# Otherwise we'll get same record, but different instance and test will fail
|
33
|
-
allow( user ).to receive(:becomes).with(Releaf::Permissions::User).and_return(user)
|
34
|
-
|
35
|
-
expect(user).to receive(:update).with(attributes)
|
36
|
-
patch :update, params: {resource: attributes}
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
# use Admin::BooksController as it inherit Releaf::ActionController and
|
4
|
-
# have no extra methods or overrides
|
5
|
-
describe Releaf::Permissions::UsersController do
|
6
|
-
before do
|
7
|
-
sign_in FactoryBot.create(:user)
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "GET #new" do
|
11
|
-
it "assigns default role" do
|
12
|
-
get :new
|
13
|
-
expect(assigns(:resource).role).to eq(Releaf::Permissions::Role.first)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "GET #index" do
|
18
|
-
before do
|
19
|
-
FactoryBot.create(:content_user, name: "John")
|
20
|
-
FactoryBot.create(:content_user, name: "Bill", surname: "Green", email: "another@example.com")
|
21
|
-
end
|
22
|
-
|
23
|
-
it "searches by name, surname and email" do
|
24
|
-
get :index, params: {search: "bill green another@example"}
|
25
|
-
expect(assigns(:collection).count).to eq(1)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
feature "User profile" do
|
3
|
-
background do
|
4
|
-
auth_as_user(false, FactoryBot.create(:user, email: "email@example.com"))
|
5
|
-
visit releaf_permissions_user_profile_path
|
6
|
-
end
|
7
|
-
|
8
|
-
scenario "name, surname and locale" do
|
9
|
-
fill_in 'Name', with: "Edward"
|
10
|
-
fill_in 'Surname', with: "Bat"
|
11
|
-
select "Lv", from: "Locale"
|
12
|
-
click_button 'Save'
|
13
|
-
|
14
|
-
expect(page).to have_css('header .profile .name', text: "Edward Bat")
|
15
|
-
end
|
16
|
-
|
17
|
-
scenario "password and email" do
|
18
|
-
# update
|
19
|
-
fill_in 'Email', with: "new.email@example.com"
|
20
|
-
fill_in 'Password', with: "newpassword123", match: :prefer_exact
|
21
|
-
fill_in 'Password confirmation', with: "newpassword123", match: :prefer_exact
|
22
|
-
click_button 'Save'
|
23
|
-
|
24
|
-
# logout
|
25
|
-
find('body > header form.sign-out button').click
|
26
|
-
|
27
|
-
# login
|
28
|
-
visit releaf_root_path
|
29
|
-
fill_in 'Email', with: "new.email@example.com"
|
30
|
-
fill_in 'Password', with: "newpassword123"
|
31
|
-
click_button 'Sign in'
|
32
|
-
|
33
|
-
expect(page).to have_css('.sign-out')
|
34
|
-
end
|
35
|
-
end
|
data/spec/features/roles_spec.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
feature "Roles management", js: true do
|
3
|
-
background do
|
4
|
-
auth_as_user
|
5
|
-
@role = Releaf::Permissions::Role.first
|
6
|
-
end
|
7
|
-
|
8
|
-
scenario "Role search", focus: true do
|
9
|
-
create(:admin_role, name: 'super role')
|
10
|
-
visit releaf_permissions_roles_path
|
11
|
-
expect(page).to have_content @role.name
|
12
|
-
expect(page).to have_content 'super role'
|
13
|
-
search "super"
|
14
|
-
expect(page).to have_no_content @role.name
|
15
|
-
expect(page).to have_content 'super role'
|
16
|
-
end
|
17
|
-
|
18
|
-
scenario "User creates a new role" do
|
19
|
-
visit releaf_permissions_roles_path
|
20
|
-
create_resource do
|
21
|
-
fill_in("Name", with: "second role")
|
22
|
-
select('Admin/nodes', from: 'Default controller')
|
23
|
-
end
|
24
|
-
visit releaf_permissions_roles_path
|
25
|
-
expect(page).to have_content "second role"
|
26
|
-
end
|
27
|
-
|
28
|
-
scenario "User updates an existing role" do
|
29
|
-
visit releaf_permissions_roles_path
|
30
|
-
click_link @role.name
|
31
|
-
update_resource do
|
32
|
-
fill_in("Name", with: "new name")
|
33
|
-
end
|
34
|
-
|
35
|
-
visit releaf_permissions_roles_path
|
36
|
-
expect(page).to have_content "new name"
|
37
|
-
end
|
38
|
-
|
39
|
-
scenario "User changes the default controller of a role" do
|
40
|
-
visit releaf_permissions_roles_path
|
41
|
-
click_link @role.name
|
42
|
-
update_resource do
|
43
|
-
select('Admin/books', from: 'Default controller')
|
44
|
-
end
|
45
|
-
|
46
|
-
expect(page).to have_select('Default controller', selected: 'Admin/books')
|
47
|
-
end
|
48
|
-
|
49
|
-
scenario "User changes permissions of a role controller" do
|
50
|
-
visit releaf_permissions_roles_path
|
51
|
-
click_link @role.name
|
52
|
-
update_resource do
|
53
|
-
uncheck('Admin/books')
|
54
|
-
end
|
55
|
-
|
56
|
-
Releaf.application.config.available_controllers.each do |controller|
|
57
|
-
if controller == "admin/books"
|
58
|
-
expect(page).to have_unchecked_field(I18n.t(controller))
|
59
|
-
else
|
60
|
-
expect(page).to have_checked_field(I18n.t(controller))
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
data/spec/features/users_spec.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
feature "Users", js: true do
|
3
|
-
let!(:user){ create(:user, email: "admin@example.com") }
|
4
|
-
let!(:simple_user){ create(:content_user, email: "simple@example.com") }
|
5
|
-
|
6
|
-
describe "users CRUD" do
|
7
|
-
background do
|
8
|
-
visit "/admin"
|
9
|
-
within("form.login") do
|
10
|
-
fill_in 'Email', with: user.email
|
11
|
-
fill_in 'Password', with: user.password
|
12
|
-
end
|
13
|
-
click_button 'Sign in'
|
14
|
-
expect(page).to have_css('body > header form.sign-out button')
|
15
|
-
end
|
16
|
-
|
17
|
-
scenario "new user creation", js: true do
|
18
|
-
visit releaf_permissions_users_path
|
19
|
-
create_resource do
|
20
|
-
fill_in 'Name', with: "John"
|
21
|
-
fill_in 'Surname', with: "Appleseed"
|
22
|
-
fill_in 'Email', with: "john@example.com"
|
23
|
-
fill_in 'Password', with: "password", match: :prefer_exact
|
24
|
-
fill_in 'Password confirmation', with: "password", match: :prefer_exact
|
25
|
-
|
26
|
-
expect(page).to have_select('Locale', options: ["", "En", "Lv"])
|
27
|
-
select 'En', from: 'Locale'
|
28
|
-
end
|
29
|
-
|
30
|
-
expect(page).to have_content 'John Appleseed'
|
31
|
-
visit '/admin/users'
|
32
|
-
expect(page).to have_content 'john@example.com'
|
33
|
-
|
34
|
-
visit (releaf_permissions_users_path)
|
35
|
-
open_toolbox_dialog("Delete", Releaf::Permissions::User.last)
|
36
|
-
click_button 'Yes'
|
37
|
-
expect(page).not_to have_content 'john@example.com'
|
38
|
-
end
|
39
|
-
|
40
|
-
scenario "user search" do
|
41
|
-
visit '/admin/users'
|
42
|
-
expect(page).to have_content 'simple@example.com'
|
43
|
-
search "admin@example.com"
|
44
|
-
expect(page).not_to have_content 'simple@example.com'
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "login as user procedure" do
|
49
|
-
background do
|
50
|
-
visit "/admin"
|
51
|
-
within("form.login") do
|
52
|
-
fill_in 'Email', with: user.email
|
53
|
-
fill_in 'Password', with: user.password
|
54
|
-
end
|
55
|
-
click_button 'Sign in'
|
56
|
-
end
|
57
|
-
|
58
|
-
scenario "user page content" do
|
59
|
-
expect(page).to have_css('body > header form.sign-out button')
|
60
|
-
expect(page).to have_content 'Admin/nodes'
|
61
|
-
expect(page).to have_content 'Permissions'
|
62
|
-
expect(page).to have_content 'Releaf/i18n database/translations'
|
63
|
-
# admin/users index view
|
64
|
-
expect(page).to have_content 'admin@example.com'
|
65
|
-
expect(page).to have_content 'simple@example.com'
|
66
|
-
end
|
67
|
-
|
68
|
-
scenario "logout sequence" do
|
69
|
-
find('body > header form.sign-out button').click
|
70
|
-
|
71
|
-
expect(page).to have_content 'Welcome to Releaf'
|
72
|
-
|
73
|
-
visit "/admin"
|
74
|
-
expect(page).to have_content 'Sign in'
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe "login as simple user procedure" do
|
79
|
-
background do
|
80
|
-
visit "/admin"
|
81
|
-
within("form.login") do
|
82
|
-
fill_in 'Email', with: simple_user.email
|
83
|
-
fill_in 'Password', with: simple_user.password
|
84
|
-
end
|
85
|
-
click_button 'Sign in'
|
86
|
-
end
|
87
|
-
|
88
|
-
scenario "user page content" do
|
89
|
-
expect(page).to have_css('body > header form.sign-out button')
|
90
|
-
expect(page).to have_content 'Admin/nodes'
|
91
|
-
end
|
92
|
-
|
93
|
-
scenario "translations module access denied" do
|
94
|
-
visit "/admin/translations"
|
95
|
-
expect(page).to have_content 'You are not authorized to access translations'
|
96
|
-
end
|
97
|
-
|
98
|
-
scenario "logout sequence" do
|
99
|
-
find('body > header form.sign-out button').click
|
100
|
-
|
101
|
-
expect(page).to have_content 'Welcome to Releaf'
|
102
|
-
|
103
|
-
visit "/admin"
|
104
|
-
expect(page).to have_content 'Sign in'
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::AccessControl do
|
4
|
-
let(:role){ Releaf::Permissions::Role.new }
|
5
|
-
let(:user){ Releaf::Permissions::User.new(role: role) }
|
6
|
-
subject{ described_class.new(user: user) }
|
7
|
-
|
8
|
-
|
9
|
-
describe "#controller_permitted?" do
|
10
|
-
context "when allowed controllers contains given controller" do
|
11
|
-
it "returns true" do
|
12
|
-
allow(subject).to receive(:allowed_controllers).and_return(["a", "b"])
|
13
|
-
expect(subject.controller_permitted?("a")).to be true
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "when allowed controllers does not contain given controller" do
|
18
|
-
it "returns false" do
|
19
|
-
allow(subject).to receive(:allowed_controllers).and_return(["c", "b"])
|
20
|
-
expect(subject.controller_permitted?("a")).to be false
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#allowed_controllers" do
|
26
|
-
it "returns array with permanent allowed controllers and role allowed controllers" do
|
27
|
-
allow(subject).to receive(:permanent_allowed_controllers).and_return(["a", "b"])
|
28
|
-
allow(subject).to receive(:role_allowed_controllers).and_return(["c", "d"])
|
29
|
-
expect(subject.allowed_controllers).to eq(%w(a b c d))
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "#permanent_allowed_controllers" do
|
34
|
-
it "returns array with permanent allowed controllers" do
|
35
|
-
allow(Releaf.application.config.permissions).to receive(:permanent_allowed_controllers).and_return("x")
|
36
|
-
expect(subject.permanent_allowed_controllers).to eq("x")
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#role_allowed_controllers" do
|
41
|
-
it "returns array of roles allowed controllers" do
|
42
|
-
role.permissions.build(permission: "controller.a")
|
43
|
-
role.permissions.build(permission: "controller.x")
|
44
|
-
role.permissions.build(permission: "export.some_data")
|
45
|
-
allow(subject).to receive(:controller_name_from_permission).with("controller.a").and_return(nil)
|
46
|
-
allow(subject).to receive(:controller_name_from_permission).with("controller.x").and_return("asd")
|
47
|
-
allow(subject).to receive(:controller_name_from_permission).with("export.some_data").and_return("fd")
|
48
|
-
|
49
|
-
expect(subject.role_allowed_controllers).to match_array(["asd", "fd"])
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "#controller_name_from_permission" do
|
54
|
-
context "when given permission contains `controller`" do
|
55
|
-
it "returns name" do
|
56
|
-
expect(subject.controller_name_from_permission("controller.a")).to eq("a")
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context "when given permission does not contain `controller`" do
|
61
|
-
it "returns nil" do
|
62
|
-
expect(subject.controller_name_from_permission("aasd.a")).to be nil
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Configuration do
|
4
|
-
subject{ described_class.new(devise_for: "asd", access_control: "X", permanent_allowed_controllers: [1, 2]) }
|
5
|
-
|
6
|
-
it do
|
7
|
-
is_expected.to have_attributes(devise_for: "asd")
|
8
|
-
is_expected.to have_attributes(access_control: "X")
|
9
|
-
is_expected.to have_attributes(permanent_allowed_controllers: [1, 2])
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "#devise_model_name" do
|
13
|
-
it "returns devise model name with slashes replaced by underscores" do
|
14
|
-
subject.devise_for = "releaf/permissions/user"
|
15
|
-
expect(subject.devise_model_name).to eq("releaf_permissions_user")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "#devise_model_class" do
|
20
|
-
it "returns devise model class" do
|
21
|
-
subject.devise_for = "releaf/permissions/role"
|
22
|
-
expect(subject.devise_model_class).to eq(Releaf::Permissions::Role)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe ".configure_component" do
|
27
|
-
it "adds `Releaf::Permissions::Configuration` configuration with devise, access_control and permanent allowed controllers configured" do
|
28
|
-
allow(Releaf::Permissions::Configuration).to receive(:new)
|
29
|
-
.with(
|
30
|
-
devise_for: "releaf/permissions/user",
|
31
|
-
access_control: Releaf::Permissions::AccessControl,
|
32
|
-
permanent_allowed_controllers: ["releaf/root"]
|
33
|
-
).and_return("_new")
|
34
|
-
expect(Releaf.application.config).to receive(:add_configuration).with("_new")
|
35
|
-
described_class.configure_component
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::ControllerSupport do
|
4
|
-
let(:user){ Releaf::Permissions::User.new(locale: "de") }
|
5
|
-
|
6
|
-
class AcessControllDummyController < Releaf::ActionController
|
7
|
-
include Releaf::Permissions::ControllerSupport
|
8
|
-
end
|
9
|
-
|
10
|
-
subject{ AcessControllDummyController.new }
|
11
|
-
|
12
|
-
before do
|
13
|
-
allow(subject).to receive(:current_releaf_permissions_user).and_return(user)
|
14
|
-
end
|
15
|
-
|
16
|
-
describe "before filters" do
|
17
|
-
it "prepends `:authenticate!, :verify_controller_access!, :set_locale` before filters" do
|
18
|
-
all_before_actions = subject._process_action_callbacks.select{|f| f.kind == :before}.map{|f| f.filter }
|
19
|
-
expect(all_before_actions).to start_with(:authenticate!, :verify_controller_access!, :set_locale)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "#set_locale" do
|
24
|
-
it "assigns user locale to I18n locale" do
|
25
|
-
expect(I18n).to receive(:locale=).with("de")
|
26
|
-
subject.set_locale
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "#verify_controller_access!" do
|
31
|
-
let(:access_control){ Releaf::Permissions::AccessControl.new(user: user) }
|
32
|
-
|
33
|
-
before do
|
34
|
-
allow(subject).to receive(:short_name).and_return("some_controller")
|
35
|
-
allow(Releaf.application.config.permissions.access_control).to receive(:new)
|
36
|
-
.with(user: user).and_return(access_control)
|
37
|
-
end
|
38
|
-
|
39
|
-
context "when controller is not permitted" do
|
40
|
-
it "raises `Releaf::AccessDenied exception`" do
|
41
|
-
allow(access_control).to receive(:controller_permitted?).with("some_controller").and_return(false)
|
42
|
-
expect{ subject.verify_controller_access! }.to raise_error(Releaf::AccessDenied)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "when controller is permitted" do
|
47
|
-
it "does not raise `Releaf::AccessDenied exception`" do
|
48
|
-
allow(access_control).to receive(:controller_permitted?).with("some_controller").and_return(true)
|
49
|
-
expect{ subject.verify_controller_access! }.to_not raise_error
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "#user" do
|
55
|
-
it "returns current controller devise user instance" do
|
56
|
-
expect(subject.user).to eq(user)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "#authorized?" do
|
61
|
-
it "returns whether devise has signed in current user" do
|
62
|
-
allow(subject).to receive(:releaf_permissions_user_signed_in?).and_return(true)
|
63
|
-
expect(subject.authorized?).to be true
|
64
|
-
|
65
|
-
allow(subject).to receive(:releaf_permissions_user_signed_in?).and_return(false)
|
66
|
-
expect(subject.authorized?).to be false
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "#authenticate!" do
|
71
|
-
it "returns whether devise has signed in current user" do
|
72
|
-
expect(subject).to receive(:authenticate_releaf_permissions_user!)
|
73
|
-
subject.authenticate!
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::DefaultControllerResolver do
|
4
|
-
subject{ described_class.new(current_controller: Releaf::RootController.new) }
|
5
|
-
|
6
|
-
it "inherit `Releaf::Root::DefaultControllerResolver`" do
|
7
|
-
expect(described_class.ancestors.include?(Releaf::Root::DefaultControllerResolver)).to be true
|
8
|
-
end
|
9
|
-
|
10
|
-
describe ".configure_component" do
|
11
|
-
it "adds itself as default controller resolver" do
|
12
|
-
expect(Releaf.application.config.root).to receive(:default_controller_resolver=).with(described_class)
|
13
|
-
described_class.configure_component
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#controllers" do
|
18
|
-
it "returns user available controllers with role default controller as first" do
|
19
|
-
role = Releaf::Permissions::Role.new(default_controller: "a")
|
20
|
-
user = Releaf::Permissions::User.new(role: role)
|
21
|
-
allow(Releaf.application.config).to receive(:available_controllers).and_return(["a", "b", "c"])
|
22
|
-
allow(subject).to receive(:user).and_return(user)
|
23
|
-
|
24
|
-
allow(subject).to receive(:allowed_controllers).and_return(["a", "c", "d"])
|
25
|
-
expect(subject.controllers).to eq(["a", "c"])
|
26
|
-
|
27
|
-
allow(subject).to receive(:allowed_controllers).and_return(["c", "d"])
|
28
|
-
expect(subject.controllers).to eq(["c"])
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe "#allowed_controllers" do
|
33
|
-
it "returns allowed controllers from access contro for given user" do
|
34
|
-
allow(subject).to receive(:user).and_return("_user")
|
35
|
-
access_control = Releaf::Permissions::AccessControl.new(user: Releaf::Permissions::User.new)
|
36
|
-
allow(access_control).to receive(:allowed_controllers).and_return(["a", "d"])
|
37
|
-
allow(Releaf.application.config.permissions.access_control).to receive(:new).with(user: "_user").and_return(access_control)
|
38
|
-
|
39
|
-
expect(subject.allowed_controllers).to eq(["a", "d"])
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "#user" do
|
44
|
-
it "returns controller user" do
|
45
|
-
allow(subject.current_controller).to receive(:user).and_return("_user")
|
46
|
-
expect(subject.user).to eq("_user")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Layout do
|
4
|
-
describe ".configure_component" do
|
5
|
-
it "changes layout_builder_class_name to `Releaf::Permissions::Page::LayoutBuilder`" do
|
6
|
-
expect(Releaf.application.config).to receive(:layout_builder_class_name=).with("Releaf::Permissions::Page::LayoutBuilder")
|
7
|
-
described_class.configure_component
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Profile do
|
4
|
-
describe ".configure_component" do
|
5
|
-
it "adds `releaf/permissions/profile` to additional controllers" do
|
6
|
-
expect(Releaf.application.config).to receive(:additional_controllers).and_return(["a", "b"])
|
7
|
-
expect(Releaf.application.config).to receive(:additional_controllers=).with(["a", "b", "releaf/permissions/profile"])
|
8
|
-
described_class.configure_component
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Roles do
|
4
|
-
describe ".draw_component_routes" do
|
5
|
-
it "register roles resource route" do
|
6
|
-
expect(described_class).to receive(:resource_route).with("_router", :permissions, :roles)
|
7
|
-
described_class.draw_component_routes("_router")
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::SettingsManager do
|
4
|
-
let(:controller){ Releaf::RootController.new }
|
5
|
-
let(:user){ Releaf::Permissions::User.new }
|
6
|
-
|
7
|
-
before do
|
8
|
-
allow(user.settings).to receive(:[]).with("asd.a").and_return("lalal")
|
9
|
-
allow(controller).to receive(:user).and_return(user)
|
10
|
-
end
|
11
|
-
|
12
|
-
describe ".configure_component" do
|
13
|
-
it "registers itself as settings manager" do
|
14
|
-
expect(Releaf.application.config).to receive(:settings_manager=).and_return(described_class)
|
15
|
-
described_class.configure_component
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe ".read" do
|
20
|
-
it "returns user settings for given key" do
|
21
|
-
expect(described_class.read(controller: controller, key: "asd.a")).to eq("lalal")
|
22
|
-
end
|
23
|
-
|
24
|
-
context "when controller has no user method" do
|
25
|
-
it "returns nil" do
|
26
|
-
allow(controller).to receive(:respond_to?).with(:user).and_return(false)
|
27
|
-
expect(described_class.read(controller: controller, key: "asd.a")).to be nil
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe ".write" do
|
33
|
-
it "writes user settings for given key and value" do
|
34
|
-
expect(user.settings).to receive(:[]=).with("asd.a", "op")
|
35
|
-
described_class.write(controller: controller, key: "asd.a", value: "op")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Users do
|
4
|
-
describe ".configure_component" do
|
5
|
-
it "sets `releaf/permissions/user` as devise model" do
|
6
|
-
expect(Releaf.application.config.permissions).to receive(:devise_for=).with("releaf/permissions/user")
|
7
|
-
described_class.configure_component
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe ".draw_component_routes" do
|
12
|
-
it "register users resource route" do
|
13
|
-
expect(described_class).to receive(:resource_route).with("_router", :permissions, :users)
|
14
|
-
described_class.draw_component_routes("_router")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::Role do
|
4
|
-
describe 'validations' do
|
5
|
-
it { is_expected.to validate_presence_of(:name) }
|
6
|
-
it { is_expected.to validate_presence_of(:default_controller) }
|
7
|
-
it { subject.name = "x"; is_expected.to validate_uniqueness_of(:name).case_insensitive }
|
8
|
-
end
|
9
|
-
|
10
|
-
describe 'associations' do
|
11
|
-
it { is_expected.to have_many(:users).dependent(:restrict_with_exception) }
|
12
|
-
end
|
13
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Releaf::Permissions::User do
|
4
|
-
describe 'validations' do
|
5
|
-
it { is_expected.to validate_presence_of(:name) }
|
6
|
-
it { is_expected.to validate_presence_of(:surname) }
|
7
|
-
it { is_expected.to validate_presence_of(:role) }
|
8
|
-
it { is_expected.to validate_presence_of(:locale) }
|
9
|
-
it { is_expected.to validate_presence_of(:email) }
|
10
|
-
it { create(:user); is_expected.to validate_uniqueness_of(:email).case_insensitive }
|
11
|
-
end
|
12
|
-
|
13
|
-
describe 'associations' do
|
14
|
-
it { is_expected.to belong_to(:role) }
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#releaf_title" do
|
18
|
-
it "returns concated name and surname" do
|
19
|
-
subject.name = "John"
|
20
|
-
subject.surname = "Baum"
|
21
|
-
expect(subject.releaf_title).to eq("John Baum")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#password_required?" do
|
26
|
-
context "when existing record" do
|
27
|
-
before do
|
28
|
-
allow(subject).to receive(:new_record?).and_return(false)
|
29
|
-
end
|
30
|
-
|
31
|
-
context "when new password is blank" do
|
32
|
-
it "returns true" do
|
33
|
-
allow(subject).to receive(:encrypted_password).and_return("")
|
34
|
-
expect(subject.password_required?).to be true
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "when new password is not blank" do
|
39
|
-
it "returns false" do
|
40
|
-
allow(subject).to receive(:encrypted_password).and_return("asdasd")
|
41
|
-
expect(subject.password_required?).to be false
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "when new record" do
|
47
|
-
it "returns true" do
|
48
|
-
allow(subject).to receive(:new_record?).and_return(true)
|
49
|
-
expect(subject.password_required?).to be true
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|