decidim-department_admin 0.7.2 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/decorators/decidim/admin/newsletters_controller_decorator.rb +1 -1
- data/app/decorators/decidim/admin/users_controller_decorator.rb +1 -1
- data/app/decorators/decidim/area_decorator.rb +2 -2
- data/app/decorators/decidim/assemblies/admin/assemblies_controller_decorator.rb +1 -1
- data/app/decorators/decidim/assemblies/admin/assemblies_helper_decorator.rb +1 -1
- data/app/decorators/decidim/assemblies/create_assembly_decorator.rb +1 -1
- data/app/decorators/decidim/assemblies/parent_assemblies_for_select_decorator.rb +1 -1
- data/app/decorators/decidim/assemblies/permissions_decorator.rb +1 -1
- data/app/decorators/decidim/assemblies/update_assembly_decorator.rb +1 -1
- data/app/decorators/decidim/assemblies_decorator.rb +1 -1
- data/app/decorators/decidim/assemblies_with_user_role_decorator.rb +1 -1
- data/app/decorators/decidim/conference_form_decorator.rb +1 -1
- data/app/decorators/decidim/conferences/admin/conferences_controller_decorator.rb +1 -1
- data/app/decorators/decidim/conferences/create_conference_decorator.rb +2 -1
- data/app/decorators/decidim/conferences/permissions_decorator.rb +1 -1
- data/app/decorators/decidim/conferences/update_conference_decorator.rb +1 -1
- data/app/decorators/decidim/conferences_decorator.rb +1 -1
- data/app/decorators/decidim/conferences_with_user_role_decorator.rb +1 -1
- data/app/decorators/decidim/decidim_form_helper_decorator.rb +1 -1
- data/app/decorators/decidim/invite_user_decorator.rb +1 -1
- data/app/decorators/decidim/invite_user_form_decorator.rb +1 -1
- data/app/decorators/decidim/newsletter_decorator.rb +1 -1
- data/app/decorators/decidim/newsletters_helper_decorator.rb +1 -1
- data/app/decorators/decidim/participatory_process_decorator.rb +1 -1
- data/app/decorators/decidim/participatory_process_group_decorator.rb +1 -1
- data/app/decorators/decidim/participatory_processes/admin/participatory_processes_controller_decorator.rb +1 -1
- data/app/decorators/decidim/participatory_processes/create_participatory_process_decorator.rb +1 -1
- data/app/decorators/decidim/participatory_processes/permissions_decorator.rb +1 -1
- data/app/decorators/decidim/participatory_processes/update_participatory_process_decorator.rb +1 -1
- data/app/decorators/decidim/participatory_processes_with_user_role_decorator.rb +1 -1
- data/app/decorators/decidim/user_decorator.rb +8 -8
- data/app/decorators/lib/decidim/participatory_space_resourceable_decorator.rb +3 -3
- data/app/helpers/decidim/department_admin/application_helper.rb +1 -1
- data/app/packs/stylesheets/decidim/admin/department_admin.scss +2 -0
- data/app/views/decidim/admin/users/_filters.html.erb +30 -26
- data/app/views/decidim/admin/users/_form.html.erb +21 -15
- data/app/views/decidim/admin/users/index.html.erb +77 -79
- data/app/views/decidim/admin/users/show.html.erb +9 -10
- data/app/views/decidim/assemblies/admin/assemblies/index.html.erb +130 -138
- data/app/views/decidim/conferences/admin/conferences/_form.html.erb +33 -26
- data/app/views/decidim/conferences/admin/conferences/index.html.erb +73 -80
- data/app/views/decidim/participatory_processes/admin/participatory_processes/index.html.erb +108 -151
- data/lib/decidim/department_admin/version.rb +1 -1
- metadata +15 -55
- data/spec/commands/decidim/admin/deliver_newsletter_spec.rb +0 -175
- data/spec/commands/decidim/invite_user_spec.rb +0 -42
- data/spec/controllers/decidim/admin/users_controller_spec.rb +0 -119
- data/spec/factories.rb +0 -4
- data/spec/features/check_overrides_spec.rb +0 -11
- data/spec/i18n_spec.rb +0 -29
- data/spec/models/decidim/area_spec.rb +0 -23
- data/spec/permissions/decidim/department_admin/department_admin_permissions_spec.rb +0 -120
- data/spec/queries/parent_assemblies_for_select_spec.rb +0 -52
- data/spec/spec_helper.rb +0 -47
- data/spec/system/admin_explores_processes_spec.rb +0 -53
- data/spec/system/admin_invite_department_admin_spec.rb +0 -118
- data/spec/system/department_admin_manages_newsletters_spec.rb +0 -237
- data/spec/system/department_admin_should_be_able_to_access_admin_dashboard_spec.rb +0 -75
- data/spec/system/department_admin_should_be_able_to_manage_assemblies_spec.rb +0 -99
- data/spec/system/department_admin_should_be_able_to_manage_conferences_spec.rb +0 -74
- data/spec/system/department_admin_should_be_able_to_manage_processes_spec.rb +0 -117
- data/spec/system/department_admin_should_be_able_to_see_only_assemblies_from_her_area_spec.rb +0 -46
- data/spec/system/department_admin_should_be_able_to_see_only_newsletters_from_her_area_spec.rb +0 -53
- data/spec/system/department_admin_should_be_able_to_see_only_processes_from_her_area_spec.rb +0 -50
@@ -1,119 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
module Decidim::Admin
|
6
|
-
describe UsersController, type: :controller do
|
7
|
-
# routes { Decidim::Core::Engine.routes }
|
8
|
-
routes { Decidim::Admin::Engine.routes }
|
9
|
-
|
10
|
-
let!(:admin_user) { create(:user, :admin, :confirmed) }
|
11
|
-
let!(:current_user) { admin_user }
|
12
|
-
let(:organization) { admin_user.organization }
|
13
|
-
|
14
|
-
before do
|
15
|
-
request.env["decidim.current_organization"] = organization
|
16
|
-
sign_in current_user, scope: :user
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "role filter" do
|
20
|
-
let!(:participant) { create(:user, :confirmed, organization: organization) }
|
21
|
-
let!(:department_admin_user) { create(:department_admin, :confirmed, organization: organization) }
|
22
|
-
let!(:user_manager) { create(:user, :confirmed, organization: organization, roles: ["user_manager"]) }
|
23
|
-
let!(:process_admin) { create(:user, :confirmed, organization: organization) }
|
24
|
-
let!(:participatory_process) { create(:participatory_process, organization: organization, title: { en: "A Process space" }) }
|
25
|
-
let!(:process_admin_rel) { Decidim::ParticipatoryProcessUserRole.create(role: "admin", user: process_admin, participatory_process: participatory_process) }
|
26
|
-
let!(:assembly_admin) { create(:user, :confirmed, organization: organization) }
|
27
|
-
let!(:assembly) { create(:assembly, organization: organization, title: { en: "An Assembly space" }) }
|
28
|
-
let!(:assembly_admin_rel) { Decidim::AssemblyUserRole.create(role: "admin", user: assembly_admin, assembly: assembly) }
|
29
|
-
|
30
|
-
subject { controller.filtered_collection }
|
31
|
-
|
32
|
-
context "when not filtering" do
|
33
|
-
it "lists all kind of admin users" do
|
34
|
-
get :index, params: {}
|
35
|
-
|
36
|
-
expect(subject).to include(admin_user, department_admin_user, user_manager, assembly_admin, process_admin)
|
37
|
-
expect(subject).not_to include(participant)
|
38
|
-
expect(response).to render_template(:index)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
context "when filtering by process admin email in user term" do
|
43
|
-
it "lists the process admin user" do
|
44
|
-
get :index, params: { q: { name_or_nickname_or_email_cont: process_admin.email.split("@").first } }
|
45
|
-
|
46
|
-
expect(subject).to include(process_admin)
|
47
|
-
expect(subject).not_to include(admin_user, department_admin_user, user_manager, assembly_admin, participant)
|
48
|
-
expect(response).to render_template(:index)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context "when filtering by space name" do
|
53
|
-
it "lists the space_admins in spaces matching the given term" do
|
54
|
-
get :index, params: { q: { name_or_nickname_or_email_cont: "space" }, filter_search: "by_process_name" }
|
55
|
-
|
56
|
-
expect(subject).to include(process_admin, assembly_admin)
|
57
|
-
expect(subject).not_to include(admin_user, department_admin_user, user_manager, participant)
|
58
|
-
expect(response).to render_template(:index)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
context "when filtering by admin role" do
|
63
|
-
let(:params) do
|
64
|
-
{ role: "admin" }
|
65
|
-
end
|
66
|
-
|
67
|
-
it "lists only users with role admin" do
|
68
|
-
get :index, params: params
|
69
|
-
|
70
|
-
expect(subject).to include(admin_user)
|
71
|
-
expect(subject).not_to include(department_admin_user, user_manager, process_admin, assembly_admin, participant)
|
72
|
-
expect(response).to render_template(:index)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
context "when filtering by department_admin role" do
|
77
|
-
let(:params) do
|
78
|
-
{ role: "department_admin" }
|
79
|
-
end
|
80
|
-
|
81
|
-
it "lists only users with role department_admin" do
|
82
|
-
get :index, params: params
|
83
|
-
|
84
|
-
expect(subject).to include(department_admin_user)
|
85
|
-
expect(subject).not_to include(admin_user, user_manager, process_admin, assembly_admin, participant)
|
86
|
-
expect(response).to render_template(:index)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
context "when filtering by user_manager role" do
|
91
|
-
let(:params) do
|
92
|
-
{ role: "user_manager" }
|
93
|
-
end
|
94
|
-
|
95
|
-
it "lists only users with role user_manager" do
|
96
|
-
get :index, params: params
|
97
|
-
|
98
|
-
expect(subject).to include(user_manager)
|
99
|
-
expect(subject).not_to include(admin_user, department_admin_user, process_admin, assembly_admin, participant)
|
100
|
-
expect(response).to render_template(:index)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context "when filtering by space_admin role" do
|
105
|
-
let(:params) do
|
106
|
-
{ role: "space_admin" }
|
107
|
-
end
|
108
|
-
|
109
|
-
it "lists only users with role space_admin" do
|
110
|
-
get :index, params: params
|
111
|
-
|
112
|
-
expect(subject).to include(process_admin, assembly_admin)
|
113
|
-
expect(subject).not_to include(admin_user, department_admin_user, user_manager, participant)
|
114
|
-
expect(response).to render_template(:index)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
data/spec/factories.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
RSpec.describe "Overrides" do
|
6
|
-
it "check failing tests in Decidim v0.28" do
|
7
|
-
# Make test succeed spec/system/department_admin_should_be_able_to_manage_assemblies_spec.rbL73
|
8
|
-
# expect(page).to have_current_path decidim_admin_assemblies.assemblies_path(q: { parent_id_eq: parent_assembly&.id })
|
9
|
-
expect(Decidim.version).to be < "0.28"
|
10
|
-
end
|
11
|
-
end
|
data/spec/i18n_spec.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "i18n/tasks"
|
4
|
-
|
5
|
-
RSpec.describe "I18n" do
|
6
|
-
let(:i18n) { I18n::Tasks::BaseTask.new }
|
7
|
-
let(:missing_keys) { i18n.missing_keys }
|
8
|
-
let(:unused_keys) { i18n.unused_keys }
|
9
|
-
|
10
|
-
# All keys from overriding templates come from Decidim so we're having many false positives
|
11
|
-
# Probably it will be best tot remove this spec rather than having all keys ignored.
|
12
|
-
# it "does not have missing keys" do
|
13
|
-
# expect(missing_keys).to be_empty,
|
14
|
-
# "Missing #{missing_keys.leaves.count} i18n keys, run `i18n-tasks missing' to show them"
|
15
|
-
# end
|
16
|
-
|
17
|
-
it "does not have unused keys" do
|
18
|
-
expect(unused_keys).to be_empty,
|
19
|
-
"#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them"
|
20
|
-
end
|
21
|
-
|
22
|
-
it "files are normalized" do
|
23
|
-
non_normalized = i18n.non_normalized_paths
|
24
|
-
error_message = "The following files need to be normalized:\n" \
|
25
|
-
"#{non_normalized.map { |path| " #{path}" }.join("\n")}\n" \
|
26
|
-
"Please run `i18n-tasks normalize` to fix"
|
27
|
-
expect(non_normalized).to be_empty, error_message
|
28
|
-
end
|
29
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
module Decidim
|
6
|
-
describe Area do
|
7
|
-
subject(:area) { create(:area) }
|
8
|
-
|
9
|
-
context "when depending participatory process exist" do
|
10
|
-
let!(:department_admin) do
|
11
|
-
user = create(:user, :confirmed, organization: area.organization)
|
12
|
-
user.roles << "department_admin"
|
13
|
-
user.areas << area
|
14
|
-
user.save!
|
15
|
-
user
|
16
|
-
end
|
17
|
-
|
18
|
-
it "can not be deleted" do
|
19
|
-
expect(area.destroy).to be false
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,120 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
module Decidim
|
6
|
-
module DepartmentAdmin
|
7
|
-
describe Permissions do
|
8
|
-
let(:area) { create(:area) }
|
9
|
-
let!(:user) do
|
10
|
-
create(:department_admin, :confirmed, organization: area.organization, area: area)
|
11
|
-
end
|
12
|
-
|
13
|
-
def should_allow_action(scope, action, subject)
|
14
|
-
action = PermissionAction.new(scope: scope, action: action, subject: subject)
|
15
|
-
permissions = DepartmentAdmin::Permissions.new(user, action)
|
16
|
-
expect(permissions.permissions).to be_allowed
|
17
|
-
end
|
18
|
-
|
19
|
-
def should_allow_action_with_ctx(scope, action, subject, ctx)
|
20
|
-
action = PermissionAction.new(scope: scope, action: action, subject: subject)
|
21
|
-
permissions = DepartmentAdmin::Permissions.new(user, action, ctx)
|
22
|
-
expect(permissions.permissions).to be_allowed
|
23
|
-
end
|
24
|
-
|
25
|
-
context "when user role is department_admin" do
|
26
|
-
context "with simple permission actions" do
|
27
|
-
it "allows accepted actions" do
|
28
|
-
should_allow_action(:admin, :read, :admin_dashboard)
|
29
|
-
should_allow_action(:admin, :read, :process_list)
|
30
|
-
should_allow_action(:admin, :create, :process)
|
31
|
-
should_allow_action(:admin, :read, :process_step)
|
32
|
-
should_allow_action(:admin, :create, :process_step)
|
33
|
-
should_allow_action(:admin, :read, :assembly_list)
|
34
|
-
should_allow_action(:admin, :read, :assembly_user_role)
|
35
|
-
should_allow_action(:admin, :create, :assembly)
|
36
|
-
should_allow_action(:admin, :index, :newsletter)
|
37
|
-
should_allow_action(:admin, :create, :newsletter)
|
38
|
-
should_allow_action(:admin, :create, :attachment_collection)
|
39
|
-
should_allow_action(:admin, :read, :conference_list)
|
40
|
-
should_allow_action(:admin, :read, :conference_user_role)
|
41
|
-
should_allow_action(:admin, :create, :conference)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "does not allow non accepted actions" do
|
45
|
-
action = PermissionAction.new(scope: :admin, action: :write, subject: :admin_dashboard)
|
46
|
-
permissions = DepartmentAdmin::Permissions.new(user, action)
|
47
|
-
expect { permissions.permissions.allowed? }.to raise_error(Decidim::PermissionAction::PermissionNotSetError)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context "with permission actions with context" do
|
52
|
-
context "when acction is allowed and context is space_name" do
|
53
|
-
it "allows accepted actions with expected context" do
|
54
|
-
should_allow_action_with_ctx(:admin, :enter, :space_area, space_name: :processes)
|
55
|
-
should_allow_action_with_ctx(:admin, :enter, :space_area, space_name: :assemblies)
|
56
|
-
should_allow_action_with_ctx(:admin, :enter, :space_area, space_name: :conferences)
|
57
|
-
end
|
58
|
-
|
59
|
-
it "does not allow accepted actions with unexpected context" do
|
60
|
-
action = PermissionAction.new(scope: :admin, action: :enter, subject: :space_area)
|
61
|
-
permissions = DepartmentAdmin::Permissions.new(user, action, space_name: :custom_module)
|
62
|
-
expect { permissions.permissions.allowed? }.to raise_error(Decidim::PermissionAction::PermissionNotSetError)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
context "when acction is allowed and context is process" do
|
67
|
-
context "when process has same area as department_admin" do
|
68
|
-
let(:process) { create(:participatory_process, organization: area.organization, area: area) }
|
69
|
-
let(:assembly) { create(:assembly, organization: area.organization, area: area) }
|
70
|
-
let(:conference) { create(:conference, organization: area.organization, area: area) }
|
71
|
-
|
72
|
-
it "allows accepted actions with expected context" do
|
73
|
-
should_allow_action_with_ctx(:admin, :read, :participatory_space, current_participatory_space: process)
|
74
|
-
should_allow_action_with_ctx(:admin, :update, :process, process: process)
|
75
|
-
pps = ParticipatoryProcessStep.new(participatory_process: process)
|
76
|
-
should_allow_action_with_ctx(:admin, :update, :process_step, process_step: pps)
|
77
|
-
should_allow_action_with_ctx(:admin, :destroy, :process_step, process_step: pps)
|
78
|
-
should_allow_action_with_ctx(:admin, :update, :assembly, assembly: assembly)
|
79
|
-
should_allow_action_with_ctx(:admin, :update, :conference, conference: conference)
|
80
|
-
# -> {permission_for?(requested_action, :admin, :read, :newsletter, restricted_rsrc: context[:newsletter])},
|
81
|
-
end
|
82
|
-
|
83
|
-
context "when meeting has same area as department_admin" do
|
84
|
-
let(:meeting) { create(:meeing, participatory_space: process, area: area) }
|
85
|
-
|
86
|
-
it "allows accepted actions with expected context" do
|
87
|
-
should_allow_action(:admin, :create, :attachment)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
context "when process has different area as department_admin" do
|
93
|
-
let(:process) { create(:participatory_process, organization: area.organization) }
|
94
|
-
|
95
|
-
it "does not allow accepted actions with unexpected context" do
|
96
|
-
action = PermissionAction.new(scope: :admin, action: :update, subject: :process)
|
97
|
-
permissions = DepartmentAdmin::Permissions.new(user, action, process: process)
|
98
|
-
expect { permissions.permissions.allowed? }.to raise_error(Decidim::PermissionAction::PermissionNotSetError)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
# context "when acction is allowed and context is component" do
|
104
|
-
# context "when component has same area as department_admin" do
|
105
|
-
# TODO: complete the test implementation
|
106
|
-
# let(:process) { create(:participatory_process, organization: area.organization, area: area) }
|
107
|
-
# let(:component) { create(:survey, participatory_space: process) }
|
108
|
-
|
109
|
-
# it "should allow accepted actions" # do
|
110
|
-
# should_allow_action(:admin, :read, :component)
|
111
|
-
# should_allow_action(:admin, :create, :component)
|
112
|
-
# should_allow_action_with_ctx(:admin, :export, :component_data, current_participatory_space: process)
|
113
|
-
# end
|
114
|
-
# end
|
115
|
-
# end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
module Decidim::Assemblies
|
6
|
-
describe ParentAssembliesForSelect do
|
7
|
-
subject { described_class.for(organization, assembly) }
|
8
|
-
|
9
|
-
let(:organization) { create(:organization) }
|
10
|
-
let!(:assembly) { create(:assembly, organization: organization) }
|
11
|
-
let!(:assemblies) { create_list(:assembly, 3, organization: organization) }
|
12
|
-
let!(:child_assembly) { create(:assembly, :with_parent, parent: assembly, organization: organization) }
|
13
|
-
let!(:grand_child_assembly) { create(:assembly, :with_parent, parent: child_assembly, organization: organization) }
|
14
|
-
|
15
|
-
describe "query" do
|
16
|
-
context "when current_user is nil" do
|
17
|
-
it "returns assemblies that can be parent" do
|
18
|
-
expect(subject.count).to eq(3)
|
19
|
-
expect(subject).to match_array(assemblies)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "when current_user is present" do
|
24
|
-
subject { described_class.for(organization, assembly, current_user) }
|
25
|
-
|
26
|
-
let!(:current_user) do
|
27
|
-
create(:department_admin, :confirmed, organization: area.organization, area: area)
|
28
|
-
end
|
29
|
-
let(:area) { create(:area) }
|
30
|
-
let!(:assemblies_with_area) { create_list(:assembly, 3, organization: organization, area: area) }
|
31
|
-
|
32
|
-
it "returns assemblies that can be parent with same current user area" do
|
33
|
-
expect(subject.count).to eq(3)
|
34
|
-
expect(subject).to match_array(assemblies_with_area)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "when assembly is nil" do
|
39
|
-
let(:assembly) { nil }
|
40
|
-
|
41
|
-
it "returns all assemblies" do
|
42
|
-
expected = assemblies
|
43
|
-
expected << child_assembly
|
44
|
-
expected << grand_child_assembly
|
45
|
-
|
46
|
-
expect(subject.count).to eq(5)
|
47
|
-
expect(subject).to match_array(expected)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "decidim/dev"
|
4
|
-
|
5
|
-
ENV["ENGINE_ROOT"] = File.dirname(__dir__)
|
6
|
-
|
7
|
-
# require "decidim/admin"
|
8
|
-
# require "decidim/core"
|
9
|
-
# require "decidim/core/test"
|
10
|
-
|
11
|
-
Decidim::Dev.dummy_app_path = File.expand_path(File.join("spec", "decidim_dummy_app"))
|
12
|
-
|
13
|
-
require "decidim/dev/test/base_spec_helper"
|
14
|
-
|
15
|
-
require "decidim/department_admin"
|
16
|
-
|
17
|
-
if ENV["SIMPLECOV"]
|
18
|
-
require "simplecov"
|
19
|
-
SimpleCov.start do
|
20
|
-
# `ENGINE_ROOT` holds the name of the engine we're testing.
|
21
|
-
# This brings us to the main Decidim folder.
|
22
|
-
root File.expand_path(".", ENV.fetch("ENGINE_ROOT", nil))
|
23
|
-
|
24
|
-
# We make sure we track all Ruby files, to avoid skipping unrequired files
|
25
|
-
# We need to include the `../` section, otherwise it only tracks files from the
|
26
|
-
# `ENGINE_ROOT` folder for some reason.
|
27
|
-
# track_files "../**/*.rb"
|
28
|
-
|
29
|
-
# We ignore some of the files because they are never tested
|
30
|
-
add_filter "/config/"
|
31
|
-
add_filter "/db/"
|
32
|
-
add_filter "/vendor/"
|
33
|
-
add_filter "/spec/"
|
34
|
-
add_filter "/test/"
|
35
|
-
add_filter %r{^/decidim-[^/]*/lib/decidim/[^/]*/engine.rb}
|
36
|
-
add_filter %r{^/decidim-[^/]*/lib/decidim/[^/]*/admin-engine.rb}
|
37
|
-
add_filter %r{^/decidim-[^/]*/lib/decidim/[^/]*/component.rb}
|
38
|
-
add_filter %r{^/decidim-[^/]*/lib/decidim/[^/]*/participatory_space.rb}
|
39
|
-
end
|
40
|
-
|
41
|
-
SimpleCov.merge_timeout 1800
|
42
|
-
|
43
|
-
if ENV["CI"]
|
44
|
-
require "simplecov-cobertura"
|
45
|
-
SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
|
46
|
-
end
|
47
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe "Admin explores processes", type: :system do
|
6
|
-
let(:organization) { create(:organization) }
|
7
|
-
let!(:area) { create(:area, organization: organization) }
|
8
|
-
let!(:process) { create(:participatory_process, organization: organization, area: area) }
|
9
|
-
|
10
|
-
let!(:admin) { create(:user, :admin, :confirmed, organization: organization) }
|
11
|
-
|
12
|
-
before do
|
13
|
-
switch_to_host(organization.host)
|
14
|
-
login_as admin, scope: :user
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "when there are admins of all types" do
|
18
|
-
let!(:department_admin) do
|
19
|
-
user = create(:user, :confirmed, organization: organization)
|
20
|
-
user.roles << "department_admin"
|
21
|
-
user.areas << area
|
22
|
-
user.save!
|
23
|
-
user
|
24
|
-
end
|
25
|
-
|
26
|
-
context "when visiting the list of participatory processes" do
|
27
|
-
before do
|
28
|
-
visit decidim_admin_participatory_processes.participatory_processes_path
|
29
|
-
end
|
30
|
-
|
31
|
-
it "renders a new column for the process department (aka area)" do
|
32
|
-
check_column_header_exists(position: 2, content: "Department/Area")
|
33
|
-
check_column_data_exists(position: 2, content: area.name["en"])
|
34
|
-
check_column_data_exists(position: 3, content: department_admin.name)
|
35
|
-
end
|
36
|
-
|
37
|
-
it "renders a new column for the department admins in the process"
|
38
|
-
it "renders a new column for the process admins in the process"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def check_column_header_exists(position: 1, content: "")
|
43
|
-
within "#processes .card-section .table-scroll table thead th:nth-child(#{position})" do
|
44
|
-
expect(page).to have_content(content)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def check_column_data_exists(position: 1, content: "")
|
49
|
-
within "#processes .card-section .table-scroll table tbody td:nth-child(#{position})" do
|
50
|
-
expect(page).to have_content(content)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,118 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
#
|
6
|
-
# To "downgrade" an admin to department_admin, it must first be removed from admins
|
7
|
-
# create a new admin as department_admin.
|
8
|
-
#
|
9
|
-
describe "Admin invite user", type: :system do
|
10
|
-
let!(:area) { create(:area) }
|
11
|
-
|
12
|
-
let(:organization) { create(:organization) }
|
13
|
-
|
14
|
-
let!(:admin) { create(:user, :admin, :confirmed, organization: organization) }
|
15
|
-
let(:user_manager) { create(:user, :user_manager, :confirmed, organization: organization) }
|
16
|
-
|
17
|
-
let(:department_admin) do
|
18
|
-
user = create(:user, :confirmed, organization: organization)
|
19
|
-
user.roles << "department_admin"
|
20
|
-
user.areas << area
|
21
|
-
user.save!
|
22
|
-
user
|
23
|
-
end
|
24
|
-
|
25
|
-
before do
|
26
|
-
switch_to_host(organization.host)
|
27
|
-
login_as admin, scope: :user
|
28
|
-
visit decidim_admin.new_user_path
|
29
|
-
end
|
30
|
-
|
31
|
-
it "admin is able to create department admins" do
|
32
|
-
fill_the_form_for_department_admin("Cabello Loco", "my@email.net")
|
33
|
-
submit_form
|
34
|
-
check_succeess
|
35
|
-
user = check_is_department_admin("my@email.net")
|
36
|
-
check_assigned_area(user, area)
|
37
|
-
end
|
38
|
-
|
39
|
-
it "admin is able to add department_admin role to existing user" do
|
40
|
-
fill_the_form_for_department_admin(user_manager.name, user_manager.email)
|
41
|
-
submit_form
|
42
|
-
check_succeess
|
43
|
-
check_is_department_admin(user_manager.email)
|
44
|
-
check_assigned_area(user_manager, area)
|
45
|
-
end
|
46
|
-
|
47
|
-
context "when departments are reorganized" do
|
48
|
-
let!(:new_area) { create(:area) }
|
49
|
-
|
50
|
-
before do
|
51
|
-
department_admin
|
52
|
-
visit decidim_admin.new_user_path
|
53
|
-
end
|
54
|
-
|
55
|
-
it "admin is able to change department_admin's area/department" do
|
56
|
-
fill_the_form_for_department_admin(department_admin.name, department_admin.email, new_area)
|
57
|
-
submit_form
|
58
|
-
check_succeess
|
59
|
-
check_is_department_admin(department_admin.email)
|
60
|
-
check_assigned_area(department_admin, new_area)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context "when a department_admin is promoted to Admin" do
|
65
|
-
it "no longer has the `department_admin` role" do
|
66
|
-
department_admin
|
67
|
-
fill_the_form_for_admin(department_admin.name, department_admin.email)
|
68
|
-
submit_form
|
69
|
-
check_succeess
|
70
|
-
check_is_admin(department_admin.email)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def fill_the_form_for_department_admin(name, email, selected_area = area)
|
75
|
-
within "form.new_user" do
|
76
|
-
fill_in :user_name, with: name
|
77
|
-
fill_in :user_email, with: email
|
78
|
-
find("#user_role").find("option[value='department_admin']").select_option
|
79
|
-
expect(page).to have_css("#user_area_id")
|
80
|
-
find("#user_area_id").find("option[value='#{selected_area.id}']").select_option
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def fill_the_form_for_admin(name, email, _selected_area = area)
|
85
|
-
within "form.new_user" do
|
86
|
-
fill_in :user_name, with: name
|
87
|
-
fill_in :user_email, with: email
|
88
|
-
find("#user_role").find("option[value='admin']").select_option
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def submit_form
|
93
|
-
find("*[name=commit][type=submit]").click
|
94
|
-
end
|
95
|
-
|
96
|
-
def check_succeess
|
97
|
-
expect(page).to have_content("Participant successfully invited.")
|
98
|
-
expect(page).to have_current_path "/admin/users"
|
99
|
-
end
|
100
|
-
|
101
|
-
def check_is_admin(email)
|
102
|
-
user = Decidim::User.find_by(email: email).reload
|
103
|
-
expect(user).to be_admin
|
104
|
-
expect(user.roles).not_to include("department_admin")
|
105
|
-
expect(user.areas).to be_empty
|
106
|
-
end
|
107
|
-
|
108
|
-
def check_is_department_admin(email)
|
109
|
-
user = Decidim::User.find_by(email: email)
|
110
|
-
expect(user.roles).to include("department_admin")
|
111
|
-
user
|
112
|
-
end
|
113
|
-
|
114
|
-
def check_assigned_area(user, area)
|
115
|
-
expect(user.areas.last).to eq(area)
|
116
|
-
expect(user.areas.size).to eq(1)
|
117
|
-
end
|
118
|
-
end
|