Commit fb293ae3ae41d3820f0fb8e2778111ba6b0b94e7
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
Merge branch 'master' into stable
Showing
25 changed files
with
134 additions
and
34 deletions
Show diff stats
app/controllers/my_profile/profile_members_controller.rb
@@ -20,7 +20,7 @@ class ProfileMembersController < MyProfileController | @@ -20,7 +20,7 @@ class ProfileMembersController < MyProfileController | ||
20 | redirect_to :action => :last_admin | 20 | redirect_to :action => :last_admin |
21 | elsif @person.define_roles(@roles, profile) | 21 | elsif @person.define_roles(@roles, profile) |
22 | session[:notice] = _('Roles successfuly updated') | 22 | session[:notice] = _('Roles successfuly updated') |
23 | - redirect_to :controller => 'profile_editor' | 23 | + redirect_to :action => 'index' |
24 | else | 24 | else |
25 | session[:notice] = _('Couldn\'t change the roles') | 25 | session[:notice] = _('Couldn\'t change the roles') |
26 | redirect_to :action => 'index' | 26 | redirect_to :action => 'index' |
app/helpers/application_helper.rb
@@ -862,8 +862,9 @@ module ApplicationHelper | @@ -862,8 +862,9 @@ module ApplicationHelper | ||
862 | end | 862 | end |
863 | 863 | ||
864 | def base_url | 864 | def base_url |
865 | - environment.top_url | 865 | + environment.top_url(request.scheme) |
866 | end | 866 | end |
867 | + alias :top_url :base_url | ||
867 | 868 | ||
868 | def helper_for_article(article) | 869 | def helper_for_article(article) |
869 | article_helper = ActionView::Base.new | 870 | article_helper = ActionView::Base.new |
app/helpers/tinymce_helper.rb
@@ -11,7 +11,7 @@ module TinymceHelper | @@ -11,7 +11,7 @@ module TinymceHelper | ||
11 | end | 11 | end |
12 | 12 | ||
13 | def tinymce_init_js options = {} | 13 | def tinymce_init_js options = {} |
14 | - options.merge! :document_base_url => environment.top_url, | 14 | + options.merge! :document_base_url => top_url, |
15 | :content_css => "/stylesheets/tinymce.css,#{macro_css_files}", | 15 | :content_css => "/stylesheets/tinymce.css,#{macro_css_files}", |
16 | :plugins => %w[compat3x advlist autolink lists link image charmap print preview hr anchor pagebreak | 16 | :plugins => %w[compat3x advlist autolink lists link image charmap print preview hr anchor pagebreak |
17 | searchreplace wordcount visualblocks visualchars code fullscreen | 17 | searchreplace wordcount visualblocks visualchars code fullscreen |
app/models/environment.rb
@@ -663,8 +663,8 @@ class Environment < ActiveRecord::Base | @@ -663,8 +663,8 @@ class Environment < ActiveRecord::Base | ||
663 | { :controller => 'admin_panel', :action => 'index' } | 663 | { :controller => 'admin_panel', :action => 'index' } |
664 | end | 664 | end |
665 | 665 | ||
666 | - def top_url | ||
667 | - url = 'http://' | 666 | + def top_url(scheme = 'http') |
667 | + url = scheme + '://' | ||
668 | url << (Noosfero.url_options.key?(:host) ? Noosfero.url_options[:host] : default_hostname) | 668 | url << (Noosfero.url_options.key?(:host) ? Noosfero.url_options[:host] : default_hostname) |
669 | url << ':' << Noosfero.url_options[:port].to_s if Noosfero.url_options.key?(:port) | 669 | url << ':' << Noosfero.url_options[:port].to_s if Noosfero.url_options.key?(:port) |
670 | url << Noosfero.root('') | 670 | url << Noosfero.root('') |
@@ -943,6 +943,10 @@ class Environment < ActiveRecord::Base | @@ -943,6 +943,10 @@ class Environment < ActiveRecord::Base | ||
943 | locales_list | 943 | locales_list |
944 | end | 944 | end |
945 | 945 | ||
946 | + def has_license? | ||
947 | + self.licenses.any? | ||
948 | + end | ||
949 | + | ||
946 | private | 950 | private |
947 | 951 | ||
948 | def default_language_available | 952 | def default_language_available |
app/models/profile.rb
@@ -161,6 +161,7 @@ class Profile < ActiveRecord::Base | @@ -161,6 +161,7 @@ class Profile < ActiveRecord::Base | ||
161 | scope :visible, :conditions => { :visible => true } | 161 | scope :visible, :conditions => { :visible => true } |
162 | scope :disabled, :conditions => { :visible => false } | 162 | scope :disabled, :conditions => { :visible => false } |
163 | scope :public, :conditions => { :visible => true, :public_profile => true } | 163 | scope :public, :conditions => { :visible => true, :public_profile => true } |
164 | + scope :enabled, :conditions => { :enabled => true } | ||
164 | 165 | ||
165 | # Subclasses must override this method | 166 | # Subclasses must override this method |
166 | scope :more_popular | 167 | scope :more_popular |
@@ -430,7 +431,7 @@ class Profile < ActiveRecord::Base | @@ -430,7 +431,7 @@ class Profile < ActiveRecord::Base | ||
430 | end | 431 | end |
431 | 432 | ||
432 | xss_terminate :only => [ :name, :nickname, :address, :contact_phone, :description ], :on => 'validation' | 433 | xss_terminate :only => [ :name, :nickname, :address, :contact_phone, :description ], :on => 'validation' |
433 | - xss_terminate :only => [ :custom_footer, :custom_header ], :with => 'white_list', :on => 'validation' | 434 | + xss_terminate :only => [ :custom_footer, :custom_header ], :with => 'white_list' |
434 | 435 | ||
435 | include WhiteListFilter | 436 | include WhiteListFilter |
436 | filter_iframes :custom_header, :custom_footer | 437 | filter_iframes :custom_header, :custom_footer |
app/views/cms/_general_fields.html.erb
1 | <%= select_profile_folder(_('Parent folder:'), 'article[parent_id]', profile, @article.parent_id) %> | 1 | <%= select_profile_folder(_('Parent folder:'), 'article[parent_id]', profile, @article.parent_id) %> |
2 | -<%= labelled_form_field(_('License'), select(:article, :license_id, options_for_select_with_title([[_('None'), nil]] + profile.environment.licenses.map {|license| [license.name, license.id]}, @article.license ? @article.license.id : nil))) %> | 2 | +<% if profile.environment.has_license? %> |
3 | + <%= labelled_form_field(_('License'), select(:article, :license_id, options_for_select_with_title([[_('None'), nil]] + profile.environment.licenses.map {|license| [license.name, license.id]}, @article.license ? @article.license.id : nil))) %> | ||
4 | +<% end %> |
app/views/enterprise_registration/basic_information.html.erb
@@ -20,7 +20,7 @@ | @@ -20,7 +20,7 @@ | ||
20 | 20 | ||
21 | <%= labelled_form_for :create_enterprise do |f| %> | 21 | <%= labelled_form_for :create_enterprise do |f| %> |
22 | <%= required f.text_field 'name', :onchange => "updateUrlField(this, 'create_enterprise_identifier')", :size => 40 %> | 22 | <%= required f.text_field 'name', :onchange => "updateUrlField(this, 'create_enterprise_identifier')", :size => 40 %> |
23 | - <%= required labelled_form_field(_('Address'), content_tag('code', environment.top_url + "/" + text_field(:create_enterprise, 'identifier', :size => 26))) %> | 23 | + <%= required labelled_form_field(_('Address'), content_tag('code', top_url + "/" + text_field(:create_enterprise, 'identifier', :size => 26))) %> |
24 | <%= render :partial => 'shared/organization_custom_fields', :locals => { :f => f, :object_name => :create_enterprise, :profile => @create_enterprise } %> | 24 | <%= render :partial => 'shared/organization_custom_fields', :locals => { :f => f, :object_name => :create_enterprise, :profile => @create_enterprise } %> |
25 | <%= required labelled_form_field(_('Region'), f.select('region_id', @regions)) if @validation == :region %> | 25 | <%= required labelled_form_field(_('Region'), f.select('region_id', @regions)) if @validation == :region %> |
26 | 26 |
app/views/layouts/application-ng.html.erb
@@ -14,7 +14,7 @@ | @@ -14,7 +14,7 @@ | ||
14 | 14 | ||
15 | <!-- Open Graph --> | 15 | <!-- Open Graph --> |
16 | <meta property="og:type" content="<%= @page ? 'article' : 'website' %>"> | 16 | <meta property="og:type" content="<%= @page ? 'article' : 'website' %>"> |
17 | - <meta property="og:url" content="<%= @page ? url_for(@page.url) : @environment.top_url %>"> | 17 | + <meta property="og:url" content="<%= @page ? url_for(@page.url) : top_url %>"> |
18 | <meta property="og:title" content="<%= h page_title %>"> | 18 | <meta property="og:title" content="<%= h page_title %>"> |
19 | <meta property="og:site_name" content="<%= profile ? profile.name : @environment.name %>"> | 19 | <meta property="og:site_name" content="<%= profile ? profile.name : @environment.name %>"> |
20 | <meta property="og:description" content="<%= meta_description_tag(@page) %>"> | 20 | <meta property="og:description" content="<%= meta_description_tag(@page) %>"> |
app/views/layouts/application.html.erb
@@ -68,7 +68,7 @@ | @@ -68,7 +68,7 @@ | ||
68 | 68 | ||
69 | <div id="navigation_bar"> | 69 | <div id="navigation_bar"> |
70 | <%= link_to "<span>"+ @environment.name() +"</span>", | 70 | <%= link_to "<span>"+ @environment.name() +"</span>", |
71 | - @environment.top_url, | 71 | + top_url, |
72 | :id=>"menu_link_to_envhome", | 72 | :id=>"menu_link_to_envhome", |
73 | :title=>@environment.name %> | 73 | :title=>@environment.name %> |
74 | <% unless environment.enabled?(:disable_categories) %> | 74 | <% unless environment.enabled?(:disable_categories) %> |
config/application.rb
@@ -113,9 +113,6 @@ module Noosfero | @@ -113,9 +113,6 @@ module Noosfero | ||
113 | config.secret_token = noosfero_session_secret | 113 | config.secret_token = noosfero_session_secret |
114 | config.session_store :cookie_store, :key => '_noosfero_session' | 114 | config.session_store :cookie_store, :key => '_noosfero_session' |
115 | 115 | ||
116 | - config.time_zone = File.read('/etc/timezone').split("\n").first | ||
117 | - config.active_record.default_timezone = :local | ||
118 | - | ||
119 | config.paths['db/migrate'] += Dir.glob "#{Rails.root}/{baseplugins,config/plugins}/*/db/migrate" | 116 | config.paths['db/migrate'] += Dir.glob "#{Rails.root}/{baseplugins,config/plugins}/*/db/migrate" |
120 | config.i18n.load_path += Dir.glob "#{Rails.root}/{baseplugins,config/plugins}/*/locales/*.{rb,yml}" | 117 | config.i18n.load_path += Dir.glob "#{Rails.root}/{baseplugins,config/plugins}/*/locales/*.{rb,yml}" |
121 | 118 |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +if Rails.env == 'development' | ||
2 | + ActionController::Base.send(:prepend_before_filter) do |controller| | ||
3 | + # XXX note that this is not thread-safe! Accessing a Noosfero instance in | ||
4 | + # development mode under different ports concurrently _will_ lead to weird | ||
5 | + # things happening. | ||
6 | + if [80,443].include?(controller.request.port) | ||
7 | + url_options = {} | ||
8 | + else | ||
9 | + url_options = { :port => controller.request.port } | ||
10 | + end | ||
11 | + Noosfero.instance_variable_set('@development_url_options', url_options) | ||
12 | + end | ||
13 | +end |
db/schema.rb
@@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
11 | # | 11 | # |
12 | # It's strongly recommended to check this file into your version control system. | 12 | # It's strongly recommended to check this file into your version control system. |
13 | 13 | ||
14 | -ActiveRecord::Schema.define(:version => 20150113131617) do | 14 | +ActiveRecord::Schema.define(:version => 20150122165042) do |
15 | 15 | ||
16 | create_table "abuse_reports", :force => true do |t| | 16 | create_table "abuse_reports", :force => true do |t| |
17 | t.integer "reporter_id" | 17 | t.integer "reporter_id" |
etc/pound.cfg
@@ -23,6 +23,7 @@ End | @@ -23,6 +23,7 @@ End | ||
23 | 23 | ||
24 | ListenHTTPS | 24 | ListenHTTPS |
25 | Address 0.0.0.0 | 25 | Address 0.0.0.0 |
26 | + AddHeader "X-Forwarded-Proto: https" | ||
26 | Port 443 | 27 | Port 443 |
27 | Cert "/etc/noosfero/ssl/noosfero.pem" | 28 | Cert "/etc/noosfero/ssl/noosfero.pem" |
28 | Ciphers "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM" | 29 | Ciphers "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM" |
features/step_definitions/activate_enterprise_steps.rb
@@ -19,7 +19,7 @@ Given /^"([^\"]*)" is the active enterprise template$/ do |enterprise| | @@ -19,7 +19,7 @@ Given /^"([^\"]*)" is the active enterprise template$/ do |enterprise| | ||
19 | template.save! | 19 | template.save! |
20 | 20 | ||
21 | e = Environment.default | 21 | e = Environment.default |
22 | - e.enterprise_template = template | 22 | + e.enterprise_default_template = template |
23 | e.save | 23 | e.save |
24 | end | 24 | end |
25 | 25 |
lib/tasks/ci.rake
@@ -5,7 +5,13 @@ namespace :ci do | @@ -5,7 +5,13 @@ namespace :ci do | ||
5 | 5 | ||
6 | current_branch = `git rev-parse --abbrev-ref HEAD`.strip | 6 | current_branch = `git rev-parse --abbrev-ref HEAD`.strip |
7 | from = ENV['PREV_HEAD'] || "origin/#{current_branch}" | 7 | from = ENV['PREV_HEAD'] || "origin/#{current_branch}" |
8 | + if !system("git show-ref --verify --quiet refs/remotes/#{from}") | ||
9 | + from = 'origin/master' | ||
10 | + end | ||
8 | to = ENV['HEAD'] || current_branch | 11 | to = ENV['HEAD'] || current_branch |
12 | + | ||
13 | + puts "Testing changes between #{from} and #{to} ..." | ||
14 | + | ||
9 | changed_files = `git diff --name-only #{from}..#{to}`.split.select do |f| | 15 | changed_files = `git diff --name-only #{from}..#{to}`.split.select do |f| |
10 | File.exist?(f) && f.split(File::SEPARATOR).first != 'vendor' | 16 | File.exist?(f) && f.split(File::SEPARATOR).first != 'vendor' |
11 | end | 17 | end |
@@ -33,14 +39,23 @@ namespace :ci do | @@ -33,14 +39,23 @@ namespace :ci do | ||
33 | end | 39 | end |
34 | end | 40 | end |
35 | 41 | ||
42 | + if tests.empty? && features.empty? && changed_plugins.empty? | ||
43 | + puts "Could not figure out specific changes to be tested in isolation!" | ||
44 | + end | ||
45 | + puts | ||
46 | + | ||
36 | sh 'testrb', '-Itest', *tests unless tests.empty? | 47 | sh 'testrb', '-Itest', *tests unless tests.empty? |
37 | sh 'cucumber', *features unless features.empty? | 48 | sh 'cucumber', *features unless features.empty? |
38 | sh 'xvfb-run', 'cucumber', '-p', 'selenium', *features unless features.empty? | 49 | sh 'xvfb-run', 'cucumber', '-p', 'selenium', *features unless features.empty? |
39 | 50 | ||
40 | changed_plugins.each do |plugin| | 51 | changed_plugins.each do |plugin| |
41 | - task = "test:noosfero_plugins:#{plugin}" | ||
42 | - puts "Running #{task}" | ||
43 | - Rake::Task[task].execute | 52 | + if $broken_plugins.include?(plugin) |
53 | + puts "Skipping plugins/#{plugin}: marked as broken" | ||
54 | + else | ||
55 | + task = "test:noosfero_plugins:#{plugin}" | ||
56 | + puts "Running #{task}" | ||
57 | + Rake::Task[task].execute | ||
58 | + end | ||
44 | end | 59 | end |
45 | 60 | ||
46 | end | 61 | end |
lib/tasks/plugins_tests.rake
1 | -@broken_plugins = %w[ | 1 | +$broken_plugins = %w[ |
2 | anti_spam | 2 | anti_spam |
3 | bsc | 3 | bsc |
4 | comment_classification | 4 | comment_classification |
5 | ldap | 5 | ldap |
6 | solr | 6 | solr |
7 | + stoa | ||
7 | ] | 8 | ] |
8 | 9 | ||
9 | @all_plugins = Dir.glob('plugins/*').map { |f| File.basename(f) } - ['template'] | 10 | @all_plugins = Dir.glob('plugins/*').map { |f| File.basename(f) } - ['template'] |
@@ -204,14 +205,14 @@ namespace :test do | @@ -204,14 +205,14 @@ namespace :test do | ||
204 | @all_tasks.each do |taskname| | 205 | @all_tasks.each do |taskname| |
205 | desc "Run #{taskname} tests for all plugins" | 206 | desc "Run #{taskname} tests for all plugins" |
206 | task taskname do | 207 | task taskname do |
207 | - test_sequence(@all_plugins - @broken_plugins, taskname) | 208 | + test_sequence(@all_plugins - $broken_plugins, taskname) |
208 | end | 209 | end |
209 | end | 210 | end |
210 | end | 211 | end |
211 | 212 | ||
212 | desc "Run all tests for all plugins" | 213 | desc "Run all tests for all plugins" |
213 | task :noosfero_plugins do | 214 | task :noosfero_plugins do |
214 | - test_sequence(@all_plugins - @broken_plugins, @all_tasks) do |failed| | 215 | + test_sequence(@all_plugins - $broken_plugins, @all_tasks) do |failed| |
215 | plugins_status_report(failed) | 216 | plugins_status_report(failed) |
216 | end | 217 | end |
217 | end | 218 | end |
@@ -228,7 +229,7 @@ def plugins_status_report(failed) | @@ -228,7 +229,7 @@ def plugins_status_report(failed) | ||
228 | printf ('-' * w) + ' ' + ('-' * 20) + "\n" | 229 | printf ('-' * w) + ' ' + ('-' * 20) + "\n" |
229 | 230 | ||
230 | @all_plugins.each do |plugin| | 231 | @all_plugins.each do |plugin| |
231 | - if @broken_plugins.include?(plugin) | 232 | + if $broken_plugins.include?(plugin) |
232 | status = "SKIP" | 233 | status = "SKIP" |
233 | elsif !failed[plugin] || failed[plugin].empty? | 234 | elsif !failed[plugin] || failed[plugin].empty? |
234 | status = "PASS" | 235 | status = "PASS" |
plugins/bsc/views/shared/_fields.html.erb
@@ -31,7 +31,7 @@ | @@ -31,7 +31,7 @@ | ||
31 | <%= hidden_field_tag 'old_bsc_identifier', profile.identifier %> | 31 | <%= hidden_field_tag 'old_bsc_identifier', profile.identifier %> |
32 | <div id="bsc-formitem"> | 32 | <div id="bsc-formitem"> |
33 | <%= content_tag('code', | 33 | <%= content_tag('code', |
34 | - environment.top_url + '/ ' + | 34 | + top_url + '/ ' + |
35 | text_field(:profile_data, :identifier, :onchange => "warn_value_change()", :size => 25) | 35 | text_field(:profile_data, :identifier, :onchange => "warn_value_change()", :size => 25) |
36 | ) + | 36 | ) + |
37 | content_tag('div', | 37 | content_tag('div', |
plugins/statistics/lib/statistics_block.rb
@@ -85,7 +85,7 @@ class StatisticsBlock < Block | @@ -85,7 +85,7 @@ class StatisticsBlock < Block | ||
85 | 85 | ||
86 | def enterprises | 86 | def enterprises |
87 | if owner.kind_of?(Environment) || owner.kind_of?(Person) | 87 | if owner.kind_of?(Environment) || owner.kind_of?(Person) |
88 | - owner.enterprises.visible.count | 88 | + owner.enterprises.visible.enabled.count |
89 | else | 89 | else |
90 | 0 | 90 | 0 |
91 | end | 91 | end |
plugins/statistics/test/unit/statistics_block_test.rb
@@ -126,6 +126,19 @@ class StatisticsBlockTest < ActiveSupport::TestCase | @@ -126,6 +126,19 @@ class StatisticsBlockTest < ActiveSupport::TestCase | ||
126 | assert_equal 2, b.enterprises | 126 | assert_equal 2, b.enterprises |
127 | end | 127 | end |
128 | 128 | ||
129 | + should 'return the amount of enabled enterprises' do | ||
130 | + b = StatisticsBlock.new | ||
131 | + e = fast_create(Environment) | ||
132 | + | ||
133 | + fast_create(Enterprise, :environment_id => e.id) | ||
134 | + fast_create(Enterprise, :environment_id => e.id) | ||
135 | + fast_create(Enterprise, :enabled => false, :environment_id => e.id) | ||
136 | + | ||
137 | + b.expects(:owner).at_least_once.returns(e) | ||
138 | + | ||
139 | + assert_equal 2, b.enterprises | ||
140 | + end | ||
141 | + | ||
129 | should 'categories return the amount of categories of the Environment' do | 142 | should 'categories return the amount of categories of the Environment' do |
130 | b = StatisticsBlock.new | 143 | b = StatisticsBlock.new |
131 | e = fast_create(Environment) | 144 | e = fast_create(Environment) |
public/designs/themes/noosfero/site_title.html.erb
public/designs/themes/profile-base/site_title.html.erb
1 | <% if File.exists?(File.join(Rails.root, 'public', "/designs/themes/#{environment.theme}/images/thin-logo.png")) %> | 1 | <% if File.exists?(File.join(Rails.root, 'public', "/designs/themes/#{environment.theme}/images/thin-logo.png")) %> |
2 | - <%= link_to(image_tag("/designs/themes/#{environment.theme}/images/thin-logo.png"), environment.top_url) %> | 2 | + <%= link_to(image_tag("/designs/themes/#{environment.theme}/images/thin-logo.png"), top_url) %> |
3 | <% else %> | 3 | <% else %> |
4 | - <%= link_to(image_tag("/designs/themes/noosfero/images/thin-logo.png"), environment.top_url) %> | 4 | + <%= link_to(image_tag("/designs/themes/noosfero/images/thin-logo.png"), top_url) %> |
5 | <% end %> | 5 | <% end %> |
test/functional/cms_controller_test.rb
@@ -1678,6 +1678,15 @@ class CmsControllerTest < ActionController::TestCase | @@ -1678,6 +1678,15 @@ class CmsControllerTest < ActionController::TestCase | ||
1678 | assert_equal license, article.license | 1678 | assert_equal license, article.license |
1679 | end | 1679 | end |
1680 | 1680 | ||
1681 | + should 'not display license field if there is no license availabe in environment' do | ||
1682 | + article = fast_create(Article, :profile_id => profile.id) | ||
1683 | + License.delete_all | ||
1684 | + login_as(profile.identifier) | ||
1685 | + | ||
1686 | + get :new, :profile => profile.identifier, :type => 'TinyMceArticle' | ||
1687 | + assert_no_tag :tag => 'select', :attributes => {:id => 'article_license_id'} | ||
1688 | + end | ||
1689 | + | ||
1681 | should 'list folders options to move content' do | 1690 | should 'list folders options to move content' do |
1682 | article = fast_create(Article, :profile_id => profile.id) | 1691 | article = fast_create(Article, :profile_id => profile.id) |
1683 | f1 = fast_create(Folder, :profile_id => profile.id) | 1692 | f1 = fast_create(Folder, :profile_id => profile.id) |
test/unit/environment_test.rb
@@ -1627,4 +1627,26 @@ class EnvironmentTest < ActiveSupport::TestCase | @@ -1627,4 +1627,26 @@ class EnvironmentTest < ActiveSupport::TestCase | ||
1627 | 1627 | ||
1628 | assert_equal 'Welcome to the environment', environment.signup_welcome_screen_body | 1628 | assert_equal 'Welcome to the environment', environment.signup_welcome_screen_body |
1629 | end | 1629 | end |
1630 | + | ||
1631 | + should 'has_license be true if there is one license in enviroment' do | ||
1632 | + e = fast_create(Environment) | ||
1633 | + fast_create(License, :name => 'Some', :environment_id => e.id) | ||
1634 | + | ||
1635 | + assert e.has_license? | ||
1636 | + end | ||
1637 | + | ||
1638 | + should 'has_license be true if there is many licenses in enviroment' do | ||
1639 | + e = fast_create(Environment) | ||
1640 | + fast_create(License, :name => 'Some', :environment_id => e.id) | ||
1641 | + fast_create(License, :name => 'Another', :environment_id => e.id) | ||
1642 | + | ||
1643 | + assert e.has_license? | ||
1644 | + end | ||
1645 | + | ||
1646 | + should 'has_license be false if there is no license in enviroment' do | ||
1647 | + e = fast_create(Environment) | ||
1648 | + | ||
1649 | + assert !e.has_license? | ||
1650 | + end | ||
1651 | + | ||
1630 | end | 1652 | end |
test/unit/profile_test.rb
@@ -840,6 +840,14 @@ class ProfileTest < ActiveSupport::TestCase | @@ -840,6 +840,14 @@ class ProfileTest < ActiveSupport::TestCase | ||
840 | assert_equal 'environment footer', profile.custom_footer | 840 | assert_equal 'environment footer', profile.custom_footer |
841 | end | 841 | end |
842 | 842 | ||
843 | + should 'sanitize custom header and footer' do | ||
844 | + p = fast_create(Profile) | ||
845 | + script_kiddie_code = '<script>alert("look mom, I am a hacker!")</script>' | ||
846 | + p.update_header_and_footer(script_kiddie_code, script_kiddie_code) | ||
847 | + assert_no_tag_in_string p.custom_header, tag: 'script' | ||
848 | + assert_no_tag_in_string p.custom_footer, tag: 'script' | ||
849 | + end | ||
850 | + | ||
843 | should 'store theme' do | 851 | should 'store theme' do |
844 | p = build(Profile, :theme => 'my-shiny-theme') | 852 | p = build(Profile, :theme => 'my-shiny-theme') |
845 | assert_equal 'my-shiny-theme', p.theme | 853 | assert_equal 'my-shiny-theme', p.theme |
@@ -1555,8 +1563,6 @@ class ProfileTest < ActiveSupport::TestCase | @@ -1555,8 +1563,6 @@ class ProfileTest < ActiveSupport::TestCase | ||
1555 | profile.address = "<h1><</h2< Malformed >> html >< tag" | 1563 | profile.address = "<h1><</h2< Malformed >> html >< tag" |
1556 | profile.contact_phone = "<h1<< Malformed ><>>> html >< tag" | 1564 | profile.contact_phone = "<h1<< Malformed ><>>> html >< tag" |
1557 | profile.description = "<h1<a> Malformed >> html ></a>< tag" | 1565 | profile.description = "<h1<a> Malformed >> html ></a>< tag" |
1558 | - profile.custom_header = "<h1<a>><<> Malformed >> html ></a>< tag" | ||
1559 | - profile.custom_footer = "<h1> Malformed <><< html ></a>< tag" | ||
1560 | profile.valid? | 1566 | profile.valid? |
1561 | 1567 | ||
1562 | assert_no_match /[<>]/, profile.name | 1568 | assert_no_match /[<>]/, profile.name |
@@ -1568,6 +1574,16 @@ class ProfileTest < ActiveSupport::TestCase | @@ -1568,6 +1574,16 @@ class ProfileTest < ActiveSupport::TestCase | ||
1568 | assert_no_match /[<>]/, profile.custom_footer | 1574 | assert_no_match /[<>]/, profile.custom_footer |
1569 | end | 1575 | end |
1570 | 1576 | ||
1577 | + should 'escape malformed html tags in header and footer' do | ||
1578 | + profile = fast_create(Profile) | ||
1579 | + profile.custom_header = "<h1<a>><<> Malformed >> html ></a>< tag" | ||
1580 | + profile.custom_footer = "<h1> Malformed <><< html ></a>< tag" | ||
1581 | + profile.save | ||
1582 | + | ||
1583 | + assert_no_match /[<>]/, profile.custom_header | ||
1584 | + assert_no_match /[<>]/, profile.custom_footer | ||
1585 | + end | ||
1586 | + | ||
1571 | should 'not sanitize html comments' do | 1587 | should 'not sanitize html comments' do |
1572 | profile = Profile.new | 1588 | profile = Profile.new |
1573 | profile.custom_header = '<p><!-- <asdf> << aasdfa >>> --> <h1> Wellformed html code </h1>' | 1589 | profile.custom_header = '<p><!-- <asdf> << aasdfa >>> --> <h1> Wellformed html code </h1>' |
@@ -1973,4 +1989,14 @@ class ProfileTest < ActiveSupport::TestCase | @@ -1973,4 +1989,14 @@ class ProfileTest < ActiveSupport::TestCase | ||
1973 | assert_equal true, profile.disable | 1989 | assert_equal true, profile.disable |
1974 | assert_equal false, profile.visible? | 1990 | assert_equal false, profile.visible? |
1975 | end | 1991 | end |
1992 | + | ||
1993 | + should 'fetch enabled profiles' do | ||
1994 | + p1 = fast_create(Profile, :enabled => true) | ||
1995 | + p2 = fast_create(Profile, :enabled => true) | ||
1996 | + p3 = fast_create(Profile, :enabled => false) | ||
1997 | + | ||
1998 | + assert_includes Profile.enabled, p1 | ||
1999 | + assert_includes Profile.enabled, p2 | ||
2000 | + assert_not_includes Profile.enabled, p3 | ||
2001 | + end | ||
1976 | end | 2002 | end |
vendor/plugins/noosfero_urls/init.rb