Commit 1ef72f36f9f804a5f03347116faf24f2e49e6a6b
Exists in
master
and in
22 other branches
Merge branch 'stable' into rails235
Conflicts: app/controllers/public/content_viewer_controller.rb features/categories_block.feature test/functional/search_controller_test.rb
Showing
19 changed files
with
161 additions
and
137 deletions
Show diff stats
app/controllers/public/content_viewer_controller.rb
| @@ -50,7 +50,7 @@ class ContentViewerController < ApplicationController | @@ -50,7 +50,7 @@ class ContentViewerController < ApplicationController | ||
| 50 | end | 50 | end |
| 51 | 51 | ||
| 52 | # At this point the page will be showed | 52 | # At this point the page will be showed |
| 53 | - @page.hit | 53 | + @page.hit unless user_is_a_bot? |
| 54 | 54 | ||
| 55 | @page = FilePresenter.for @page | 55 | @page = FilePresenter.for @page |
| 56 | 56 | ||
| @@ -183,4 +183,13 @@ class ContentViewerController < ApplicationController | @@ -183,4 +183,13 @@ class ContentViewerController < ApplicationController | ||
| 183 | allowed | 183 | allowed |
| 184 | end | 184 | end |
| 185 | 185 | ||
| 186 | + def user_is_a_bot? | ||
| 187 | + user_agent= request.env["HTTP_USER_AGENT"] | ||
| 188 | + user_agent.blank? || | ||
| 189 | + user_agent.match(/bot/) || | ||
| 190 | + user_agent.match(/spider/) || | ||
| 191 | + user_agent.match(/crawler/) || | ||
| 192 | + user_agent.match(/\(.*https?:\/\/.*\)/) | ||
| 193 | + end | ||
| 194 | + | ||
| 186 | end | 195 | end |
app/controllers/public/events_controller.rb
| @@ -21,7 +21,7 @@ class EventsController < PublicController | @@ -21,7 +21,7 @@ class EventsController < PublicController | ||
| 21 | 21 | ||
| 22 | def events_by_day | 22 | def events_by_day |
| 23 | @date = build_date(params[:year], params[:month], params[:day]) | 23 | @date = build_date(params[:year], params[:month], params[:day]) |
| 24 | - @events = profile.events.by_day(@date) | 24 | + @events = profile.events.by_day(@date).paginate(:per_page => per_page, :page => params[:page]) |
| 25 | render :partial => 'events' | 25 | render :partial => 'events' |
| 26 | end | 26 | end |
| 27 | 27 |
features/balloon.feature
| @@ -8,6 +8,7 @@ Feature: balloon | @@ -8,6 +8,7 @@ Feature: balloon | ||
| 8 | And the following communities | 8 | And the following communities |
| 9 | | identifier | name | | 9 | | identifier | name | |
| 10 | | sample | Sample | | 10 | | sample | Sample | |
| 11 | + And I am logged in as "joaosilva" | ||
| 11 | 12 | ||
| 12 | @selenium | 13 | @selenium |
| 13 | Scenario: I should not see trigger if not enabled | 14 | Scenario: I should not see trigger if not enabled |
features/categories_block.feature
| @@ -24,16 +24,12 @@ Feature: categories_block | @@ -24,16 +24,12 @@ Feature: categories_block | ||
| 24 | | owner | type | | 24 | | owner | type | |
| 25 | | environment | CategoriesBlock | | 25 | | environment | CategoriesBlock | |
| 26 | And I am logged in as admin | 26 | And I am logged in as admin |
| 27 | + And I go to /admin/environment_design | ||
| 28 | + And display ".button-bar" | ||
| 27 | 29 | ||
| 28 | - # Note that this @ignore-hidden-elements only works for seeing hidden | ||
| 29 | - # elements. It actually doesn't work for following hidden link or pressing | ||
| 30 | - # hidden buttons. That's why it's necessary to use this display hack to show | ||
| 31 | - # the link. | ||
| 32 | - @selenium @ignore-hidden-elements | 30 | + @selenium |
| 33 | Scenario: List just product categories | 31 | Scenario: List just product categories |
| 34 | - Given I go to /admin/environment_design | ||
| 35 | - And display ".categories-block .button-bar" | ||
| 36 | - And I follow "Edit" within ".categories-block" | 32 | + Given I follow "Edit" within ".categories-block" |
| 37 | And I check "Product" | 33 | And I check "Product" |
| 38 | When I press "Save" | 34 | When I press "Save" |
| 39 | Then I should see "Food" | 35 | Then I should see "Food" |
| @@ -42,11 +38,9 @@ Feature: categories_block | @@ -42,11 +38,9 @@ Feature: categories_block | ||
| 42 | And "Steak" should not be visible within "span#category-name" | 38 | And "Steak" should not be visible within "span#category-name" |
| 43 | And "Fiction" should not be visible within "span#category-name" | 39 | And "Fiction" should not be visible within "span#category-name" |
| 44 | 40 | ||
| 45 | - @selenium @ignore-hidden-elements | 41 | + @selenium |
| 46 | Scenario: Show submenu if it exists | 42 | Scenario: Show submenu if it exists |
| 47 | - Given I go to /admin/environment_design | ||
| 48 | - And display ".categories-block .button-bar" | ||
| 49 | - And I follow "Edit" within ".categories-block" | 43 | + Given I follow "Edit" within ".categories-block" |
| 50 | And I check "Product" | 44 | And I check "Product" |
| 51 | And I press "Save" | 45 | And I press "Save" |
| 52 | Then I should see "Food" | 46 | Then I should see "Food" |
| @@ -61,11 +55,9 @@ Feature: categories_block | @@ -61,11 +55,9 @@ Feature: categories_block | ||
| 61 | And I should see "Steak" | 55 | And I should see "Steak" |
| 62 | And I should not see "Fiction" | 56 | And I should not see "Fiction" |
| 63 | 57 | ||
| 64 | - @selenium @ignore-hidden-elements | 58 | + @selenium |
| 65 | Scenario: Show only one submenu per time | 59 | Scenario: Show only one submenu per time |
| 66 | - Given I go to /admin/environment_design | ||
| 67 | - And display ".categories-block .button-bar" | ||
| 68 | - And I follow "Edit" within ".categories-block" | 60 | + Given I follow "Edit" within ".categories-block" |
| 69 | And I check "Product" | 61 | And I check "Product" |
| 70 | And I press "Save" | 62 | And I press "Save" |
| 71 | Then I should see "Book" | 63 | Then I should see "Book" |
| @@ -73,20 +65,16 @@ Feature: categories_block | @@ -73,20 +65,16 @@ Feature: categories_block | ||
| 73 | When I follow "block_2_category_2" | 65 | When I follow "block_2_category_2" |
| 74 | Then I should see "Literature" | 66 | Then I should see "Literature" |
| 75 | 67 | ||
| 76 | - @selenium @ignore-hidden-elements | 68 | + @selenium |
| 77 | Scenario: List just general categories | 69 | Scenario: List just general categories |
| 78 | - Given I go to /admin/environment_design | ||
| 79 | - And display ".categories-block .button-bar" | ||
| 80 | - And I follow "Edit" within ".categories-block" | 70 | + Given I follow "Edit" within ".categories-block" |
| 81 | And I check "Generic category" | 71 | And I check "Generic category" |
| 82 | When I press "Save" | 72 | When I press "Save" |
| 83 | Then I should see "Wood" | 73 | Then I should see "Wood" |
| 84 | 74 | ||
| 85 | - @selenium @ignore-hidden-elements | 75 | + @selenium |
| 86 | Scenario: List just regions | 76 | Scenario: List just regions |
| 87 | - Given I go to /admin/environment_design | ||
| 88 | - And display ".categories-block .button-bar" | ||
| 89 | - And I follow "Edit" within ".categories-block" | 77 | + Given I follow "Edit" within ".categories-block" |
| 90 | And I check "Region" | 78 | And I check "Region" |
| 91 | When I press "Save" | 79 | When I press "Save" |
| 92 | Then I should see "Bahia" | 80 | Then I should see "Bahia" |
features/comment.feature
| @@ -39,7 +39,7 @@ Feature: comment | @@ -39,7 +39,7 @@ Feature: comment | ||
| 39 | When I press "Post comment" | 39 | When I press "Post comment" |
| 40 | Then I should see "Hey ho, let's go" | 40 | Then I should see "Hey ho, let's go" |
| 41 | 41 | ||
| 42 | - @selenium | 42 | + @selenium-fixme |
| 43 | Scenario: redirect to right place after comment a picture | 43 | Scenario: redirect to right place after comment a picture |
| 44 | Given the following files | 44 | Given the following files |
| 45 | | owner | file | mime | | 45 | | owner | file | mime | |
| @@ -134,4 +134,4 @@ Feature: comment | @@ -134,4 +134,4 @@ Feature: comment | ||
| 134 | | Post one | joaosilva | Hello | Hello | | 134 | | Post one | joaosilva | Hello | Hello | |
| 135 | When I go to /joaosilva/forum/post-one | 135 | When I go to /joaosilva/forum/post-one |
| 136 | And I select "Oldest first" from "comment_order" within ".comment-order" | 136 | And I select "Oldest first" from "comment_order" within ".comment-order" |
| 137 | - Then I should see "Hi all" within ".article-comment" | ||
| 138 | \ No newline at end of file | 137 | \ No newline at end of file |
| 138 | + Then I should see "Hi all" within ".article-comment" |
features/short_filename.feature
| @@ -1,21 +0,0 @@ | @@ -1,21 +0,0 @@ | ||
| 1 | -Feature: sitemap | ||
| 2 | - As a noosfero user | ||
| 3 | - I want to list articles | ||
| 4 | - | ||
| 5 | - Background: | ||
| 6 | - Given I am on the homepage | ||
| 7 | - And the following users | ||
| 8 | - | login | name | | ||
| 9 | - | joaosilva | Joao Silva | | ||
| 10 | - And the following files | ||
| 11 | - | owner | file | mime | | ||
| 12 | - | joaosilva | AGENDA_CULTURA_-_FESTA_DE_VAQUEIROS_PONTO_DE_SERRA_PRETA_BAIXA.txt | text/plain | | ||
| 13 | - | ||
| 14 | - Scenario: view a folder page | ||
| 15 | - When I am on /profile/joaosilva/sitemap | ||
| 16 | - Then I should see "AGENDA_CULTURA_-_FESTA_DE_VAQUEIRO(...).txt" | ||
| 17 | - | ||
| 18 | - Scenario: view the CMS | ||
| 19 | - Given I am logged in as "joaosilva" | ||
| 20 | - When I am on /myprofile/joaosilva/cms | ||
| 21 | - Then I should see "AGENDA_CULTURA_-_FESTA_DE_VAQUEIROS_PONTO_DE_SERRA_(...).txt" |
lib/feed_handler.rb
| @@ -51,7 +51,6 @@ class FeedHandler | @@ -51,7 +51,6 @@ class FeedHandler | ||
| 51 | end | 51 | end |
| 52 | 52 | ||
| 53 | def process(container) | 53 | def process(container) |
| 54 | - RAILS_DEFAULT_LOGGER.info("Processing %s with id = %d" % [container.class.name, container.id]) | ||
| 55 | begin | 54 | begin |
| 56 | container.class.transaction do | 55 | container.class.transaction do |
| 57 | if container.update_errors > FeedHandler.max_errors && container.fetched_at < (Time.now - FeedHandler.disabled_period) | 56 | if container.update_errors > FeedHandler.max_errors && container.fetched_at < (Time.now - FeedHandler.disabled_period) |
lib/file_presenter.rb
| @@ -50,6 +50,10 @@ class FilePresenter | @@ -50,6 +50,10 @@ class FilePresenter | ||
| 50 | nil | 50 | nil |
| 51 | end | 51 | end |
| 52 | 52 | ||
| 53 | + def download?(view=nil) | ||
| 54 | + false | ||
| 55 | + end | ||
| 56 | + | ||
| 53 | def short_description | 57 | def short_description |
| 54 | file_type = if content_type.present? | 58 | file_type = if content_type.present? |
| 55 | content_type.sub(/^application\//, '').sub(/^x-/, '').sub(/^image\//, '') | 59 | content_type.sub(/^application\//, '').sub(/^x-/, '').sub(/^image\//, '') |
lib/tasks/plugins_tests.rake
| @@ -25,51 +25,87 @@ def plugin_disabled_warning(plugin) | @@ -25,51 +25,87 @@ def plugin_disabled_warning(plugin) | ||
| 25 | puts "E: you should enable #{plugin} plugin before running it's tests!" | 25 | puts "E: you should enable #{plugin} plugin before running it's tests!" |
| 26 | end | 26 | end |
| 27 | 27 | ||
| 28 | -def run_tests(name, files_glob) | ||
| 29 | - files = Dir.glob(files_glob) | ||
| 30 | - if files.empty? | ||
| 31 | - puts "I: no tests to run (#{name})" | 28 | +def task2ext(task) |
| 29 | + (task == :selenium || task == :cucumber) ? :feature : :rb | ||
| 30 | +end | ||
| 31 | + | ||
| 32 | +def task2profile(task, plugin) | ||
| 33 | + if task == :cucumber | ||
| 34 | + return plugin | ||
| 35 | + elsif task == :selenium | ||
| 36 | + return "#{plugin}_selenium" | ||
| 32 | else | 37 | else |
| 33 | - sh 'testrb', '-Itest', *files | 38 | + return 'default' |
| 34 | end | 39 | end |
| 35 | end | 40 | end |
| 36 | 41 | ||
| 37 | -def run_cucumber(name, profile, files_glob) | ||
| 38 | - files = Dir.glob(files_glob) | ||
| 39 | - if files.empty? | ||
| 40 | - puts "I: no tests to run #{name}" | 42 | +def filename2plugin(filename) |
| 43 | + filename.split('/')[1] | ||
| 44 | +end | ||
| 45 | + | ||
| 46 | +def task2folder(task) | ||
| 47 | + result = case task.to_sym | ||
| 48 | + when :units | ||
| 49 | + :unit | ||
| 50 | + when :functionals | ||
| 51 | + :functional | ||
| 52 | + when :integration | ||
| 53 | + :integration | ||
| 54 | + when :cucumber | ||
| 55 | + :features | ||
| 56 | + when :selenium | ||
| 57 | + :features | ||
| 58 | + end | ||
| 59 | + | ||
| 60 | + return result | ||
| 61 | +end | ||
| 62 | + | ||
| 63 | +def run_test(name, files) | ||
| 64 | + files = Array(files) | ||
| 65 | + plugin = filename2plugin(files.first) | ||
| 66 | + if name == :cucumber || name == :selenium | ||
| 67 | + run_cucumber task2_profile(name, plugin), files | ||
| 41 | else | 68 | else |
| 42 | - sh 'xvfb-run', 'ruby', '-S', 'cucumber', '--profile', profile.to_s, '--format', ENV['CUCUMBER_FORMAT'] || 'progress' , *files | 69 | + run_testrb files |
| 43 | end | 70 | end |
| 44 | end | 71 | end |
| 45 | 72 | ||
| 46 | -def plugin_test_task(name, plugin, files_glob) | ||
| 47 | - desc "Run #{name} tests for #{plugin_name(plugin)}" | ||
| 48 | - task name => 'db:test:plugins:prepare' do |t| | ||
| 49 | - if plugin_enabled?(plugin) | ||
| 50 | - run_tests t.name, files_glob | ||
| 51 | - else | ||
| 52 | - plugin_disabled_warning(plugin) | 73 | +def run_testrb(files) |
| 74 | + sh 'testrb', '-Itest', *files | ||
| 75 | +end | ||
| 76 | + | ||
| 77 | +def run_cucumber(profile, files) | ||
| 78 | + sh 'xvfb-run', 'ruby', '-S', 'cucumber', '--profile', profile.to_s, '--format', ENV['CUCUMBER_FORMAT'] || 'progress' , *files | ||
| 79 | +end | ||
| 80 | + | ||
| 81 | +def custom_run(name, files, run=:individually) | ||
| 82 | + case run | ||
| 83 | + when :all | ||
| 84 | + run_test name, files | ||
| 85 | + when :individually | ||
| 86 | + files.each do |file| | ||
| 87 | + run_test name, file | ||
| 53 | end | 88 | end |
| 89 | + when :by_plugin | ||
| 54 | end | 90 | end |
| 55 | end | 91 | end |
| 56 | 92 | ||
| 57 | -def plugin_cucumber_task(name, plugin, files_glob) | ||
| 58 | - desc "Run #{name} tests for #{plugin_name(plugin)}" | ||
| 59 | - task name => 'db:test:plugins:prepare' do |t| | ||
| 60 | - if plugin_enabled?(plugin) | ||
| 61 | - run_cucumber t.name, plugin, files_glob | ||
| 62 | - else | ||
| 63 | - plugin_disabled_warning(plugin) | ||
| 64 | - end | 93 | +def run_tests(name, plugins, run=:individually) |
| 94 | + plugins = Array(plugins) | ||
| 95 | + glob = "plugins/{#{plugins.join(',')}}/test/#{task2folder(name)}/**/*.#{task2ext(name)}" | ||
| 96 | + files = Dir.glob(glob) | ||
| 97 | + if files.empty? | ||
| 98 | + puts "I: no tests to run #{name}" | ||
| 99 | + else | ||
| 100 | + custom_run(name, files, run) | ||
| 65 | end | 101 | end |
| 66 | end | 102 | end |
| 67 | 103 | ||
| 68 | -def plugin_selenium_task(name, plugin, files_glob) | 104 | +def plugin_test_task(name, plugin, run=:individually) |
| 69 | desc "Run #{name} tests for #{plugin_name(plugin)}" | 105 | desc "Run #{name} tests for #{plugin_name(plugin)}" |
| 70 | task name => 'db:test:plugins:prepare' do |t| | 106 | task name => 'db:test:plugins:prepare' do |t| |
| 71 | if plugin_enabled?(plugin) | 107 | if plugin_enabled?(plugin) |
| 72 | - run_cucumber t.name, "#{plugin}_selenium", files_glob | 108 | + run_tests(name, plugin, run) |
| 73 | else | 109 | else |
| 74 | plugin_disabled_warning(plugin) | 110 | plugin_disabled_warning(plugin) |
| 75 | end | 111 | end |
| @@ -98,28 +134,28 @@ namespace :test do | @@ -98,28 +134,28 @@ namespace :test do | ||
| 98 | namespace :noosfero_plugins do | 134 | namespace :noosfero_plugins do |
| 99 | all_plugins.each do |plugin| | 135 | all_plugins.each do |plugin| |
| 100 | namespace plugin do | 136 | namespace plugin do |
| 101 | - plugin_test_task :units, plugin, "plugins/#{plugin}/test/unit/**/*.rb" | ||
| 102 | - plugin_test_task :functionals, plugin, "plugins/#{plugin}/test/functional/**/*.rb" | ||
| 103 | - plugin_test_task :integration, plugin, "plugins/#{plugin}/test/integration/**/*.rb" | ||
| 104 | - plugin_cucumber_task :cucumber, plugin, "plugins/#{plugin}/features/**/*.feature" | ||
| 105 | - plugin_selenium_task :selenium, plugin, "plugins/#{plugin}/features/**/*.feature" | 137 | + plugin_test_task :units, plugin |
| 138 | + plugin_test_task :functionals, plugin | ||
| 139 | + plugin_test_task :integration, plugin | ||
| 140 | + plugin_test_task :cucumber, plugin | ||
| 141 | + plugin_test_task :selenium, plugin | ||
| 106 | end | 142 | end |
| 107 | 143 | ||
| 108 | test_sequence_task(plugin, plugin, "#{plugin}:units", "#{plugin}:functionals", "#{plugin}:integration", "#{plugin}:cucumber", "#{plugin}:selenium") | 144 | test_sequence_task(plugin, plugin, "#{plugin}:units", "#{plugin}:functionals", "#{plugin}:integration", "#{plugin}:cucumber", "#{plugin}:selenium") |
| 109 | end | 145 | end |
| 110 | 146 | ||
| 111 | - { :units => :unit , :functionals => :functional , :integration => :integration }.each do |taskname,folder| | 147 | + [:units, :functionals, :integration].each do |taskname| |
| 112 | task taskname => 'db:test:plugins:prepare' do |t| | 148 | task taskname => 'db:test:plugins:prepare' do |t| |
| 113 | - run_tests t.name, "plugins/{#{enabled_plugins.join(',')}}/test/#{folder}/**/*.rb" | 149 | + run_tests taskname, enabled_plugins |
| 114 | end | 150 | end |
| 115 | end | 151 | end |
| 116 | 152 | ||
| 117 | task :cucumber => 'db:test:plugins:prepare' do |t| | 153 | task :cucumber => 'db:test:plugins:prepare' do |t| |
| 118 | - run_cucumber t.name, :default, "plugins/{#{enabled_plugins.join(',')}}/test/features/**/*.features" | 154 | + run_tests :cucumber, enabled_plugins |
| 119 | end | 155 | end |
| 120 | 156 | ||
| 121 | task :selenium => 'db:test:plugins:prepare' do |t| | 157 | task :selenium => 'db:test:plugins:prepare' do |t| |
| 122 | - run_cucumber t.name, :selenium, "plugins/{#{enabled_plugins.join(',')}}/test/features/**/*.features" | 158 | + run_tests :selenium, enabled_plugins |
| 123 | end | 159 | end |
| 124 | 160 | ||
| 125 | task :temp_enable_all_plugins do | 161 | task :temp_enable_all_plugins do |
plugins/anti_spam/lib/anti_spam_plugin/wrapper.rb
| @@ -2,9 +2,10 @@ class AntiSpamPlugin::Wrapper < SimpleDelegator | @@ -2,9 +2,10 @@ class AntiSpamPlugin::Wrapper < SimpleDelegator | ||
| 2 | include Rakismet::Model | 2 | include Rakismet::Model |
| 3 | 3 | ||
| 4 | @@wrappers = [] | 4 | @@wrappers = [] |
| 5 | + cattr_accessor :wrappers | ||
| 5 | 6 | ||
| 6 | def self.wrap(object) | 7 | def self.wrap(object) |
| 7 | - wrapper = @@wrappers.find { |wrapper| wrapper.wraps?(object) } | 8 | + wrapper = wrappers.find { |wrapper| wrapper.wraps?(object) } |
| 8 | wrapper ? wrapper.new(object) : object | 9 | wrapper ? wrapper.new(object) : object |
| 9 | end | 10 | end |
| 10 | 11 | ||
| @@ -13,6 +14,10 @@ class AntiSpamPlugin::Wrapper < SimpleDelegator | @@ -13,6 +14,10 @@ class AntiSpamPlugin::Wrapper < SimpleDelegator | ||
| 13 | end | 14 | end |
| 14 | 15 | ||
| 15 | def self.inherited(child) | 16 | def self.inherited(child) |
| 16 | - @@wrappers << child | 17 | + wrappers << child |
| 17 | end | 18 | end |
| 18 | end | 19 | end |
| 20 | + | ||
| 21 | +Dir.glob(File.join(AntiSpamPlugin.root_path, 'lib', 'anti_spam_plugin', '*_wrapper.rb')) do |file| | ||
| 22 | + load(file) | ||
| 23 | +end |
plugins/comment_group/test/functional/comment_group_plugin_profile_controller_test.rb
| @@ -36,10 +36,10 @@ class CommentGroupPluginProfileControllerTest < ActionController::TestCase | @@ -36,10 +36,10 @@ class CommentGroupPluginProfileControllerTest < ActionController::TestCase | ||
| 36 | end | 36 | end |
| 37 | 37 | ||
| 38 | should 'show first page comments only' do | 38 | should 'show first page comments only' do |
| 39 | - comment1 = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'secondpage', :group_id => 0) | ||
| 40 | - comment2 = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'firstpage 1', :group_id => 0) | ||
| 41 | - comment3 = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'firstpage 2', :group_id => 0) | ||
| 42 | - comment4 = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'firstpage 3', :group_id => 0) | 39 | + comment1 = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :created_at => Time.now, :body => 'secondpage', :group_id => 0) |
| 40 | + comment2 = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :created_at => Time.now - 1.day, :body => 'firstpage 1', :group_id => 0) | ||
| 41 | + comment3 = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :created_at => Time.now - 2.days, :body => 'firstpage 2', :group_id => 0) | ||
| 42 | + comment4 = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :created_at => Time.now - 3.days, :body => 'firstpage 3', :group_id => 0) | ||
| 43 | xhr :get, :view_comments, :profile => @profile.identifier, :article_id => article.id, :group_id => 0 | 43 | xhr :get, :view_comments, :profile => @profile.identifier, :article_id => article.id, :group_id => 0 |
| 44 | assert_match /firstpage 1/, @response.body | 44 | assert_match /firstpage 1/, @response.body |
| 45 | assert_match /firstpage 2/, @response.body | 45 | assert_match /firstpage 2/, @response.body |
plugins/community_track/test/functional/community_track_plugin_content_viewer_controller_test.rb
| @@ -10,7 +10,7 @@ end | @@ -10,7 +10,7 @@ end | ||
| 10 | class ContentViewerControllerTest < ActionController::TestCase | 10 | class ContentViewerControllerTest < ActionController::TestCase |
| 11 | 11 | ||
| 12 | def setup | 12 | def setup |
| 13 | - @profile = fast_create(Community) | 13 | + @profile = Community.create!(:name => 'Sample community', :identifier => 'sample-community') |
| 14 | @track = create_track('track', @profile) | 14 | @track = create_track('track', @profile) |
| 15 | @step = CommunityTrackPlugin::Step.create!(:name => 'step1', :body => 'body', :profile => @profile, :parent => @track, :published => false, :end_date => Date.today, :start_date => Date.today, :tool_type => TinyMceArticle.name) | 15 | @step = CommunityTrackPlugin::Step.create!(:name => 'step1', :body => 'body', :profile => @profile, :parent => @track, :published => false, :end_date => Date.today, :start_date => Date.today, :tool_type => TinyMceArticle.name) |
| 16 | 16 | ||
| @@ -87,43 +87,35 @@ class ContentViewerControllerTest < ActionController::TestCase | @@ -87,43 +87,35 @@ class ContentViewerControllerTest < ActionController::TestCase | ||
| 87 | end | 87 | end |
| 88 | 88 | ||
| 89 | should 'render a div with block id for track list block' do | 89 | should 'render a div with block id for track list block' do |
| 90 | - box = fast_create(Box, :owner_id => @profile.id, :owner_type => @profile.class.name) | ||
| 91 | - @block = CommunityTrackPlugin::TrackListBlock.create!(:box => box) | ||
| 92 | - @profile.boxes << box | 90 | + @block = CommunityTrackPlugin::TrackListBlock.create!(:box => @profile.boxes.last) |
| 93 | get :view_page, @step.url | 91 | get :view_page, @step.url |
| 94 | assert_tag :tag => 'div', :attributes => { :class => 'track_list', :id => "track_list_#{@block.id}" } | 92 | assert_tag :tag => 'div', :attributes => { :class => 'track_list', :id => "track_list_#{@block.id}" } |
| 95 | end | 93 | end |
| 96 | 94 | ||
| 97 | should 'render a div with block id for track card list block' do | 95 | should 'render a div with block id for track card list block' do |
| 98 | - box = fast_create(Box, :owner_id => @profile.id, :owner_type => @profile.class.name) | ||
| 99 | - @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => box) | ||
| 100 | - @profile.boxes << box | 96 | + @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.last) |
| 101 | get :view_page, @step.url | 97 | get :view_page, @step.url |
| 102 | assert_tag :tag => 'div', :attributes => { :class => 'track_list', :id => "track_list_#{@block.id}" } | 98 | assert_tag :tag => 'div', :attributes => { :class => 'track_list', :id => "track_list_#{@block.id}" } |
| 103 | end | 99 | end |
| 104 | 100 | ||
| 105 | should 'render tracks in track list block' do | 101 | should 'render tracks in track list block' do |
| 106 | - box = fast_create(Box, :owner_id => @profile.id, :owner_type => @profile.class.name) | ||
| 107 | - @block = CommunityTrackPlugin::TrackListBlock.create!(:box => box) | ||
| 108 | - @profile.boxes << box | 102 | + @block = CommunityTrackPlugin::TrackListBlock.create!(:box => @profile.boxes.last) |
| 109 | get :view_page, @step.url | 103 | get :view_page, @step.url |
| 104 | + file = File.open('result.html', 'w+') | ||
| 105 | + file.write(@response.body) | ||
| 106 | + file.close | ||
| 110 | assert_tag :tag => 'div', :attributes => { :class => "item category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'steps' }, :descendant => { :tag => 'span', :attributes => { :class => "step #{@block.status_class(@step)}" } } } | 107 | assert_tag :tag => 'div', :attributes => { :class => "item category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'steps' }, :descendant => { :tag => 'span', :attributes => { :class => "step #{@block.status_class(@step)}" } } } |
| 111 | end | 108 | end |
| 112 | 109 | ||
| 113 | should 'render tracks in track card list block' do | 110 | should 'render tracks in track card list block' do |
| 114 | - box = fast_create(Box, :owner_id => @profile.id, :owner_type => @profile.class.name) | ||
| 115 | - @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => box) | ||
| 116 | - @profile.boxes << box | 111 | + @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.last) |
| 117 | get :view_page, @step.url | 112 | get :view_page, @step.url |
| 118 | assert_tag :tag => 'div', :attributes => { :class => "item_card category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'track_content' } } | 113 | assert_tag :tag => 'div', :attributes => { :class => "item_card category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'track_content' } } |
| 119 | assert_tag :tag => 'div', :attributes => { :class => "item_card category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'track_stats' } } | 114 | assert_tag :tag => 'div', :attributes => { :class => "item_card category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'track_stats' } } |
| 120 | end | 115 | end |
| 121 | 116 | ||
| 122 | should 'render link to display more tracks in track list block' do | 117 | should 'render link to display more tracks in track list block' do |
| 123 | - box = fast_create(Box, :owner_id => @profile.id, :owner_type => @profile.class.name) | ||
| 124 | - @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => box) | ||
| 125 | - @profile.boxes << box | ||
| 126 | - | 118 | + @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.last) |
| 127 | (@block.limit+1).times { |i| create_track("track#{i}", @profile) } | 119 | (@block.limit+1).times { |i| create_track("track#{i}", @profile) } |
| 128 | 120 | ||
| 129 | get :view_page, @step.url | 121 | get :view_page, @step.url |
| @@ -131,9 +123,7 @@ class ContentViewerControllerTest < ActionController::TestCase | @@ -131,9 +123,7 @@ class ContentViewerControllerTest < ActionController::TestCase | ||
| 131 | end | 123 | end |
| 132 | 124 | ||
| 133 | should 'render link to show all tracks in track list block' do | 125 | should 'render link to show all tracks in track list block' do |
| 134 | - box = fast_create(Box, :owner_id => @profile.id, :owner_type => @profile.class.name) | ||
| 135 | - @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => box) | ||
| 136 | - @profile.boxes << box | 126 | + @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.last) |
| 137 | @block.more_another_page = true | 127 | @block.more_another_page = true |
| 138 | @block.save! | 128 | @block.save! |
| 139 | 129 |
plugins/recent_content/test/unit/recent_content_block_test.rb
| @@ -61,9 +61,9 @@ class RecentContentBlockTest < ActiveSupport::TestCase | @@ -61,9 +61,9 @@ class RecentContentBlockTest < ActiveSupport::TestCase | ||
| 61 | 61 | ||
| 62 | root = fast_create(Blog, :name => 'test-blog', :profile_id => profile.id) | 62 | root = fast_create(Blog, :name => 'test-blog', :profile_id => profile.id) |
| 63 | 63 | ||
| 64 | - a1 = fast_create(TextileArticle, :name => 'article #1', :profile_id => profile.id, :parent_id => root.id) | ||
| 65 | - a2 = fast_create(TextileArticle, :name => 'article #2', :profile_id => profile.id, :parent_id => root.id) | ||
| 66 | - a3 = fast_create(TextileArticle, :name => 'article #3', :profile_id => profile.id, :parent_id => root.id) | 64 | + a1 = fast_create(TextileArticle, :name => 'article #1', :profile_id => profile.id, :parent_id => root.id, :created_at => Time.now - 2.days) |
| 65 | + a2 = fast_create(TextileArticle, :name => 'article #2', :profile_id => profile.id, :parent_id => root.id, :created_at => Time.now - 1.days) | ||
| 66 | + a3 = fast_create(TextileArticle, :name => 'article #3', :profile_id => profile.id, :parent_id => root.id, :created_at => Time.now) | ||
| 67 | 67 | ||
| 68 | block = RecentContentBlock.new | 68 | block = RecentContentBlock.new |
| 69 | block.stubs(:holder).returns(profile) | 69 | block.stubs(:holder).returns(profile) |
test/functional/content_viewer_controller_test.rb
| @@ -72,9 +72,7 @@ class ContentViewerControllerTest < ActionController::TestCase | @@ -72,9 +72,7 @@ class ContentViewerControllerTest < ActionController::TestCase | ||
| 72 | get :view_page, :profile => 'someone', :page => [ '500.html' ] | 72 | get :view_page, :profile => 'someone', :page => [ '500.html' ] |
| 73 | 73 | ||
| 74 | assert_response :success | 74 | assert_response :success |
| 75 | - assert_match /^text\/html/, @response.headers['Content-Type'] | ||
| 76 | - assert @response.headers['Content-Disposition'].present? | ||
| 77 | - assert_match /attachment/, @response.headers['Content-Disposition'] | 75 | + assert_match /#{html.public_filename}/, @response.body |
| 78 | end | 76 | end |
| 79 | 77 | ||
| 80 | should 'produce a download-link when article is not text/html' do | 78 | should 'produce a download-link when article is not text/html' do |
| @@ -577,14 +575,6 @@ class ContentViewerControllerTest < ActionController::TestCase | @@ -577,14 +575,6 @@ class ContentViewerControllerTest < ActionController::TestCase | ||
| 577 | assert_template 'view_page' | 575 | assert_template 'view_page' |
| 578 | end | 576 | end |
| 579 | 577 | ||
| 580 | - should 'download data for image when not view' do | ||
| 581 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) | ||
| 582 | - get :view_page, :profile => profile.identifier, :page => file.explode_path | ||
| 583 | - | ||
| 584 | - assert_response :success | ||
| 585 | - assert_template nil | ||
| 586 | - end | ||
| 587 | - | ||
| 588 | should "display 'Upload files' when create children of image gallery" do | 578 | should "display 'Upload files' when create children of image gallery" do |
| 589 | login_as(profile.identifier) | 579 | login_as(profile.identifier) |
| 590 | f = Gallery.create!(:name => 'gallery', :profile => profile) | 580 | f = Gallery.create!(:name => 'gallery', :profile => profile) |
| @@ -1360,8 +1350,23 @@ class ContentViewerControllerTest < ActionController::TestCase | @@ -1360,8 +1350,23 @@ class ContentViewerControllerTest < ActionController::TestCase | ||
| 1360 | 1350 | ||
| 1361 | should 'display link to download of non-recognized file types on its page' do | 1351 | should 'display link to download of non-recognized file types on its page' do |
| 1362 | file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/test.txt', 'bin/unknown'), :profile => profile) | 1352 | file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/test.txt', 'bin/unknown'), :profile => profile) |
| 1363 | - get :view_page, file.url.merge(:view=>:true) | ||
| 1364 | - assert_match /this is a sample text file/, @response.body | 1353 | + get :view_page, file.url |
| 1354 | + assert_match /#{file.public_filename}/, @response.body | ||
| 1355 | + end | ||
| 1356 | + | ||
| 1357 | + should 'not count hit from bots' do | ||
| 1358 | + article = fast_create(Article, :profile_id => profile.id) | ||
| 1359 | + assert_no_difference article, :hits do | ||
| 1360 | + @request.env['HTTP_USER_AGENT'] = 'bot' | ||
| 1361 | + get 'view_page', :profile => profile.identifier, :page => article.path.split('/') | ||
| 1362 | + @request.env['HTTP_USER_AGENT'] = 'spider' | ||
| 1363 | + get 'view_page', :profile => profile.identifier, :page => article.path.split('/') | ||
| 1364 | + @request.env['HTTP_USER_AGENT'] = 'crawler' | ||
| 1365 | + get 'view_page', :profile => profile.identifier, :page => article.path.split('/') | ||
| 1366 | + @request.env['HTTP_USER_AGENT'] = '(http://some-crawler.com)' | ||
| 1367 | + get 'view_page', :profile => profile.identifier, :page => article.path.split('/') | ||
| 1368 | + article.reload | ||
| 1369 | + end | ||
| 1365 | end | 1370 | end |
| 1366 | 1371 | ||
| 1367 | should 'add meta tags with article info' do | 1372 | should 'add meta tags with article info' do |
test/functional/events_controller_test.rb
| @@ -46,4 +46,12 @@ class EventsControllerTest < ActionController::TestCase | @@ -46,4 +46,12 @@ class EventsControllerTest < ActionController::TestCase | ||
| 46 | assert_equal 20, assigns(:events).count | 46 | assert_equal 20, assigns(:events).count |
| 47 | end | 47 | end |
| 48 | 48 | ||
| 49 | + should 'show events of specific day' do | ||
| 50 | + profile.events << Event.new(:name => 'Joao Birthday', :start_date => Date.new(2009, 10, 28)) | ||
| 51 | + | ||
| 52 | + get :events_by_day, :profile => profile.identifier, :year => 2009, :month => 10, :day => 28 | ||
| 53 | + | ||
| 54 | + assert_tag :tag => 'a', :content => /Joao Birthday/ | ||
| 55 | + end | ||
| 56 | + | ||
| 49 | end | 57 | end |
test/functional/search_controller_test.rb
| @@ -373,7 +373,7 @@ class SearchControllerTest < ActionController::TestCase | @@ -373,7 +373,7 @@ class SearchControllerTest < ActionController::TestCase | ||
| 373 | end | 373 | end |
| 374 | 374 | ||
| 375 | should 'see the events paginated' do | 375 | should 'see the events paginated' do |
| 376 | - person = create_user('pagination').person | 376 | + person = create_user('testuser').person |
| 377 | 30.times do |i| | 377 | 30.times do |i| |
| 378 | create_event(person, :name => "Event #{i}", :start_date => Date.today) | 378 | create_event(person, :name => "Event #{i}", :start_date => Date.today) |
| 379 | end | 379 | end |
test/unit/profile_test.rb
| @@ -363,7 +363,7 @@ class ProfileTest < ActiveSupport::TestCase | @@ -363,7 +363,7 @@ class ProfileTest < ActiveSupport::TestCase | ||
| 363 | t2 = c.tasks.build; t2.save!; t2.finish | 363 | t2 = c.tasks.build; t2.save!; t2.finish |
| 364 | t3 = c.tasks.build; t3.save!; t3.finish | 364 | t3 = c.tasks.build; t3.save!; t3.finish |
| 365 | 365 | ||
| 366 | - assert_equal [t2, t3], c.tasks.finished | 366 | + assert_equivalent [t2, t3], c.tasks.finished |
| 367 | end | 367 | end |
| 368 | 368 | ||
| 369 | should 'responds to categories' do | 369 | should 'responds to categories' do |
test/unit/tags_helper_test.rb
| @@ -20,12 +20,14 @@ class TagsHelperTest < ActiveSupport::TestCase | @@ -20,12 +20,14 @@ class TagsHelperTest < ActiveSupport::TestCase | ||
| 20 | 20 | ||
| 21 | should 'order tags alphabetically with special characters' do | 21 | should 'order tags alphabetically with special characters' do |
| 22 | result = tag_cloud( | 22 | result = tag_cloud( |
| 23 | - { 'aula'=>9, 'área'=>2, 'area'=>2, 'avião'=>2, 'armário'=>2, | ||
| 24 | - 'A'=>1, 'Á'=>1, 'AB'=>1, 'ÁA'=>1 }, | 23 | + { 'area'=>9, 'área'=>2, 'base'=>2, 'báse' => 3, |
| 24 | + 'A'=>1, 'Á'=>1, 'zebra'=>1, 'zebrá'=>1 }, | ||
| 25 | :id, | 25 | :id, |
| 26 | { :host=>'noosfero.org', :controller=>'test', :action=>'tag' } | 26 | { :host=>'noosfero.org', :controller=>'test', :action=>'tag' } |
| 27 | ) | 27 | ) |
| 28 | - assert_equal %w(A Á ÁA AB area área armário aula avião).join("\n"), result | 28 | + result = result.split("\n") |
| 29 | + assert_order ['Á', 'área', 'báse', 'zebrá'], result | ||
| 30 | + assert_order ['A', 'area', 'base', 'zebra'], result | ||
| 29 | end | 31 | end |
| 30 | 32 | ||
| 31 | end | 33 | end |
test/unit/uploaded_file_test.rb
| @@ -324,13 +324,11 @@ class UploadedFileTest < ActiveSupport::TestCase | @@ -324,13 +324,11 @@ class UploadedFileTest < ActiveSupport::TestCase | ||
| 324 | should 'group trackers activity of image\'s upload' do | 324 | should 'group trackers activity of image\'s upload' do |
| 325 | ActionTracker::Record.delete_all | 325 | ActionTracker::Record.delete_all |
| 326 | gallery = fast_create(Gallery, :profile_id => profile.id) | 326 | gallery = fast_create(Gallery, :profile_id => profile.id) |
| 327 | - count = ActionTracker::Record.find_all_by_verb('upload_image').count | ||
| 328 | image1 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) | 327 | image1 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) |
| 329 | - count += 1 | ||
| 330 | - assert_equal count, ActionTracker::Record.find_all_by_verb('upload_image').count | 328 | + assert_equal 1, ActionTracker::Record.find_all_by_verb('upload_image').count |
| 331 | 329 | ||
| 332 | image2 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/other-pic.jpg', 'image/jpg'), :parent => gallery, :profile => profile) | 330 | image2 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/other-pic.jpg', 'image/jpg'), :parent => gallery, :profile => profile) |
| 333 | - assert_equal count, ActionTracker::Record.find_all_by_verb('upload_image').count | 331 | + assert_equal 1, ActionTracker::Record.find_all_by_verb('upload_image').count |
| 334 | end | 332 | end |
| 335 | 333 | ||
| 336 | { | 334 | { |