diff --git a/models/site_file.rb b/models/site_file.rb index d4eee0b7..afef3139 100644 --- a/models/site_file.rb +++ b/models/site_file.rb @@ -81,7 +81,12 @@ class SiteFile < Sequel::Model return false, "#{is_directory ? 'directory' : 'file'} already exists" end - unless is_directory + if is_directory + if new_path.match(/\.html?$/) + return false, 'directory name cannot end with .htm or .html' + end + + else # a file mime_type = Magic.guess_file_mime_type site.files_path(self.path) extname = File.extname new_path diff --git a/tests/site_file_tests.rb b/tests/site_file_tests.rb index 772cc4d5..bc18f4ee 100644 --- a/tests/site_file_tests.rb +++ b/tests/site_file_tests.rb @@ -111,6 +111,15 @@ describe 'site_files' do # No purge cache is executed because the directory is empty end + it 'fails for directory name ending in .htm or .html' do + @site.create_directory 'dirone' + dirone = @site.site_files_dataset.where(path: 'dirone').first + res = dirone.rename('dasharezone.html') + _(res).must_equal [false, 'directory name cannot end with .htm or .html'] + res = dirone.rename('dasharezone.htm') + _(res).must_equal [false, 'directory name cannot end with .htm or .html'] + end + it 'wont set an empty directory' do @site.create_directory 'dirone' _(@site.site_files.select {|sf| sf.path == 'dirone'}.length).must_equal 1