decidim-department_admin 0.7.2 → 0.8.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
- 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
|