Commit b5f420caefaed8b13d7fba7893a66919836220f8
1 parent
5c02a6e4
Exists in
master
and in
28 other branches
theme: allow multi-level inheritance on approved_themes owner_type
Showing
2 changed files
with
22 additions
and
2 deletions
Show diff stats
app/models/theme.rb
... | ... | @@ -49,7 +49,10 @@ class Theme |
49 | 49 | |
50 | 50 | approved = config['public'] |
51 | 51 | unless approved |
52 | - approved = config['owner_type'] == owner.class.base_class.name || config['owner_type'] == owner.class.name | |
52 | + begin | |
53 | + approved = owner.kind_of?(config['owner_type'].constantize) | |
54 | + rescue | |
55 | + end | |
53 | 56 | approved &&= config['owner_id'] == owner.id if config['owner_id'].present? |
54 | 57 | end |
55 | 58 | |
... | ... | @@ -58,7 +61,6 @@ class Theme |
58 | 61 | new id, config |
59 | 62 | end |
60 | 63 | end |
61 | - | |
62 | 64 | end |
63 | 65 | |
64 | 66 | class DuplicatedIdentifier < Exception; end | ... | ... |
test/unit/theme_test.rb
... | ... | @@ -191,4 +191,22 @@ class ThemeTest < ActiveSupport::TestCase |
191 | 191 | assert ! Theme.new('test').public |
192 | 192 | end |
193 | 193 | |
194 | + should 'not crash with nil or invalid owner_type' do | |
195 | + profile = fast_create(Profile) | |
196 | + Theme.stubs(:system_themes_dir).returns(TMP_THEMES_DIR) | |
197 | + | |
198 | + t1 = Theme.new('t1').save | |
199 | + t1.send(:write_config) | |
200 | + t2 = Theme.new('t2', {:owner_type => nil}).save | |
201 | + t2.send(:write_config) | |
202 | + t3 = Theme.new('t3', {:owner_type => 'InvalidClass'}).save | |
203 | + t3.send(:write_config) | |
204 | + | |
205 | + assert_nothing_raised do | |
206 | + themes = Theme.approved_themes(profile) | |
207 | + assert_not_includes themes, t1 | |
208 | + assert_not_includes themes, t2 | |
209 | + assert_not_includes themes, t3 | |
210 | + end | |
211 | + end | |
194 | 212 | end | ... | ... |