Skip to content

Commit fa0df60

Browse files
committed
Constrain space-enabled features to those of the instance
1 parent 3399ffc commit fa0df60

File tree

5 files changed

+62
-2
lines changed

5 files changed

+62
-2
lines changed

app/helpers/spaces_helper.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ def spaces_info
55
end
66

77
def space_feature_options
8-
Space::FEATURES.map { |f| [t("features.#{f}.short"), f] }
8+
Space::FEATURES.select do |f|
9+
TeSS::Config.feature[f]
10+
end.map do |f|
11+
[t("features.#{f}.short"), f]
12+
end
913
end
1014
end

app/models/space.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def users_with_role(role)
5151

5252
def feature_enabled?(feature)
5353
if FEATURES.include?(feature)
54-
!disabled_features.include?(feature)
54+
TeSS::Config.feature[feature] && !disabled_features.include?(feature)
5555
else
5656
TeSS::Config.feature[feature]
5757
end

test/controllers/spaces_controller_test.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,4 +238,28 @@ class SpacesControllerTest < ActionController::TestCase
238238
assert_includes admins, existing_admin
239239
assert_includes admins, new_admin
240240
end
241+
242+
test 'only instance-enabled features are listed on management page' do
243+
sign_in @space.user
244+
features = { 'events': true,
245+
'materials': false,
246+
'elearning_materials': false,
247+
'learning_paths': false,
248+
'workflows': true,
249+
'collections': false,
250+
'content_providers': false,
251+
'trainers': false,
252+
'nodes': false
253+
}
254+
255+
with_settings(feature: features) do
256+
get :edit, params: { id: @space }
257+
assert_response :success
258+
assert_select '[name="space[enabled_features][]"]', count: 3 # +1 because of the blank input that allows you to
259+
# clear the list
260+
assert_select '#space_enabled_features_events', count: 1
261+
assert_select '#space_enabled_features_workflows', count: 1
262+
assert_select '#space_enabled_features_materials', count: 0
263+
end
264+
end
241265
end

test/controllers/static_controller_test.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,4 +694,22 @@ class StaticControllerTest < ActionController::TestCase
694694
end
695695
end
696696
end
697+
698+
test 'space enabled features are limited by instance enabled features' do
699+
space = spaces(:plants)
700+
space.disabled_features = []
701+
space.save!
702+
703+
assert_includes space.enabled_features, 'events'
704+
705+
with_settings(feature: { 'events': false }) do
706+
with_host('plants.mytess.training') do
707+
get :home
708+
assert_select 'ul.nav.navbar-nav' do
709+
assert_select 'li a[href=?]', materials_path, count: 1
710+
assert_select 'li a[href=?]', events_path, count: 0
711+
end
712+
end
713+
end
714+
end
697715
end

test/models/space_test.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,20 @@ class SpaceTest < ActiveSupport::TestCase
8585
end
8686
end
8787

88+
test 'feature_enabled? is limited by instance enabled features' do
89+
@space.disabled_features = []
90+
assert_includes @space.enabled_features, 'events'
91+
with_settings(feature: { 'events' => true }) do
92+
assert @space.feature_enabled?('events')
93+
assert @space.feature_enabled?('materials')
94+
end
95+
96+
with_settings(feature: { 'events' => false }) do
97+
refute @space.feature_enabled?('events')
98+
assert @space.feature_enabled?('materials')
99+
end
100+
end
101+
88102
test 'enabled_features returns all features except disabled ones' do
89103
@space.disabled_features = ['events', 'materials']
90104
enabled = @space.enabled_features

0 commit comments

Comments
 (0)