Commit c5b9f977416ee31811ae99d4cd75e2c7c7267d00

Authored by Rodrigo Souto
2 parents f1ba1f6f fa0dbbec

Merge branch 'master' into solr-commits

Showing 98 changed files with 1411 additions and 1446 deletions   Show diff stats
Gemfile
1 1 source :rubygems
2   -gem 'cucumber', '0.4.0'
3   -gem 'webrat', '0.5.1'
4   -gem 'rspec', '1.2.9'
5   -gem 'rspec-rails', '1.2.9'
6   -gem 'Selenium', '>= 1.1.14'
7   -gem 'selenium-client', '>= 1.2.17'
8   -gem 'database_cleaner'
  2 +
9 3 gem 'exception_notification', '1.0.20090728'
10 4 gem 'system_timer'
11 5  
  6 +group :test do
  7 + gem 'rspec', '1.2.9'
  8 + gem 'rspec-rails', '1.2.9'
  9 +end
  10 +
  11 +group :cucumber do
  12 + gem 'rake', '0.8.7'
  13 + gem 'cucumber-rails', '0.3.2'
  14 + gem 'capybara', '1.1.1'
  15 + gem 'cucumber', '1.1.0'
  16 + gem 'database_cleaner'
  17 +end
  18 +
12 19 def program(name)
13 20 unless system("which #{name} > /dev/null")
14 21 puts "W: Program #{name} is needed, but was not found in your PATH"
... ...
Gemfile.lock
1 1 GEM
2 2 remote: http://rubygems.org/
3 3 specs:
4   - Selenium (1.1.14)
5   - builder (3.0.0)
6   - cucumber (0.4.0)
  4 + builder (3.1.4)
  5 + capybara (1.1.1)
  6 + mime-types (>= 1.16)
  7 + nokogiri (>= 1.3.3)
  8 + rack (>= 1.0.0)
  9 + rack-test (>= 0.5.4)
  10 + selenium-webdriver (~> 2.0)
  11 + xpath (~> 0.1.4)
  12 + childprocess (0.3.6)
  13 + ffi (~> 1.0, >= 1.0.6)
  14 + cucumber (1.1.0)
7 15 builder (>= 2.1.2)
8 16 diff-lcs (>= 1.1.2)
9   - polyglot (>= 0.2.9)
10   - term-ansicolor (>= 1.0.3)
11   - treetop (>= 1.4.2)
12   - database_cleaner (0.7.0)
  17 + gherkin (~> 2.5.0)
  18 + json (>= 1.4.6)
  19 + term-ansicolor (>= 1.0.6)
  20 + cucumber-rails (0.3.2)
  21 + cucumber (>= 0.8.0)
  22 + database_cleaner (0.9.1)
13 23 diff-lcs (1.1.3)
14 24 exception_notification (1.0.20090728)
15   - nokogiri (1.5.0)
16   - polyglot (0.3.3)
17   - rack (1.3.5)
  25 + ffi (1.2.0)
  26 + gherkin (2.5.4)
  27 + json (>= 1.4.6)
  28 + json (1.7.5)
  29 + libwebsocket (0.1.6.1)
  30 + websocket
  31 + mime-types (1.19)
  32 + multi_json (1.3.7)
  33 + nokogiri (1.5.5)
  34 + rack (1.1.0)
  35 + rack-test (0.6.2)
  36 + rack (>= 1.0)
  37 + rake (0.8.7)
18 38 rspec (1.2.9)
19 39 rspec-rails (1.2.9)
20 40 rack (>= 1.0.0)
21 41 rspec (>= 1.2.9)
22   - selenium-client (1.2.18)
  42 + rubyzip (0.9.9)
  43 + selenium-webdriver (2.26.0)
  44 + childprocess (>= 0.2.5)
  45 + libwebsocket (~> 0.1.3)
  46 + multi_json (~> 1.0)
  47 + rubyzip
23 48 system_timer (1.2.4)
24 49 term-ansicolor (1.0.7)
25   - treetop (1.4.10)
26   - polyglot
27   - polyglot (>= 0.3.1)
28   - webrat (0.5.1)
29   - nokogiri (>= 1.2.0)
30   - rack (>= 1.0)
  50 + websocket (1.0.4)
  51 + xpath (0.1.4)
  52 + nokogiri (~> 1.3)
31 53  
32 54 PLATFORMS
33 55 ruby
34 56  
35 57 DEPENDENCIES
36   - Selenium (>= 1.1.14)
37   - cucumber (= 0.4.0)
  58 + capybara (= 1.1.1)
  59 + cucumber (= 1.1.0)
  60 + cucumber-rails (= 0.3.2)
38 61 database_cleaner
39 62 exception_notification (= 1.0.20090728)
  63 + rake (= 0.8.7)
40 64 rspec (= 1.2.9)
41 65 rspec-rails (= 1.2.9)
42   - selenium-client (>= 1.2.17)
43 66 system_timer
44   - webrat (= 0.5.1)
... ...
app/models/environment.rb
... ... @@ -616,12 +616,10 @@ class Environment < ActiveRecord::Base
616 616 end
617 617  
618 618 def top_url
619   - protocol = 'http'
620   - result = "#{protocol}://#{default_hostname}"
621   - if Noosfero.url_options.has_key?(:port)
622   - result << ':' << Noosfero.url_options[:port].to_s
623   - end
624   - result
  619 + url = 'http://'
  620 + url << (Noosfero.url_options.key?(:host) ? Noosfero.url_options[:host] : default_hostname)
  621 + url << ':' << Noosfero.url_options[:port].to_s if Noosfero.url_options.key?(:port)
  622 + url
625 623 end
626 624  
627 625 def to_s
... ...
app/views/admin_panel/site_info.rhtml
... ... @@ -4,7 +4,7 @@
4 4  
5 5 <%= render :file => 'shared/tiny_mce' %>
6 6  
7   -<% labelled_form_for :environment, @environment, :url => {:host => @environment.default_hostname, :port => request.port} do |f| %>
  7 +<% labelled_form_for :environment, @environment do |f| %>
8 8 <% tabs = [] %>
9 9 <% tabs << {:title => _('Site info'), :id => 'site-info',
10 10 :content => (render :partial => 'site_info', :locals => {:f => f})} %>
... ...
app/views/catalog/index.rhtml
... ... @@ -7,6 +7,7 @@
7 7  
8 8 <div class='l-sidebar-left-bar'>
9 9 <ul>
  10 + <%= content_tag('li', link_to(_('Enterprise homepage'), profile.public_profile_url), :id => 'catalog-categories-homepage-link') %>
10 11 <% if @categories.present? %>
11 12 <% @categories.each do |category| %>
12 13 <%= category_link(category) %>
... ...
app/views/content_viewer/_comment_form.rhtml
... ... @@ -21,8 +21,6 @@ function submit_comment_form(button) {
21 21 }
22 22 </script>
23 23  
24   -<% focus_on = logged_in? ? 'title' : 'name' %>
25   -
26 24 <% if @comment && @comment.errors.any? && @comment.reply_of_id.blank? %>
27 25 <%= error_messages_for :comment %>
28 26 <script type="text/javascript">jQuery(function() { document.location.href = '#page-comment-form'; });</script>
... ... @@ -32,17 +30,7 @@ function submit_comment_form(button) {
32 30  
33 31 <div class="post_comment_box <%= @form_div %>">
34 32  
35   -<% if display_link %>
36   - <h4 onclick="var d = jQuery(this).parent('.post_comment_box');
37   - if (d.hasClass('closed')) {
38   - d.removeClass('closed');
39   - d.addClass('opened');
40   - d.find('input[name=comment[title]], textarea').val('');
41   - d.find('.comment_form input[name=comment[<%= focus_on %>]]').focus();
42   - }">
43   - <%= content_tag('a', '', :name => 'comment_form') + _('Post a comment') %>
44   - </h4>
45   -<% end %>
  33 + <%= link_to(_('Post a comment'), '#', :class => 'display-comment-form') if display_link %>
46 34  
47 35 <% unless pass_without_comment_captcha? %>
48 36 <div id="recaptcha-container" style="display: none">
... ... @@ -62,8 +50,6 @@ function submit_comment_form(button) {
62 50 <% end %>
63 51  
64 52 <% form_tag( url, { :class => 'comment_form' } ) do %>
65   - <%= hidden_field_tag(:confirm, 'false') %>
66   -
67 53 <%= required_fields_message %>
68 54  
69 55 <% unless logged_in? %>
... ... @@ -84,10 +70,13 @@ function submit_comment_form(button) {
84 70 <%= labelled_form_field(_('Title'), text_field(:comment, :title)) %>
85 71 <%= required labelled_form_field(_('Enter your comment'), text_area(:comment, :body, :rows => 5)) %>
86 72  
  73 + <%= hidden_field_tag(:confirm, 'false') %>
  74 + <%= hidden_field_tag(:view, params[:view])%>
  75 +
87 76 <% button_bar do %>
88 77 <%= submit_button('add', _('Post comment'), :onclick => "submit_comment_form(this); return false") %>
89 78 <% if cancel_triggers_hide %>
90   - <%= button_to_function :cancel, _('Cancel'), "f=jQuery(this).parents('.post_comment_box'); f.removeClass('opened'); f.addClass('closed'); return false" %>
  79 + <%= button :cancel, _('Cancel'), '', :id => 'cancel-comment' %>
91 80 <% else %>
92 81 <%= button('cancel', _('Cancel'), {:action => 'view_page', :profile => profile.identifier, :page => @comment.article.explode_path})%>
93 82 <% end %>
... ... @@ -95,3 +84,5 @@ function submit_comment_form(button) {
95 84 <% end %>
96 85  
97 86 </div><!-- end class="post_comment_box" -->
  87 +
  88 +<%= javascript_include_tag 'comment_form'%>
... ...
app/views/content_viewer/view_page.rhtml
... ... @@ -90,7 +90,7 @@
90 90 <% end %>
91 91  
92 92 <% if @page.accept_comments? && @comments_count > 1 %>
93   - <p class="post-comment-button"><a href="#comment_form" onclick="jQuery('#page-comment-form h4').first().trigger('click')"><%= _('Post a comment') %></a></p>
  93 + <%= link_to(_('Post a comment'), '#', :class => 'display-comment-form') %>
94 94 <% end %>
95 95  
96 96 <ul class="article-comments-list">
... ...
app/views/users/send_mail.rhtml
... ... @@ -4,7 +4,7 @@
4 4  
5 5 <%= render :file => 'shared/tiny_mce' %>
6 6  
7   -<% form_for :mailing, :url => {:action => 'send_mail', :host => @environment.default_hostname} do |f| %>
  7 +<% form_for :mailing do |f| %>
8 8 <%= labelled_form_field(_('Subject:'), f.text_field(:subject)) %>
9 9 <%= labelled_form_field(_('Body:'), f.text_area(:body, :class => 'mceEditor')) %>
10 10 <%= submit_button(:send, _('Send')) %>
... ...
config/cucumber.yml
1   -default: --tags ~@selenium,~@wip --exclude features/support/selenium.rb --exclude features/step_definitions/selenium_steps.rb -r features/support -r features/step_definitions
2   -selenium: --tags @selenium,~@wip -r features/support -r features/step_definitions
  1 +default: --color --format progress --strict --tags ~@selenium --tags ~@selenium-fixme --tags ~@fixme --exclude features/support/selenium.rb -r features/support -r features/step_definitions
  2 +selenium: --strict --tags @selenium -r features/support -r features/step_definitions
... ...
config/database.yml.sqlite3
... ... @@ -6,6 +6,7 @@ development:
6 6 test: &TEST
7 7 adapter: sqlite3
8 8 database: db/test.db
  9 + timeout: 2000
9 10  
10 11 production:
11 12 adapter: sqlite3
... ...
config/environments/cucumber.rb
1   -# IMPORTANT: This file was generated by Cucumber 0.4.0
2 1 # Edit at your own peril - it's recommended to regenerate this file
3 2 # in the future when you upgrade to a newer version of Cucumber.
4 3  
5   -config.cache_classes = true # This must be true for Cucumber to operate correctly!
  4 +# IMPORTANT: Setting config.cache_classes to false is known to
  5 +# break Cucumber's use_transactional_fixtures method.
  6 +# For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165
  7 +config.cache_classes = true
6 8  
7 9 # Log error messages when you accidentally call methods on nil.
8 10 config.whiny_nils = true
... ... @@ -18,3 +20,8 @@ config.action_controller.allow_forgery_protection = false
18 20 # The :test delivery method accumulates sent emails in the
19 21 # ActionMailer::Base.deliveries array.
20 22 config.action_mailer.delivery_method = :test
  23 +
  24 +config.gem 'cucumber-rails', :lib => false, :version => '>=0.3.2' unless File.directory?(File.join(Rails.root, 'vendor/plugins/cucumber-rails'))
  25 +config.gem 'database_cleaner', :lib => false, :version => '>=0.5.0' unless File.directory?(File.join(Rails.root, 'vendor/plugins/database_cleaner'))
  26 +config.gem 'capybara', :lib => false, :version => '>=0.3.5' unless File.directory?(File.join(Rails.root, 'vendor/plugins/capybara'))
  27 +
... ...
features/accept_member.feature
... ... @@ -14,10 +14,11 @@ Feature: accept member
14 14 And the community "My Community" is closed
15 15 And "Mario Souto" is admin of "My Community"
16 16  
  17 + @selenium
17 18 Scenario: approve a task to accept a member as admin in a closed community
18 19 Given "Marie Curie" asked to join "My Community"
19 20 And I am logged in as "mario"
20   - And I go to My Community's control panel
  21 + And I go to mycommunity's control panel
21 22 And I follow "Process requests"
22 23 And I should see "Marie Curie wants to be a member"
23 24 When I choose "Accept"
... ... @@ -25,10 +26,11 @@ Feature: accept member
25 26 And I press "Apply!"
26 27 Then "Marie Curie" should be admin of "My Community"
27 28  
  29 + @selenium
28 30 Scenario: approve a task to accept a member as member in a closed community
29 31 Given "Marie Curie" asked to join "My Community"
30 32 And I am logged in as "mario"
31   - And I go to My Community's control panel
  33 + And I go to mycommunity's control panel
32 34 And I follow "Process requests"
33 35 And I should see "Marie Curie wants to be a member"
34 36 When I choose "Accept"
... ... @@ -36,10 +38,11 @@ Feature: accept member
36 38 And I press "Apply!"
37 39 Then "Marie Curie" should be a member of "My Community"
38 40  
  41 + @selenium
39 42 Scenario: approve a task to accept a member as moderator in a closed community
40 43 Given "Marie Curie" asked to join "My Community"
41 44 And I am logged in as "mario"
42   - And I go to My Community's control panel
  45 + And I go to mycommunity's control panel
43 46 And I follow "Process requests"
44 47 And I should see "Marie Curie wants to be a member"
45 48 When I choose "Accept"
... ...
features/activate_enterprise.feature
... ... @@ -11,7 +11,7 @@ Feature: activate enterprise
11 11  
12 12 Scenario: added an unexistent code
13 13 Given feature "enterprise_activation" is enabled on environment
14   - And I am on Joao Silva's control panel
  14 + And I am on joaosilva's control panel
15 15 And I fill in "Enterprise activation code" with "abcde"
16 16 When I press "Activate"
17 17 Then I should see "Invalid enterprise code"
... ... @@ -21,7 +21,7 @@ Feature: activate enterprise
21 21 And the following enterprises
22 22 | identifier | name | enabled |
23 23 | products-factory | Products Factory | false |
24   - And I am on Joao Silva's control panel
  24 + And I am on joaosilva's control panel
25 25 And enterprise "Products Factory" is enabled
26 26 And I fill in "Enterprise activation code" with code of "Products Factory"
27 27 When I press "Activate"
... ... @@ -32,7 +32,7 @@ Feature: activate enterprise
32 32 And the following enterprises
33 33 | identifier | name | enabled |
34 34 | products-factory | Products Factory | false |
35   - And I am on Joao Silva's control panel
  35 + And I am on joaosilva's control panel
36 36 And I fill in "Enterprise activation code" with code of "Products Factory"
37 37 When I press "Activate"
38 38 Then I should see "We don't have enough information about your enterprise to identify you."
... ... @@ -43,7 +43,7 @@ Feature: activate enterprise
43 43 And the following enterprises
44 44 | identifier | name | enabled | foundation_year |
45 45 | services-provider | Services Provider | false | 2000 |
46   - And I am on Joao Silva's control panel
  46 + And I am on joaosilva's control panel
47 47 And I fill in "Enterprise activation code" with code of "Services Provider"
48 48 And I press "Activate"
49 49 And I fill in "What year your enterprise was founded? It must have 4 digits, eg 1990." with "1999"
... ... @@ -56,7 +56,7 @@ Feature: activate enterprise
56 56 And the following enterprises
57 57 | identifier | name | enabled | cnpj |
58 58 | services-provider | Services Provider | false | 94.132.024/0001-48 |
59   - And I am on Joao Silva's control panel
  59 + And I am on joaosilva's control panel
60 60 And I fill in "Enterprise activation code" with code of "Services Provider"
61 61 And I press "Activate"
62 62 And I fill in "What is the CNPJ of your enterprise?" with "12345678912345"
... ... @@ -70,9 +70,9 @@ Feature: activate enterprise
70 70 And the following enterprises
71 71 | identifier | name | enabled | foundation_year |
72 72 | services-provider | Services Provider | false | 2000 |
73   - And I visit "Joao Silva's control panel" and wait
  73 + And I go to joaosilva's control panel
74 74 And I fill in "Enterprise activation code" with code of "Services Provider"
75   - And I press "Activate" and wait
  75 + And I press "Activate"
76 76 And I fill in "What year your enterprise was founded? It must have 4 digits, eg 1990." with "2000"
77 77 And I press "Continue"
78 78 And I check "I read the terms of use and accepted them"
... ... @@ -91,9 +91,9 @@ Feature: activate enterprise
91 91 | active-template | Active Template | false | 2000 |
92 92 And "Active Template" is the active enterprise template
93 93 And "Services Provider 2" doesnt have "Active Template" as template
94   - And I visit "Joao Silva's control panel" and wait
  94 + And I go to joaosilva's control panel
95 95 And I fill in "Enterprise activation code" with code of "Services Provider 2"
96   - And I press "Activate" and wait
  96 + And I press "Activate"
97 97 And I fill in "What year your enterprise was founded? It must have 4 digits, eg 1990." with "2000"
98 98 And I press "Continue"
99 99 And I check "I read the terms of use and accepted them"
... ... @@ -113,9 +113,9 @@ Feature: activate enterprise
113 113 | active-template | Active Template | false | 2000 |
114 114 And "Active Template" is the active enterprise template
115 115 And "Services Provider 3" doesnt have "Active Template" as template
116   - When I visit "Joao Silva's control panel" and wait
  116 + When I go to joaosilva's control panel
117 117 And I fill in "Enterprise activation code" with code of "Services Provider 3"
118   - And I press "Activate" and wait
  118 + And I press "Activate"
119 119 And I fill in "What year your enterprise was founded? It must have 4 digits, eg 1990." with "2000"
120 120 And I press "Continue"
121 121 And I check "I read the terms of use and accepted them"
... ...
features/admin_categories.feature
... ... @@ -16,22 +16,22 @@ Feature: manage categories
16 16 @selenium
17 17 Scenario: admin user could access new category
18 18 Given I follow "Administration"
19   - When I follow "Manage Categories"
20   - And I follow "New category" and wait
  19 + When I follow "Categories"
  20 + And I follow "New category"
21 21 Then I should be on /admin/categories/new
22 22  
23 23 @selenium
24 24 Scenario: admin user could create a category
25   - Given I visit "/admin/categories/new" and wait
26   - When I fill in "Name" with "Category 1"
27   - And I press "Save"
28   - Then I should see "Categories"
29   - And I should see "Category 1"
  25 + Given I go to /admin/categories/new
  26 + And I fill in "Name" with "Category 1"
  27 + When I press "Save"
  28 + Then I should see "Categories"
  29 + And I should see "Category 1"
30 30  
31 31 @selenium
32 32 Scenario: admin user could see all the category tree
33 33 Given I follow "Administration"
34   - And I follow "Manage Categories"
  34 + And I follow "Categories"
35 35 When I follow "Show"
36 36 Then I should see "Vegetarian"
37 37 And I should see "Steak"
... ... @@ -39,13 +39,13 @@ Feature: manage categories
39 39 @selenium
40 40 Scenario: admin user could hide the category tree
41 41 Given I follow "Administration"
42   - And I follow "Manage Categories"
43   - When I follow "Show"
  42 + And I follow "Categories"
  43 + When I follow "Show" and wait while it hides
44 44 Then I should see "Vegetarian"
45 45 And I should see "Steak"
46   - When I follow "Hide" and sleep 1 second
47   - Then I should not see "Vegetarian"
48   - And I should not see "Steak"
  46 + When I follow "Hide" and wait while it hides
  47 + Then "Vegetarian" should not be visible within "div"
  48 + And "Steak" should not be visible within "div"
49 49  
50 50 @selenium
51 51 Scenario: the show link is available just for categories with category tree
... ... @@ -54,7 +54,7 @@ Feature: manage categories
54 54 | Steak | Pig | true |
55 55 And I am on the homepage
56 56 When I follow "Administration"
57   - And I follow "Manage Categories"
  57 + And I follow "Categories"
58 58 Then I should see "Food Show"
59 59 When I follow "Show"
60 60 Then I should see "Vegetarian"
... ...
features/approve_article.feature
... ... @@ -19,52 +19,52 @@ Feature: approve article
19 19 And "Maria Silva" is a member of "Sample Community"
20 20 And "Joao Silva" is admin of "Sample Community"
21 21  
22   - @selenium
  22 + @selenium-fixme
23 23 Scenario: edit an article before approval
24 24 Given I am logged in as "mariasilva"
25   - And I am on Maria Silva's homepage
26   - When I follow "Spread" and wait
  25 + And I am on mariasilva's homepage
  26 + When I follow "Spread"
27 27 And I check "Sample Community"
28 28 And I press "Spread this"
29 29 And I am logged in as "joaosilva"
30   - And I go to Sample Community's control panel
31   - And I follow "Process requests" and wait
  30 + And I go to sample-community's control panel
  31 + And I follow "Process requests"
32 32 And I fill in "Text" with "This is an article edited"
33 33 And I choose "Accept"
34 34 And I press "Apply!"
35   - And I go to Sample Community's sitemap
  35 + And I go to sample-community's sitemap
36 36 And I follow "Sample Article"
37 37 Then I should see "This is an article edited"
38 38  
39 39 @selenium
40 40 Scenario: reject an article with explanation
41 41 Given I am logged in as "mariasilva"
42   - And I go to Maria Silva's cms
  42 + And I go to mariasilva's cms
43 43 And I follow "Sample Article"
44   - And I follow "Spread" and wait
  44 + And I follow "Spread"
45 45 And I check "Sample Community"
46 46 And I press "Spread this"
47 47 And I am logged in as "joaosilva"
48   - And I go to Sample Community's control panel
49   - And I follow "Process requests" and wait
  48 + And I go to sample-community's control panel
  49 + And I follow "Process requests"
50 50 And I choose "Reject"
51 51 And I fill in "Rejection explanation" with "This is not an appropriate article for this community."
52 52 And I press "Apply!"
53   - When I go to Sample Community's sitemap
  53 + When I go to sample-community's sitemap
54 54 Then I should not see "Sample Article"
55 55  
56 56 @selenium
57 57 Scenario: reject an article that was removed
58 58 Given I am logged in as "mariasilva"
59 59 And I follow "Dub Wars"
60   - And I follow "Spread" and wait
  60 + And I follow "Spread"
61 61 And I check "Sample Community"
62 62 And I press "Spread this"
63 63 And I follow "Delete"
64   - And I press "Yes, I want."
  64 + And I confirm the browser dialog
65 65 When I am logged in as "joaosilva"
66   - And I go to Sample Community's control panel
67   - And I follow "Process requests" and wait
  66 + And I go to sample-community's control panel
  67 + And I follow "Process requests"
68 68 And I choose "Reject"
69 69 And I fill in "Rejection explanation" with "Article was removed."
70 70 And I press "Apply!"
... ...
features/balloon.feature
... ... @@ -12,33 +12,29 @@ Feature: balloon
12 12 @selenium
13 13 Scenario: I should not see trigger if not enabled
14 14 Given feature "show_balloon_with_profile_links_when_clicked" is disabled on environment
15   - When I go to /browse/people
  15 + When I go to /search/people
16 16 Then I should not see "Profile links"
17 17  
18 18 @selenium
19 19 Scenario: I should not see trigger by default
20   - Given the following blocks
21   - | owner | type |
22   - | environment | PeopleBlock |
23   - And feature "show_balloon_with_profile_links_when_clicked" is enabled on environment
24   - When I go to the homepage
  20 + Given feature "show_balloon_with_profile_links_when_clicked" is enabled on environment
  21 + When I go to /search/people
25 22 Then I should not see "Friends"
26 23  
27 24 @selenium
28 25 Scenario: I should see balloon when clicked on people block trigger
29   - Given the following blocks
30   - | owner | type |
31   - | environment | PeopleBlock |
32   - And feature "show_balloon_with_profile_links_when_clicked" is enabled on environment
33   - When I go to the homepage
34   - And I follow "Profile links"
  26 + Given feature "show_balloon_with_profile_links_when_clicked" is enabled on environment
  27 + And I go to /search/people
  28 + And display ".person-trigger"
  29 + When I follow "Profile links"
35 30 Then I should see "Friends"
36 31  
37 32 @selenium
38 33 Scenario: I should see balloon when clicked on community block trigger
39 34 Given feature "show_balloon_with_profile_links_when_clicked" is enabled on environment
40   - When I go to /browse/communities
41   - And I follow "Profile links"
  35 + And I go to /search/communities
  36 + And display ".community-trigger"
  37 + When I follow "Profile links"
42 38 Then I should see "Members"
43 39  
44 40 @selenium
... ... @@ -56,7 +52,8 @@ Feature: balloon
56 52 @selenium
57 53 Scenario: I should see balloon when clicked on page trigger
58 54 Given feature "show_balloon_with_profile_links_when_clicked" is enabled on environment
59   - When I go to /assets/communities
60   - And I follow "Profile links"
  55 + And I go to /assets/communities
  56 + And display ".community-trigger"
  57 + When I follow "Profile links"
61 58 Then I should see "Members"
62 59 And I should see "Agenda"
... ...
features/blog.feature
... ... @@ -11,16 +11,16 @@ Feature: blog
11 11 And I am logged in as "joaosilva"
12 12  
13 13 Scenario: create a blog
14   - Given I go to the Control panel
  14 + Given I go to joaosilva's control panel
15 15 And I follow "Create blog"
16 16 Then I should see "My Blog"
17 17 When I fill in "Title" with "My Blog"
18 18 And I press "Save"
19   - And I go to Joao Silva's control panel
  19 + And I go to joaosilva's control panel
20 20 Then I should see "Configure blog"
21 21  
22 22 Scenario: redirect to blog after create blog from control panel
23   - Given I go to the Control panel
  23 + Given I go to joaosilva's control panel
24 24 And I follow "Create blog"
25 25 Then I should see "My Blog"
26 26 When I fill in "Title" with "My Blog"
... ... @@ -28,7 +28,7 @@ Feature: blog
28 28 Then I should be on /joaosilva/my-blog
29 29  
30 30 Scenario: redirect to blog after create blog from cms
31   - Given I go to the Control panel
  31 + Given I go to joaosilva's control panel
32 32 And I follow "Manage Content"
33 33 And I follow "New content"
34 34 When I follow "Blog"
... ... @@ -37,13 +37,13 @@ Feature: blog
37 37 Then I should be on /joaosilva/blog-from-cms
38 38  
39 39 Scenario: create multiple blogs
40   - Given I go to the Control panel
  40 + Given I go to joaosilva's control panel
41 41 And I follow "Manage Content"
42 42 And I follow "New content"
43 43 And I follow "Blog"
44 44 And I fill in "Title" with "Blog One"
45 45 And I press "Save"
46   - Then I go to the Control panel
  46 + Then I go to joaosilva's control panel
47 47 And I follow "Manage Content"
48 48 And I follow "New content"
49 49 And I follow "Blog"
... ... @@ -53,7 +53,7 @@ Feature: blog
53 53 And I should be on /joaosilva/blog-two
54 54  
55 55 Scenario: cancel button back to cms
56   - Given I go to the Control panel
  56 + Given I go to joaosilva's control panel
57 57 And I follow "Manage Content"
58 58 And I follow "New content"
59 59 And I follow "Blog"
... ... @@ -61,7 +61,7 @@ Feature: blog
61 61 Then I should be on /myprofile/joaosilva/cms
62 62  
63 63 Scenario: cancel button back to myprofile
64   - Given I go to the Control panel
  64 + Given I go to joaosilva's control panel
65 65 And I follow "Create blog"
66 66 When I follow "Cancel" within ".main-block"
67 67 Then I should be on /myprofile/joaosilva
... ... @@ -71,7 +71,7 @@ Feature: blog
71 71 | owner | name |
72 72 | joaosilva | Blog One |
73 73 | joaosilva | Blog Two |
74   - And I go to the Control panel
  74 + And I go to joaosilva's control panel
75 75 When I follow "Configure blog"
76 76 Then I should be on /myprofile/joaosilva/cms
77 77  
... ... @@ -79,7 +79,7 @@ Feature: blog
79 79 Given the following blogs
80 80 | owner | name |
81 81 | joaosilva | Blog One |
82   - And I go to the Control panel
  82 + And I go to joaosilva's control panel
83 83 When I follow "Configure blog"
84 84 Then I should be on edit "Blog One" by joaosilva
85 85  
... ... @@ -89,14 +89,14 @@ Feature: blog
89 89 | owner | name |
90 90 | joaosilva | Blog One |
91 91 And I go to /joaosilva/blog-one
92   - When I follow "Configure blog" and wait
  92 + When I follow "Configure blog"
93 93 Then I should be on edit "Blog One" by joaosilva
94 94  
95 95 Scenario: change address of blog
96 96 Given the following blogs
97 97 | owner | name |
98 98 | joaosilva | Blog One |
99   - And I go to the Control panel
  99 + And I go to joaosilva's control panel
100 100 And I follow "Configure blog"
101 101 And I fill in "Address" with "blog-two"
102 102 And I press "Save"
... ... @@ -104,7 +104,7 @@ Feature: blog
104 104 Then I should see "Blog One"
105 105  
106 106 Scenario: display tag list field when creating new blog
107   - Given I go to the Control panel
  107 + Given I go to joaosilva's control panel
108 108 And I follow "Manage Content"
109 109 And I follow "New content"
110 110 When I follow "Blog"
... ...
features/browse.feature
... ... @@ -17,32 +17,34 @@ Feature: browse
17 17  
18 18 @selenium
19 19 Scenario: Show people browse menu
20   - Given I should not see "More Recent"
21   - And I should not see "More Active"
22   - And I should not see "More Popular"
23   - When I click "#submenu-people-trigger"
24   - Then I should see "More Recent"
25   - And I should see "More Active"
26   - And I should see "More Popular"
  20 + Given I should not see "More recent"
  21 + And I should not see "More active"
  22 + And I should not see "More popular"
  23 + And display "#submenu-people-trigger"
  24 + When I follow "submenu-people-trigger"
  25 + Then I should see "More recent"
  26 + And I should see "More active"
  27 + And I should see "More popular"
27 28  
28 29 @selenium
29 30 Scenario: People browse menu should add logged information
30 31 Given I am logged in as "joaosilva"
31   - And I should not see "More Recent"
32   - And I should not see "More Active"
33   - And I should not see "More Popular"
  32 + And I should not see "More recent"
  33 + And I should not see "More active"
  34 + And I should not see "More popular"
34 35 And I should not see "Invite friends"
35 36 And I should not see "My friends"
36   - When I click "#submenu-people-trigger"
37   - Then I should see "More Recent"
38   - And I should see "More Active"
39   - And I should see "More Popular"
  37 + And display "#submenu-people-trigger"
  38 + When I follow "submenu-people-trigger"
  39 + Then I should see "More recent"
  40 + And I should see "More active"
  41 + And I should see "More popular"
40 42 And I should see "Invite friends"
41 43 And I should see "My friends"
42 44  
43 45 Scenario: Browse people by query
44 46 Given I go to /search/people
45   - When I fill in "Silva" for "query"
  47 + When I fill in "Silva" for "search-input"
46 48 And I press "Search"
47 49 Then I should see "Joao Silva"
48 50 And I should see "Pedro Silva"
... ... @@ -54,31 +56,33 @@ Feature: browse
54 56 Scenario: Communities browse menu should add logged information
55 57 Given I am logged in as "joaosilva"
56 58 When I go to /joaosilva
57   - Then I should not see "More Recent"
58   - And I should not see "More Active"
59   - And I should not see "More Popular"
  59 + Then I should not see "More recent"
  60 + And I should not see "More active"
  61 + And I should not see "More popular"
60 62 And I should not see "My communities"
61 63 And I should not see "New community"
62   - When I click "#submenu-communities-trigger"
63   - Then I should see "More Recent"
64   - And I should see "More Active"
65   - And I should see "More Popular"
  64 + And display "#submenu-communities-trigger"
  65 + When I follow "submenu-communities-trigger"
  66 + Then I should see "More recent"
  67 + And I should see "More active"
  68 + And I should see "More popular"
66 69 And I should see "My communities"
67 70 And I should see "New community"
68 71  
69 72 @selenium
70 73 Scenario: Show communities browse menu
71   - Given I should not see "More Recent"
72   - And I should not see "More Active"
73   - And I should not see "More Popular"
74   - When I click "#submenu-communities-trigger"
75   - Then I should see "More Recent"
76   - And I should see "More Active"
77   - And I should see "More Popular"
  74 + Given I should not see "More recent"
  75 + And I should not see "More active"
  76 + And I should not see "More popular"
  77 + And display "#submenu-communities-trigger"
  78 + When I follow "submenu-communities-trigger"
  79 + Then I should see "More recent"
  80 + And I should see "More active"
  81 + And I should see "More popular"
78 82  
79 83 Scenario: Browse communities by query
80 84 When I go to /search/communities
81   - And I fill in "Neto" for "query"
  85 + And I fill in "Neto" for "search-input"
82 86 And I press "Search"
83 87 Then I should see "Community Neto"
84 88 And I should not see "Joao Silva"
... ... @@ -88,13 +92,14 @@ Feature: browse
88 92  
89 93 @selenium
90 94 Scenario: Show contents browse menu
91   - Given I should not see "More Comments"
92   - And I should not see "More Views"
93   - And I should not see "More Recent"
94   - When I click "#submenu-contents-trigger"
95   - Then I should see "More Comments"
96   - And I should see "More Views"
97   - And I should see "More Recent"
  95 + Given I should not see "Most commented"
  96 + And I should not see "More viewed"
  97 + And I should not see "More recent"
  98 + And display "#submenu-contents-trigger"
  99 + When I follow "submenu-contents-trigger"
  100 + Then I should see "Most commented"
  101 + And I should see "More viewed"
  102 + And I should see "More recent"
98 103  
99 104 Scenario: Browse contents by query
100 105 Given the following articles
... ... @@ -103,7 +108,7 @@ Feature: browse
103 108 | joaosilva | Bees and ants are insects | this is another article |
104 109 | joaosilva | Ants are small | this is another article |
105 110 When I go to /search/contents
106   - And I fill in "bees" for "query"
  111 + And I fill in "bees" for "search-input"
107 112 And I press "Search"
108 113 Then I should see "Bees can fly"
109 114 And I should see "Bees and ants are insects"
... ...
features/browse_catalogs.feature
... ... @@ -132,7 +132,7 @@ Feature: browse catalogs
132 132 And I should not see "qualifiers"
133 133 And I should not see "price composition"
134 134  
135   - @selenium
  135 + @selenium-fixme
136 136 Scenario: display description button when needed (but not the description)
137 137 Given the following products
138 138 | owner | category | name | price | description |
... ... @@ -142,22 +142,22 @@ Feature: browse catalogs
142 142 Then I should see "Produto2" within "li.product-link"
143 143 And I should see "12.34" within "span.product-price"
144 144 And I should see "description" within "#product-description-button"
145   - And the "product-description-button" should be visible
  145 + And "description" should not be visible within "product-description-button"
146 146 And I should see "A small description" within "#product-description"
147   - And the "product-description" should not be visible
  147 + And "A small description for a product that doesn't exist" should not be visible within "product-description"
148 148  
149   - @selenium
  149 + @selenium-fixme
150 150 Scenario: display description when button is clicked
151 151 Given the following products
152 152 | owner | category | name | price | description |
153 153 | artebonito | categ1 | Produto3 | 12.34 | A small description for a product that doesn't exist. |
154 154 And I am on /catalog/artebonito
155 155 And I reload and wait for the page
156   - When I click "product-description-button"
  156 + When I follow "product-description-button"
157 157 Then I should see "A small description" within "#product-description"
158   - And the "product-description" should be visible
  158 + And "A small description for a product that doesn't exist" should not be visible within "product-description"
159 159  
160   - @selenium
  160 + @selenium-fixme
161 161 Scenario: hide description
162 162 Given the following products
163 163 | owner | category | name | price | description |
... ... @@ -198,7 +198,7 @@ Feature: browse catalogs
198 198 And I should see "Organic" within "span.search-product-qualifier"
199 199 And I should not see "price composition"
200 200  
201   - @selenium
  201 + @selenium-fixme
202 202 Scenario: not display price composition button if price is not described
203 203 Given the following product
204 204 | owner | category | name | price |
... ... @@ -212,7 +212,7 @@ Feature: browse catalogs
212 212 And I should see "10.00" within "span.product-price"
213 213 And the "#product-price-composition-button" should not be visible
214 214  
215   - @selenium
  215 + @selenium-fixme
216 216 Scenario: display price composition button (but not inputs)
217 217 Given the following product
218 218 | owner | category | name | price |
... ... @@ -229,7 +229,7 @@ Feature: browse catalogs
229 229 And I should see "food" within "#product-price-composition"
230 230 And I should see "10.00" within "#product-price-composition"
231 231  
232   - @selenium
  232 + @selenium-fixme
233 233 Scenario: display price composition when button is clicked
234 234 Given the following product
235 235 | owner | category | name | price |
... ... @@ -244,7 +244,7 @@ Feature: browse catalogs
244 244 And I should see "food" within "#product-price-composition"
245 245 And I should see "10.88" within "#product-price-composition"
246 246  
247   - @selenium
  247 + @selenium-fixme
248 248 Scenario: display inputs and raw materials button when not completely filled
249 249 Given the following product
250 250 | owner | category | name | price |
... ... @@ -260,7 +260,7 @@ Feature: browse catalogs
260 260 Then the "#inputs-button" should be visible
261 261 And I should see "inputs and raw materials" within "#inputs-button"
262 262  
263   - @selenium
  263 + @selenium-fixme
264 264 Scenario: display inputs and raw materials button
265 265 Given the following product
266 266 | owner | category | name | price |
... ... @@ -280,7 +280,7 @@ Feature: browse catalogs
280 280 And the "#inputs-description" should not be visible
281 281 And I should see "7.0 Liter of food" within "#inputs-description"
282 282  
283   - @selenium
  283 + @selenium-fixme
284 284 Scenario: display inputs and raw materials description
285 285 Given the following product
286 286 | owner | category | name | price |
... ... @@ -297,7 +297,7 @@ Feature: browse catalogs
297 297 Then the "#inputs-description" should be visible
298 298 And I should see "7.0 Liter of food" within "#inputs-description"
299 299  
300   - @selenium
  300 + @selenium-fixme
301 301 Scenario: hide inputs and raw materials
302 302 Given the following product
303 303 | owner | category | name | price |
... ...
features/browse_enterprises.feature
... ... @@ -24,7 +24,7 @@ Scenario: show profile links button
24 24 And I should not see "Members"
25 25 And I should not see "Agenda"
26 26  
27   -@selenium
  27 +@selenium-fixme
28 28 Scenario: show profile links when clicked
29 29 Given I am on /assets/enterprises
30 30 When I follow "Profile links"
... ... @@ -32,7 +32,7 @@ Scenario: show profile links when clicked
32 32 And I should see "Members" within "ul.menu-submenu-list"
33 33 And I should see "Agenda" within "ul.menu-submenu-list"
34 34  
35   -@selenium
  35 +@selenium-fixme
36 36 Scenario: go to catalog when click on products link
37 37 Given I am on /assets/enterprises
38 38 When I follow "Profile links"
... ...
features/categories_block.feature
... ... @@ -25,7 +25,7 @@ Feature: categories_block
25 25 | environment | CategoriesBlock |
26 26 And I am logged in as admin
27 27  
28   - @selenium
  28 + @selenium @ignore-hidden-elements
29 29 Scenario: List just product categories
30 30 Given I go to /admin/environment_design
31 31 And I follow "Edit" within ".categories-block"
... ... @@ -33,11 +33,11 @@ Feature: categories_block
33 33 When I press "Save"
34 34 Then I should see "Food"
35 35 And I should see "Book"
36   - And I should not see "Vegetarian"
37   - And I should not see "Steak"
38   - And I should not see "Fiction"
  36 + And "Vegetarian" should not be visible within "span#category-name"
  37 + And "Steak" should not be visible within "span#category-name"
  38 + And "Fiction" should not be visible within "span#category-name"
39 39  
40   - @selenium
  40 + @selenium @ignore-hidden-elements
41 41 Scenario: Show submenu if it exists
42 42 Given I go to /admin/environment_design
43 43 And I follow "Edit" within ".categories-block"
... ... @@ -45,40 +45,39 @@ Feature: categories_block
45 45 And I press "Save"
46 46 Then I should see "Food"
47 47 And I should see "Book"
48   - And I should not see "Vegetarian"
49   - And I should not see "Steak"
50   - And I should not see "Literature"
51   - When I click ".category-link-expand category-root"
  48 + And "Vegetarian" should not be visible within "span#category-name"
  49 + And "Steak" should not be visible within "span#category-name"
  50 + And "Literature" should not be visible within "span#category-name"
  51 + When I follow "block_2_category_2"
52 52 Then I should see "Literature"
53   - When I click ".category-link-expand category-root"
  53 + When I follow "block_2_category_1"
54 54 Then I should see "Vegetarian"
55 55 And I should see "Steak"
56 56 And I should not see "Fiction"
57 57  
58   - @selenium
  58 + @selenium @ignore-hidden-elements
59 59 Scenario: Show only one submenu per time
60 60 Given I go to /admin/environment_design
61 61 And I follow "Edit" within ".categories-block"
62 62 And I check "Product"
63 63 And I press "Save"
64 64 Then I should see "Book"
65   - And I should not see "Literature"
66   - When I click ".category-link-expand category-root"
  65 + And "Literature" should not be visible within "span#category-name"
  66 + When I follow "block_2_category_2"
67 67 Then I should see "Literature"
68 68  
69   - @selenium
  69 + @selenium @ignore-hidden-elements
70 70 Scenario: List just general categories
71 71 Given I go to /admin/environment_design
72 72 And I follow "Edit" within ".categories-block"
73   - And I check "Generic Category"
  73 + And I check "Generic category"
74 74 When I press "Save"
75 75 Then I should see "Wood"
76 76  
77   - @selenium
  77 + @selenium @ignore-hidden-elements
78 78 Scenario: List just regions
79 79 Given I go to /admin/environment_design
80 80 And I follow "Edit" within ".categories-block"
81 81 And I check "Region"
82 82 When I press "Save"
83 83 Then I should see "Bahia"
84   -
... ...
features/change_organization_name.feature
... ... @@ -12,12 +12,12 @@ Feature: change organization name
12 12 | joaosilva | Joao Silva |
13 13 And "Joao Silva" is admin of "Sample Community"
14 14 And I am logged in as "joaosilva"
15   - And I am on Sample Community's control panel
  15 + And I am on sample-community's control panel
16 16 And I follow "Community Info and settings"
17 17 And I fill in "Name" with "New Sample Community"
18 18 When I press "Save"
19   - Then I should be on New Sample Community's control panel
20   -
  19 + Then I should be on sample-community's control panel
  20 + And I should see "New Sample Community" within "title"
21 21  
22 22 Scenario: changing enterprise's name
23 23 Given the following enterprises
... ... @@ -28,8 +28,9 @@ Feature: change organization name
28 28 | joaosilva | Joao Silva |
29 29 And "Joao Silva" is admin of "Sample Enterprise"
30 30 And I am logged in as "joaosilva"
31   - And I am on Sample Enterprise's control panel
  31 + And I am on sample-enterprise's control panel
32 32 And I follow "Enterprise Info and settings"
33 33 And I fill in "Name" with "New Sample Enterprise"
34 34 When I press "Save"
35   - Then I should be on New Sample Enterprise's control panel
  35 + Then I should be on sample-enterprise's control panel
  36 + And I should see "New Sample Enterprise" within "title"
... ...
features/chat.feature
... ... @@ -17,7 +17,7 @@ Feature: chat
17 17 Scenario: provide link to open chat
18 18 Given feature "xmpp_chat" is enabled on environment
19 19 And I am logged in as "tame"
20   - Then I should see "Open chat" link
  20 + Then I should see "Open chat" within "#user"
21 21  
22 22 @selenium
23 23 Scenario: provide the chat online users content
... ... @@ -30,18 +30,18 @@ Feature: chat
30 30 Given the profile "tame" has no blocks
31 31 And feature "xmpp_chat" is enabled on environment
32 32 And I am logged in as "tame"
33   - And I go to Tame's profile
34   - When I click "#chat-online-users-title"
  33 + And I go to tame's profile
  34 + When I follow "chat-online-users-title"
35 35 Then I should see "Maria Silva"
36 36 And I should see "Jose Silva"
37 37  
38 38 Scenario: not provide link to chat when environment not support that
39 39 Given I am logged in as "tame"
40   - Then I should not see "Open chat" link
  40 + Then I should not see "Open chat" within "#user"
41 41  
42 42 Scenario: not provide link to chat when the user is logged out
43   - Given I am on Tame's homepage
44   - Then I should not see "Open chat" link
  43 + Given I am on tame's homepage
  44 + Then I should not see "Open chat" within "#user"
45 45  
46 46 @selenium
47 47 Scenario: not provide the chat online users list when environment not support that
... ... @@ -71,8 +71,8 @@ Feature: chat
71 71 Given the profile "tame" has no blocks
72 72 And feature "xmpp_chat" is enabled on environment
73 73 And I am logged in as "tame"
74   - And I go to Tame's profile
75   - When I click "#chat-online-users-title"
  74 + And I go to tame's profile
  75 + When I follow "chat-online-users-title"
76 76 And I follow "Maria Silva"
77 77 And I select window "noosfero_chat"
78 78 Then I should see "Chat - Colivre.net - Friends online (0)"
... ... @@ -83,7 +83,7 @@ Feature: chat
83 83 And I am logged in as "tame"
84 84 When I follow "Open chat"
85 85 And I select window "noosfero_chat"
86   - Then I should see "Offline" link
  86 + Then I should see "Offline" within "a"
87 87  
88 88 @selenium
89 89 Scenario: view options to change my chat status through menu
... ... @@ -91,13 +91,13 @@ Feature: chat
91 91 And I am logged in as "tame"
92 92 And I follow "Open chat"
93 93 When I select window "noosfero_chat"
94   - Then the "#chat-online" should not be visible
95   - And the "#chat-busy" should not be visible
96   - And the "#chat-disconnect" should not be visible
  94 + Then "Online" should not be visible within "#user-status"
  95 + And "Busy" should not be visible within "#user-status"
  96 + And "Sign out of chat" should not be visible within "#user-status"
97 97 When I follow "Offline"
98   - Then the "#chat-connect" should be visible
99   - And the "#chat-busy" should be visible
100   - And the "#chat-disconnect" should be visible
  98 + Then "Online" should be visible within "#user-status"
  99 + And "Busy" should be visible within "#user-status"
  100 + And "Sign out of chat" should be visible within "#user-status"
101 101  
102 102 @selenium
103 103 Scenario: link to open chatroom of a community
... ... @@ -107,8 +107,8 @@ Feature: chat
107 107 And "Tame" is a member of "Autoramas"
108 108 And feature "xmpp_chat" is enabled on environment
109 109 And I am logged in as "tame"
110   - When I go to Autoramas's profile
111   - Then I should see "Enter chat room" link
  110 + When I go to autoramas's profile
  111 + Then I should see "Enter chat room"
112 112  
113 113 @selenium
114 114 Scenario: not see link to open chatroom of a community if not a member
... ... @@ -117,8 +117,8 @@ Feature: chat
117 117 | autoramas | Autoramas |
118 118 And feature "xmpp_chat" is enabled on environment
119 119 And I am logged in as "tame"
120   - When I go to Autoramas's profile
121   - Then I should not see "Enter chat room" link
  120 + When I go to autoramas's profile
  121 + Then I should not see "Enter chat room" within "a"
122 122  
123 123 @selenium
124 124 Scenario: not see link to open chatroom of a community if xmpp_chat disabled
... ... @@ -127,8 +127,8 @@ Feature: chat
127 127 | autoramas | Autoramas |
128 128 And "Tame" is a member of "Autoramas"
129 129 And I am logged in as "tame"
130   - When I go to Autoramas's profile
131   - Then I should not see "Enter chat room" link
  130 + When I go to autoramas's profile
  131 + Then I should not see "Enter chat room" within "a"
132 132  
133 133 @selenium
134 134 Scenario: open chatroom of a community in a new window
... ... @@ -138,7 +138,7 @@ Feature: chat
138 138 | autoramas | Autoramas |
139 139 And "Tame" is a member of "Autoramas"
140 140 And I am logged in as "tame"
141   - When I go to Autoramas's profile
  141 + When I go to autoramas's profile
142 142 And I follow "Enter chat room"
143 143 And I select window "noosfero_chat"
144 144 Then I should see "Chat - Colivre.net - Friends online (0)"
... ...
features/clickable_images.feature
... ... @@ -22,7 +22,7 @@ Feature: clickable images
22 22 | owner | name | image | dimensions |
23 23 | booking | real | rails.png | 50x64 |
24 24 When I go to /booking/real
25   - Then I should not see "Zoom in"
  25 + Then "Zoom in" should not be visible within "a#zoomify-image"
26 26  
27 27 @selenium
28 28 Scenario: not show link if image does not have dimensions set
... ... @@ -30,9 +30,9 @@ Feature: clickable images
30 30 | owner | name | image |
31 31 | booking | not set | rails.png |
32 32 When I go to /booking/not-set
33   - Then I should not see "Zoom in"
  33 + Then "Zoom in" should not be visible within "a#zoomify-image"
34 34  
35   - @selenium
  35 + @selenium-fixme
36 36 Scenario: copy style from image
37 37 Given the following article with image
38 38 | owner | name | image | style | dimensions |
... ... @@ -40,11 +40,11 @@ Feature: clickable images
40 40 When I go to /booking/with-style
41 41 Then "zoomable-image" should be right aligned
42 42  
43   - @selenium
  43 + @selenium-fixme
44 44 Scenario: zoom image
45 45 Given the following article with image
46 46 | owner | name | image | dimensions |
47 47 | booking | zoom | rails.png | 25x32 |
48 48 When I go to /booking/zoom
49   - And I follow "Zoom in"
50   - Then the "#fancybox-wrap" should be visible
  49 + And I follow "Zoom in" within "a#zoomify-image"
  50 + Then I should see "fancybox-wrap"
... ...
features/comment.feature
... ... @@ -14,19 +14,23 @@ Feature: comment
14 14 | article | author | title | body |
15 15 | article with comment | booking | hi | how are you? |
16 16 | article with comment | booking | hello | i am fine |
  17 + And feature "captcha_for_logged_users" is disabled on environment
  18 + And I am logged in as "booking"
17 19  
18 20 Scenario: not post a comment without javascript
19 21 Given I am on /booking/article-to-comment
20   - And I fill in "Name" with "Joey Ramone"
21   - And I fill in "e-mail" with "joey@ramones.com"
  22 + And I follow "Post a comment"
22 23 And I fill in "Title" with "Hey ho, let's go!"
23 24 And I fill in "Enter your comment" with "Hey ho, let's go!"
24 25 When I press "Post comment"
25 26 Then I should not see "Hey ho, let's go"
26 27  
27   - @selenium
  28 + # This test requires some way to overcome the captcha with unauthenticated
  29 + # user.
  30 + @selenium-fixme
28 31 Scenario: post a comment while not authenticated
29 32 Given I am on /booking/article-to-comment
  33 + And I follow "Post a comment"
30 34 And I fill in "Name" with "Joey Ramone"
31 35 And I fill in "e-mail" with "joey@ramones.com"
32 36 And I fill in "Title" with "Hey ho, let's go!"
... ... @@ -36,8 +40,8 @@ Feature: comment
36 40  
37 41 @selenium
38 42 Scenario: post comment while authenticated
39   - Given I am logged in as "booking"
40   - And I am on /booking/article-to-comment
  43 + Given I am on /booking/article-to-comment
  44 + And I follow "Post a comment"
41 45 And I fill in "Title" with "Hey ho, let's go!"
42 46 And I fill in "Enter your comment" with "Hey ho, let's go!"
43 47 When I press "Post comment"
... ... @@ -48,8 +52,8 @@ Feature: comment
48 52 Given the following files
49 53 | owner | file | mime |
50 54 | booking | rails.png | image/png |
51   - Given I am logged in as "booking"
52 55 And I am on /booking/rails.png?view=true
  56 + And I follow "Post a comment"
53 57 And I fill in "Title" with "Hey ho, let's go!"
54 58 And I fill in "Enter your comment" with "Hey ho, let's go!"
55 59 When I press "Post comment"
... ... @@ -57,35 +61,34 @@ Feature: comment
57 61  
58 62 @selenium
59 63 Scenario: show error messages when make a blank comment
60   - Given I am logged in as "booking"
61   - And I am on /booking/article-to-comment
  64 + Given I am on /booking/article-to-comment
  65 + And I follow "Post a comment"
62 66 When I press "Post comment"
63   - Then I should see "Title can't be blank"
64   - And I should see "Body can't be blank"
  67 + Then I should see "Body can't be blank"
65 68  
66   - @selenium
  69 + @selenium-fixme
67 70 Scenario: disable post comment button
68 71 Given I am on /booking/article-to-comment
69   - And I fill in "Name" with "Joey Ramone"
70   - And I fill in "e-mail" with "joey@ramones.com"
  72 + And I follow "Post a comment"
71 73 And I fill in "Title" with "Hey ho, let's go!"
72 74 And I fill in "Enter your comment" with "Hey ho, let's go!"
73 75 When I press "Post comment"
74   - Then the "value.Post comment" button should not be enabled
75   - And I should see "Hey ho, let's go"
  76 +# Implement these steps...
  77 +# Then "Post comment" button should not be enabled
  78 +# And I should see "Hey ho, let's go"
76 79  
77 80 @selenium
78 81 Scenario: render comment form and go to bottom
79 82 Given I am on /booking/article-with-comment
80   - When I follow "Post a comment" within ".post-comment-button"
81   - Then I should see "Enter your comment" within "div#page-comment-form div.post_comment_box.opened"
82   - And I should be exactly on /booking/article-with-comment
83   - And I should be moved to anchor "comment_form"
  83 + When I follow "Post a comment"
  84 + Then I should see "Enter your comment"
  85 + And I should be on /booking/article-with-comment
84 86  
85 87 @selenium
86 88 Scenario: keep comments field filled while trying to do a comment
87 89 Given I am on /booking/article-with-comment
88   - And I fill in "Name" with "Joey Ramone"
  90 + And I follow "Post a comment"
  91 + And I fill in "Title" with "Joey Ramone"
89 92 When I press "Post comment"
90   - Then the "Name" field should contain "Joey Ramone"
91   - And I should see "errors prohibited"
  93 + Then the "Title" field should contain "Joey Ramone"
  94 + And I should see "Body can't be blank"
... ...
features/comment_reply.feature
... ... @@ -25,7 +25,7 @@ Feature: comment
25 25 Then I should not see "Enter your comment" within "div.comment-balloon"
26 26 And I should see "Reply" within "div.comment-balloon"
27 27  
28   - @selenium
  28 + @selenium-fixme
29 29 Scenario: show error messages when make a blank comment reply
30 30 Given I am logged in as "booking"
31 31 And I go to /booking/article-to-comment
... ... @@ -51,9 +51,9 @@ Feature: comment
51 51 Given I am on /booking/article-to-comment
52 52 When I follow "Reply" within ".comment-balloon"
53 53 And I follow "Cancel" within ".comment-balloon"
54   - Then I should see "Enter your comment" within "div.comment_reply.closed"
  54 + Then I should not see "Enter your comment" within "div.comment_reply.closed"
55 55  
56   - @selenium
  56 + @selenium-fixme
57 57 Scenario: not render same reply form twice
58 58 Given I am on /booking/article-to-comment
59 59 When I follow "Reply" within ".comment-balloon"
... ... @@ -62,7 +62,7 @@ Feature: comment
62 62 Then there should be 1 "comment_form" within "comment_reply"
63 63 And I should see "Enter your comment" within "div.comment_reply.opened"
64 64  
65   - @selenium
  65 + @selenium-fixme
66 66 Scenario: reply a comment
67 67 Given I go to /booking/another-article
68 68 And I follow "Reply" within ".comment-balloon"
... ... @@ -74,7 +74,7 @@ Feature: comment
74 74 Then I should see "Hey ho, let's go" within "ul.comment-replies"
75 75 And there should be 1 "comment-replies" within "article-comment"
76 76  
77   - @selenium
  77 + @selenium-fixme
78 78 Scenario: redirect to right place after reply a picture comment
79 79 Given the following files
80 80 | owner | file | mime |
... ...
features/contact.feature
... ... @@ -14,8 +14,8 @@ In order to ask questions and solve problems
14 14  
15 15 @selenium
16 16 Scenario: without states
17   - Given I am on Sample Community's homepage
18   - When I follow "Send an e-mail" and wait
  17 + Given I am on sample-community's homepage
  18 + When I follow "Send an e-mail"
19 19 Then I should not see "City and state"
20 20  
21 21 @selenium
... ... @@ -23,7 +23,6 @@ In order to ask questions and solve problems
23 23 Given the following states
24 24 | name |
25 25 | Bahia |
26   - And I am on Sample Community's homepage
27   - When I follow "Send an e-mail" and wait
  26 + And I am on sample-community's homepage
  27 + When I follow "Send an e-mail"
28 28 Then I should see "City and state"
29   -
... ...
features/create_community.feature
... ... @@ -11,7 +11,7 @@ Feature: create community
11 11 Scenario: a user creates a community
12 12 Given I am logged in as "joaosilva"
13 13 And feature "admin_must_approve_new_communities" is disabled on environment
14   - And I go to the Control panel
  14 + And I go to joaosilva's control panel
15 15 And I follow "Manage my groups"
16 16 When I follow "Create a new community"
17 17 And I fill in "Name" with "Fancy community"
... ... @@ -22,7 +22,7 @@ Feature: create community
22 22 Scenario: a user creates a community when environment moderates it
23 23 Given I am logged in as "joaosilva"
24 24 And feature "admin_must_approve_new_communities" is enabled on environment
25   - When I go to the Control panel
  25 + And I go to joaosilva's control panel
26 26 And I follow "Manage my groups"
27 27 And I follow "Create a new community"
28 28 And I fill in "Name" with "Community for moderation"
... ... @@ -32,7 +32,7 @@ Feature: create community
32 32 Scenario: a user tries to create a community without a name
33 33 Given I am logged in as "joaosilva"
34 34 And feature "admin_must_approve_new_communities" is disabled on environment
35   - And I go to the Control panel
  35 + And I go to joaosilva's control panel
36 36 And I follow "Manage my groups"
37 37 When I follow "Create a new community"
38 38 And I press "Create"
... ... @@ -42,20 +42,20 @@ Feature: create community
42 42 Given I am logged in as admin
43 43 And feature "admin_must_approve_new_communities" is enabled on environment
44 44 When I create community "Community for approval"
45   - And I go to the Control panel
  45 + And I go to admin_user's control panel
46 46 Then I should see "admin_user wants to create community Community for approval"
47 47  
48 48 Scenario: environment admin accepts new community task
49 49 Given I am logged in as admin
50 50 And feature "admin_must_approve_new_communities" is enabled on environment
51 51 When I create community "Community for approval"
52   - And I go to the Control panel
  52 + And I go to admin_user's control panel
53 53 And I follow "Process requests"
54 54 And I should see "admin_user wants to create community Community for approval"
55 55 And I choose "Accept"
56 56 When I press "Apply!"
57 57 Then I should not see "admin_user wants to create community Community for approval"
58   - When I go to the Control panel
  58 + And I go to admin_user's control panel
59 59 And I follow "Manage my groups"
60 60 Then I should see "Community for approval"
61 61  
... ... @@ -63,13 +63,13 @@ Feature: create community
63 63 Given I am logged in as admin
64 64 And feature "admin_must_approve_new_communities" is enabled on environment
65 65 When I create community "Community for approval"
66   - And I go to the Control panel
  66 + And I go to admin_user's control panel
67 67 And I follow "Process requests"
68 68 And I should see "admin_user wants to create community Community for approval"
69 69 And I choose "Reject"
70 70 When I press "Apply!"
71 71 Then I should not see "admin_user wants to create community Community for approval"
72   - When I go to the Control panel
  72 + And I go to admin_user's control panel
73 73 And I follow "Manage my groups"
74 74 Then I should not see "Community for approval"
75 75  
... ... @@ -78,7 +78,7 @@ Feature: create community
78 78 And feature "admin_must_approve_new_communities" is enabled on environment
79 79 When I create community "Community for approval"
80 80 And I approve community "Community for approval"
81   - When I go to the Control panel
  81 + And I go to admin_user's control panel
82 82 And I follow "Manage my groups"
83 83 Then I should see "Community for approval"
84 84  
... ... @@ -87,6 +87,6 @@ Feature: create community
87 87 And feature "admin_must_approve_new_communities" is enabled on environment
88 88 When I create community "Community for approval"
89 89 And I reject community "Community for approval"
90   - When I go to the Control panel
  90 + And I go to admin_user's control panel
91 91 And I follow "Manage my groups"
92 92 Then I should not see "Community for approval"
... ...
features/delete_profile.feature
... ... @@ -13,9 +13,10 @@ Feature: delete profile
13 13 | sample-community | Sample Community |
14 14 And "Maria Silva" is a member of "Sample Community"
15 15  
  16 + @selenium
16 17 Scenario: deleting profile
17 18 Given I am logged in as "joaosilva"
18   - And I am on Joao Silva's control panel
  19 + And I am on joaosilva's control panel
19 20 And I follow "Edit Profile"
20 21 And I follow "Delete profile"
21 22 Then I should see "Are you sure you want to delete this profile?"
... ... @@ -31,24 +32,25 @@ Feature: delete profile
31 32  
32 33 Scenario: giving up of deleting profile
33 34 Given I am logged in as "joaosilva"
34   - And I am on Joao Silva's control panel
  35 + And I am on joaosilva's control panel
35 36 And I follow "Edit Profile"
36 37 And I follow "Delete profile"
37 38 Then I should see "Are you sure you want to delete this profile?"
38 39 When I follow "No, I gave up"
39   - Then I should be on Joao Silva's profile
  40 + Then I should be on joaosilva's profile
40 41  
41 42 Scenario: community admin can see link to delete profile
42 43 Given "Joao Silva" is admin of "Sample Community"
43 44 And I am logged in as "joaosilva"
44   - And I am on Sample Community's control panel
  45 + And I am on sample-community's control panel
45 46 When I follow "Community Info and settings"
46 47 Then I should see "Delete profile"
47 48  
  49 + @selenium
48 50 Scenario: community admin deletes the community
49 51 Given "Joao Silva" is admin of "Sample Community"
50 52 And I am logged in as "joaosilva"
51   - And I am on Sample Community's control panel
  53 + And I am on sample-community's control panel
52 54 And I follow "Community Info and settings"
53 55 And I follow "Delete profile"
54 56 Then I should see "Are you sure you want to delete this profile?"
... ... @@ -69,17 +71,18 @@ Feature: delete profile
69 71 | sample-enterprise | Sample Enterprise |
70 72 And "Joao Silva" is admin of "Sample Enterprise"
71 73 And I am logged in as "joaosilva"
72   - And I am on Sample Enterprise's control panel
  74 + And I am on sample-enterprise's control panel
73 75 When I follow "Enterprise Info and settings"
74 76 Then I should see "Delete profile"
75 77  
  78 + @selenium
76 79 Scenario: enterprise admin deletes the enterprise
77 80 Given the following enterprise
78 81 | identifier | name |
79 82 | sample-enterprise | Sample Enterprise |
80 83 And "Joao Silva" is admin of "Sample Enterprise"
81 84 And I am logged in as "joaosilva"
82   - And I am on Sample Enterprise's control panel
  85 + And I am on sample-enterprise's control panel
83 86 When I follow "Enterprise Info and settings"
84 87 And I follow "Delete profile"
85 88 Then I should see "Are you sure you want to delete this profile?"
... ... @@ -98,9 +101,10 @@ Feature: delete profile
98 101 And I go to /myprofile/sample-enterprise/profile_editor/destroy_profile
99 102 Then I should see "Access denied"
100 103  
  104 + @selenium
101 105 Scenario: environment admin deletes profile
102 106 Given I am logged in as admin
103   - And I am on Joao Silva's control panel
  107 + And I am on joaosilva's control panel
104 108 And I follow "Edit Profile"
105 109 And I follow "Delete profile"
106 110 Then I should see "Are you sure you want to delete this profile?"
... ...
features/edit_article.feature
... ... @@ -13,17 +13,17 @@ Feature: edit article
13 13 And I am logged in as "joaosilva"
14 14  
15 15 Scenario: create a folder
16   - Given I am on Joao Silva's control panel
  16 + Given I am on joaosilva's control panel
17 17 And I follow "Manage Content"
18 18 And I follow "New content"
19 19 When I follow "Folder"
20 20 And I fill in "Title" with "My Folder"
21 21 And I press "Save"
22   - And I go to Joao Silva's control panel
  22 + And I go to joaosilva's control panel
23 23 Then I should see "My Folder"
24 24  
25 25 Scenario: redirect to the created folder
26   - Given I am on Joao Silva's control panel
  26 + Given I am on joaosilva's control panel
27 27 And I follow "Manage Content"
28 28 And I follow "New content"
29 29 When I follow "Folder"
... ... @@ -33,29 +33,29 @@ Feature: edit article
33 33 And I should be on /joaosilva/my-folder
34 34  
35 35 Scenario: cancel button back to cms
36   - Given I go to the Control panel
  36 + Given I am on joaosilva's control panel
37 37 And I follow "Manage Content"
38 38 And I follow "New content"
39 39 And I follow "Folder"
40 40 When I follow "Cancel" within ".main-block"
41   - Then I should be on Joao Silva's cms
  41 + Then I should be on joaosilva's cms
42 42  
43 43 Scenario: display tag list field when creating event
44   - Given I go to the Control panel
  44 + Given I am on joaosilva's control panel
45 45 And I follow "Manage Content"
46 46 And I follow "New content"
47 47 When I follow "Event"
48 48 Then I should see "Tag list"
49 49  
50 50 Scenario: display tag list field when creating folder
51   - Given I go to the Control panel
  51 + Given I am on joaosilva's control panel
52 52 And I follow "Manage Content"
53 53 And I follow "New content"
54 54 When I follow "Folder"
55 55 Then I should see "Tag list"
56 56  
57 57 Scenario: create new article with tags
58   - Given I go to the Control panel
  58 + Given I am on joaosilva's control panel
59 59 And I follow "Manage Content"
60 60 And I follow "New content"
61 61 When I follow "Text article with Textile markup language"
... ... @@ -68,7 +68,7 @@ Feature: edit article
68 68 And I should see "bug" within "#article-tags a:last"
69 69  
70 70 Scenario: redirect to the created article
71   - Given I am on Joao Silva's control panel
  71 + Given I am on joaosilva's control panel
72 72 And I follow "Manage Content"
73 73 When I follow "New content"
74 74 When I follow "Text article with visual editor"
... ... @@ -79,62 +79,62 @@ Feature: edit article
79 79  
80 80 @selenium
81 81 Scenario: edit an article
82   - Given I am on Joao Silva's sitemap
83   - When I follow "Save the whales" and wait
84   - And I follow "Edit" and wait
  82 + Given I am on joaosilva's sitemap
  83 + When I follow "Save the whales"
  84 + And I follow "Edit"
85 85 And I fill in "Title" with "My Article edited"
86   - And I press "Save" and wait
  86 + And I press "Save"
87 87 Then I should be on /joaosilva/my-article-edited
88 88  
89 89 @selenium
90 90 Scenario: cancel button back to article when edit
91   - Given I am on Joao Silva's sitemap
92   - When I follow "Save the whales" and wait
93   - And I follow "Edit" and wait
94   - And I follow "Cancel" and wait
  91 + Given I am on joaosilva's sitemap
  92 + When I follow "Save the whales"
  93 + And I follow "Edit" within "#article-actions"
  94 + And I follow "Cancel"
95 95 Then I should be on /joaosilva/save-the-whales
96 96  
97 97 @selenium
98 98 Scenario: create an article inside a folder
99   - Given I am on Joao Silva's control panel
  99 + Given I am on joaosilva's control panel
100 100 When I follow "Manage Content"
101 101 And I follow "New content"
102   - And I follow "Folder" and wait
  102 + And I follow "Folder"
103 103 And I fill in "Title" with "My Folder"
104   - And I press "Save" and wait
  104 + And I press "Save"
105 105 Then I should be on /joaosilva/my-folder
106 106 When I follow "New article"
107   - And I follow "Text article with visual editor" and wait
  107 + And I follow "Text article with visual editor"
108 108 And I fill in "Title" with "My Article"
109   - And I press "Save" and wait
  109 + And I press "Save"
110 110 Then I should see "My Article"
111 111 And I should be on /joaosilva/my-folder/my-article
112 112  
113 113 @selenium
114 114 Scenario: cancel button back to folder after giving up creating
115   - Given I am on Joao Silva's control panel
  115 + Given I am on joaosilva's control panel
116 116 When I follow "Manage Content"
117 117 And I follow "New content"
118   - And I follow "Folder" and wait
  118 + And I follow "Folder"
119 119 And I fill in "Title" with "My Folder"
120   - And I press "Save" and wait
  120 + And I press "Save"
121 121 Then I should be on /joaosilva/my-folder
122 122 When I follow "New article"
123   - And I follow "Text article with visual editor" and wait
124   - And I follow "Cancel" within ".no-boxes" and wait
  123 + And I follow "Text article with visual editor"
  124 + And I follow "Cancel" within ".no-boxes"
125 125 Then I should be on /joaosilva/my-folder
126 126  
127 127 @selenium
128 128 Scenario: save and continue
129 129 Given I am on /joaosilva/save-the-whales
130   - And I follow "Edit" and wait
  130 + And I follow "Edit"
131 131 When I fill in "Text" with "new text"
132 132 And I press "Save and continue"
133 133 Then the "Text" field should contain "new text"
134 134 And I should be on "Save the whales" edit page
135 135  
136 136 Scenario: save and continue when creating a new article
137   - Given I am on Joao Silva's control panel
  137 + Given I am on joaosilva's control panel
138 138 When I follow "Manage Content"
139 139 And I follow "New content"
140 140 And I follow "Text article with visual editor"
... ... @@ -147,16 +147,16 @@ Feature: edit article
147 147  
148 148 @selenium
149 149 Scenario: add a translation to an article
150   - Given I am on Joao Silva's sitemap
  150 + Given I am on joaosilva's sitemap
151 151 And I follow "Save the whales"
152 152 Then I should not see "Add translation"
153   - And I follow "Edit" and wait
  153 + And I follow "Edit"
154 154 And I select "English" from "Language"
155   - Then I press "Save" and wait
156   - And I follow "Add translation" and wait
  155 + Then I press "Save"
  156 + And I follow "Add translation"
157 157 And I fill in "Title" with "Mi neuvo artículo"
158 158 And I select "Español" from "Language"
159   - When I press "Save" and wait
  159 + When I press "Save"
160 160 Then I should be on /joaosilva/mi-neuvo-articulo
161 161 And I should see "Translations"
162 162  
... ... @@ -165,13 +165,13 @@ Feature: edit article
165 165 Given the following articles
166 166 | owner | name | language |
167 167 | joaosilva | Article in English | en |
168   - And I am on Joao Silva's sitemap
169   - When I follow "Article in English" and wait
170   - And I follow "Add translation" and wait
  168 + And I am on joaosilva's sitemap
  169 + When I follow "Article in English"
  170 + And I follow "Add translation"
171 171 And I fill in "Title" with "Article in Portuguese"
172   - And I press "Save" and wait
  172 + And I press "Save"
173 173 Then I should see "Language must be choosen"
174 174 When I select "Português" from "Language"
175   - And I press "Save" and wait
  175 + And I press "Save"
176 176 Then I should not see "Language must be choosen"
177 177 And I should be on /joaosilva/article-in-portuguese
... ...
features/edit_block_of_links.feature
... ... @@ -12,7 +12,7 @@ Feature: edit_block_of_links
12 12 | eddievedder | LinkListBlock |
13 13 And I am logged in as "eddievedder"
14 14  
15   - @selenium
  15 + @selenium-fixme
16 16 Scenario: show the icon selector
17 17 Given I follow "Edit sideboxes"
18 18 And I follow "Edit" within ".link-list-block"
... ...
features/edit_environment_templates.feature
... ... @@ -4,50 +4,46 @@ Feature: edit environment templates
4 4  
5 5 Background:
6 6 Given that the default environment have all profile templates
  7 + And I am logged in as admin
  8 + And I am on the environment control panel
7 9  
  10 + @selenium
8 11 Scenario: See links to edit all templates
9   - Given I am logged in as admin
10   - When I follow "Administration"
11   - And I follow "Profile templates"
12   - Then I should see "Person template" link
13   - And I should see "Community template" link
14   - And I should see "Enterprise template" link
15   - And I should see "Inactive Enterprise template" link
  12 + Given I follow "Profile templates"
  13 + Then I should see "Person template"
  14 + And I should see "Community template"
  15 + And I should see "Enterprise template"
  16 + And I should see "Inactive Enterprise template"
16 17  
  18 + @selenium
17 19 Scenario: Go to control panel of person template
18   - Given I am logged in as admin
19   - When I follow "Administration"
20   - And I follow "Profile templates"
  20 + Given I follow "Profile templates"
21 21 And I follow "Person template"
22   - Then I should be on Person template's control panel
  22 + Then I should be on colivre.net_person_template's control panel
23 23  
  24 + @selenium
24 25 Scenario: Go to control panel of enterprise template
25   - Given I am logged in as admin
26   - When I follow "Administration"
27   - And I follow "Profile templates"
  26 + Given I follow "Profile templates"
28 27 And I follow "Enterprise template"
29   - Then I should be on Enterprise template's control panel
  28 + Then I should be on colivre.net_enterprise_template's control panel
30 29  
  30 + @selenium
31 31 Scenario: Go to control panel of inactive enterprise template
32   - Given I am logged in as admin
33   - When I follow "Administration"
34   - And I follow "Profile templates"
35   - And I follow "Inactive enterprise template"
36   - Then I should be on Inactive Enterprise template's control panel
  32 + Given I follow "Profile templates"
  33 + And I follow "Inactive Enterprise template"
  34 + Then I should be on colivre.net_inactive_enterprise_template's control panel
37 35  
  36 + @selenium
38 37 Scenario: Go to control panel of community template
39   - Given I am logged in as admin
40   - When I follow "Administration"
41   - And I follow "Profile templates"
42   - And I follow "Community template"
43   - Then I should be on Community template's control panel
  38 + Given I follow "Profile templates"
  39 + When I follow "Community template"
  40 + Then I should be on colivre.net_community_template's control panel
44 41  
  42 + @selenium
45 43 Scenario: Not see link to edit an unexistent template
46   - Given that the default environment have no Inactive Enterprise template
47   - And I am logged in as admin
48   - When I follow "Administration"
49   - And I follow "Profile templates"
50   - Then I should see "Person template" link
51   - And I should see "Community template" link
52   - And I should see "Enterprise template" link
53   - And I should not see "Inactive enterprise template" link
  44 + Given I follow "Profile templates"
  45 + And that the default environment have no Inactive Enterprise template
  46 + Then I should see "Person template"
  47 + And I should see "Community template"
  48 + And I should see "Enterprise template"
  49 + And I should not see "Inactive enterprise template"
... ...
features/edit_language_block.feature
... ... @@ -15,25 +15,25 @@ Feature: edit language of block
15 15 Scenario: display in all languages
16 16 Given I go to edit ArticleBlock of joaosilva
17 17 And I fill in "Custom title for this block" with "Block displayed"
18   - And I select "all languages"
  18 + And I select "all languages" from "Show for"
19 19 And I press "Save"
20   - When I go to Jose Silva's homepage
  20 + When I go to joaosilva's homepage
21 21 Then I should see "Block displayed"
22 22  
23 23 Scenario: display in the selected language
24 24 Given I go to edit LinkListBlock of joaosilva
25 25 And I fill in "Custom title for this block" with "Block displayed"
26   - And I select "English"
  26 + And I select "English" from "Show for"
27 27 And I press "Save"
28 28 And my browser prefers English
29   - When I go to Jose Silva's homepage
  29 + When I go to joaosilva's homepage
30 30 Then I should see "Block displayed"
31 31  
32 32 Scenario: not display in a not selected language
33 33 Given I go to edit LinkListBlock of joaosilva
34 34 And I fill in "Custom title for this block" with "Block not displayed"
35   - And I select "English"
  35 + And I select "English" from "Show for"
36 36 And I press "Save"
37 37 And my browser prefers Portuguese
38   - When I go to Jose Silva's homepage
  38 + When I go to joaosilva's homepage
39 39 Then I should not see "Block displayed"
... ...
features/edit_profile.feature
... ... @@ -12,8 +12,8 @@ Feature: edit profile
12 12 | birth_date |
13 13 When I go to joao's control panel
14 14 And I follow "Edit Profile"
15   - And I select "November"
16   - And I select "15"
  15 + And I select "November" from "profile_data_birth_date_2i"
  16 + And I select "15" from "profile_data_birth_date_3i"
17 17 And I press "Save"
18 18 Then I should see "Birth date is invalid"
19 19 And I should not see "Birth date can't be blank"
... ... @@ -24,8 +24,8 @@ Feature: edit profile
24 24 | birth_date |
25 25 When I go to joao's control panel
26 26 And I follow "Edit Profile"
27   - And I select "November"
28   - And I select "15"
  27 + And I select "November" from "profile_data_birth_date_2i"
  28 + And I select "15" from "profile_data_birth_date_3i"
29 29 And I press "Save"
30 30 Then I should see "Birth date is invalid"
31 31 And I should not see "Birth date can't be blank"
... ... @@ -36,9 +36,9 @@ Feature: edit profile
36 36 | birth_date |
37 37 When I go to joao's control panel
38 38 And I follow "Edit Profile"
39   - And I select "November"
40   - And I select "15"
41   - And I select "1980"
  39 + And I select "November" from "profile_data_birth_date_2i"
  40 + And I select "15" from "profile_data_birth_date_3i"
  41 + And I select "1980" from "profile_data_birth_date_1i"
42 42 And I press "Save"
43 43 Then I should not see "Birth date is invalid"
44 44 And I should not see "Birth date is mandatory"
... ... @@ -49,9 +49,9 @@ Feature: edit profile
49 49 | birth_date |
50 50 When I go to joao's control panel
51 51 And I follow "Edit Profile"
52   - And I select "November"
53   - And I select "15"
54   - And I select "1980"
  52 + And I select "November" from "profile_data_birth_date_2i"
  53 + And I select "15" from "profile_data_birth_date_3i"
  54 + And I select "1980" from "profile_data_birth_date_1i"
55 55 And I press "Save"
56 56 Then I should not see "Birth date is invalid"
57 57 And I should not see "Birth date is mandatory"
... ... @@ -62,11 +62,11 @@ Feature: edit profile
62 62 | identifier | name | owner |
63 63 | o-rappa | O Rappa | joao |
64 64 And feature "enable_organization_url_change" is enabled on environment
65   - When I go to O Rappa's control panel
66   - And I follow "Community Info and settings" and wait
67   - Then the "#identifier-change-confirmation" should not be visible
  65 + When I go to o-rappa's control panel
  66 + And I follow "Community Info and settings"
  67 + And I should not see "identifier-change-confirmation"
68 68 When I fill in "Address" with "banda-o-rappa"
69   - Then the "#identifier-change-confirmation" should be visible
  69 + And I should see "identifier-change-confirmation"
70 70  
71 71 @selenium
72 72 Scenario: Confirm url change
... ... @@ -74,12 +74,12 @@ Feature: edit profile
74 74 | identifier | name | owner |
75 75 | o-rappa | O Rappa | joao |
76 76 And feature "enable_organization_url_change" is enabled on environment
77   - When I go to O Rappa's control panel
78   - And I follow "Community Info and settings" and wait
  77 + When I go to o-rappa's control panel
  78 + And I follow "Community Info and settings"
79 79 When I fill in "Address" with "banda-o-rappa"
80   - Then the "#identifier-change-confirmation" should be visible
  80 + Then I should see "identifier-change-confirmation"
81 81 When I follow "Yes"
82   - Then the "#identifier-change-confirmation" should not be visible
  82 + Then "identifier-change-confirmation" should not be visible within "profile-identifier-formitem"
83 83  
84 84 @selenium
85 85 Scenario: Cancel url change
... ... @@ -87,9 +87,9 @@ Feature: edit profile
87 87 | identifier | name | owner |
88 88 | o-rappa | O Rappa | joao |
89 89 And feature "enable_organization_url_change" is enabled on environment
90   - When I go to O Rappa's control panel
91   - And I follow "Community Info and settings" and wait
  90 + When I go to o-rappa's control panel
  91 + And I follow "Community Info and settings"
92 92 When I fill in "Address" with "banda-o-rappa"
93   - Then the "#identifier-change-confirmation" should be visible
  93 + Then I should see "identifier-change-confirmation"
94 94 When I follow "No"
95   - Then the "#identifier-change-confirmation" should not be visible
  95 + Then "identifier-change-confirmation" should not be visible within "profile-identifier-formitem"
... ...
features/environment_name.feature
... ... @@ -3,6 +3,7 @@ Feature: setting environment name
3 3 I want to change the name of the environment
4 4 So that it appears in the window's title bar
5 5  
  6 + @selenium-fixme
6 7 Scenario: setting environment name through administration panel
7 8 Given I am logged in as admin
8 9 When I follow "Administration"
... ...
features/events.feature
... ... @@ -184,7 +184,7 @@ Feature: events
184 184 And "josesilva" is a member of "Sample Community"
185 185 And I go to josesilva's control panel
186 186 And I follow "Manage Content"
187   - And I follow "Another Conference" and wait
  187 + And I follow "Another Conference"
188 188 And I follow "Spread"
189 189 And I check "Sample Community"
190 190 And I press "Spread this"
... ... @@ -213,15 +213,15 @@ Feature: events
213 213 And I am on josesilva's Event creation
214 214 Then I should see "Lead"
215 215  
216   - @selenium
  216 + @selenium-fixme
217 217 Scenario: events lead should be shown on blogs with short format
218 218 Given I am logged in as "josesilva"
219 219 And I am on josesilva's control panel
220   - And I follow "Configure blog" and wait
  220 + And I follow "Configure blog"
221 221 And I select "First paragraph" from "How to display posts:"
222 222 And I press "Save"
223 223 And I follow "New post"
224   - And I follow "A calendar event" and wait
  224 + And I follow "A calendar event"
225 225 And I fill in "Title" with "Leaded event"
226 226 And I type "This is the abstract." in TinyMCE field "article_abstract"
227 227 And I type "This is the real text." in TinyMCE field "article_body"
... ...
features/export_users.feature
... ... @@ -9,15 +9,13 @@ Feature: export users
9 9  
10 10 Scenario: Export users as XML
11 11 Given I am logged in as admin
12   - When I follow "Administration"
13   - And I follow "Users"
  12 + When I go to /admin/users
14 13 And I follow "[XML]"
15 14 Then I should see "ultraje"
16 15  
17 16 Scenario: Export users as CSV
18 17 Given I am logged in as admin
19   - When I follow "Administration"
20   - And I follow "Users"
  18 + When I go to /admin/users
21 19 And I follow "[CSV]"
22 20 Then I should see "name;email"
23 21 And I should see "ultraje"
... ...
features/featured_products_block.feature
... ... @@ -23,7 +23,7 @@ Feature: featured_products_block
23 23 | redemoinho | automobile | Moto | Very long description of and auto-mobile moto to be truncated | true |
24 24 And I am logged in as "eddievedder"
25 25  
26   - @selenium
  26 + @selenium-fixme
27 27 Scenario: select a product to be featured
28 28 And I follow "Manage my groups"
29 29 And I follow "Control panel of this group"
... ... @@ -35,7 +35,7 @@ Feature: featured_products_block
35 35 And I should not see "float_to_currency"
36 36 And I should not see "product_path"
37 37  
38   - @selenium
  38 + @selenium-fixme
39 39 Scenario: display block with long description
40 40 Given I follow "Manage my groups"
41 41 And I follow "Control panel of this group"
... ...
features/forum.feature
... ... @@ -10,18 +10,18 @@ Feature: forum
10 10 And "joaosilva" has no articles
11 11 And I am logged in as "joaosilva"
12 12  
13   - @selenium
  13 + @selenium @ignore-hidden-elements
14 14 Scenario: create a forum
15   - Given I am on Joao Silva's control panel
  15 + Given I am on joaosilva's control panel
16 16 And I follow "Manage Content"
17 17 And I follow "New content"
18   - When I follow "Forum" and wait
  18 + When I follow "Forum"
19 19 And I fill in "Title" with "My Forum"
20   - And I press "Save" and wait
  20 + And I press "Save"
21 21 Then I should see "Configure forum"
22 22  
23 23 Scenario: redirect to forum after create forum from cms
24   - Given I go to the Control panel
  24 + Given I go to joaosilva's control panel
25 25 And I follow "Manage Content"
26 26 And I follow "New content"
27 27 When I follow "Forum"
... ... @@ -30,13 +30,13 @@ Feature: forum
30 30 Then I should be on /joaosilva/forum-from-cms
31 31  
32 32 Scenario: create multiple forums
33   - Given I go to the Control panel
  33 + Given I go to joaosilva's control panel
34 34 And I follow "Manage Content"
35 35 And I follow "New content"
36 36 And I follow "Forum"
37 37 And I fill in "Title" with "Forum One"
38 38 And I press "Save"
39   - Then I go to the Control panel
  39 + Then I go to joaosilva's control panel
40 40 And I follow "Manage Content"
41 41 And I follow "New content"
42 42 And I follow "Forum"
... ... @@ -46,7 +46,7 @@ Feature: forum
46 46 And I should be on /joaosilva/forum-two
47 47  
48 48 Scenario: cancel button back to cms
49   - Given I go to the Control panel
  49 + Given I go to joaosilva's control panel
50 50 And I follow "Manage Content"
51 51 And I follow "New content"
52 52 And I follow "Forum"
... ... @@ -54,7 +54,7 @@ Feature: forum
54 54 Then I should be on /myprofile/joaosilva/cms
55 55  
56 56 Scenario: cancel button back to myprofile
57   - Given I go to the Control panel
  57 + Given I go to joaosilva's control panel
58 58 And I follow "Manage Content"
59 59 And I follow "New content"
60 60 And I follow "Forum"
... ... @@ -66,8 +66,8 @@ Feature: forum
66 66 Given the following forums
67 67 | owner | name |
68 68 | joaosilva | Forum One |
69   - And I visit "/joaosilva/forum-one" and wait
70   - When I follow "Configure forum" and wait
  69 + And I go to /joaosilva/forum-one
  70 + When I follow "Configure forum"
71 71 Then I should be on edit "Forum One" by joaosilva
72 72  
73 73 Scenario: last topic update by unautenticated user should not link
... ... @@ -94,4 +94,4 @@ Feature: forum
94 94 | article | author | title | body |
95 95 | Post one | joaosilva | Hi all | Hi all |
96 96 When I go to /joaosilva/forum
97   - Then I should see "Joao" linking to "http:///joaosilva"
  97 + Then I should see "Joao" linking to "http://localhost/joaosilva"
... ...
features/gallery_navigation.feature
... ... @@ -23,7 +23,7 @@ Feature: gallery_navigation
23 23 @selenium
24 24 Scenario: view next image when follow next link
25 25 Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true
26   - When I follow "Next »" and wait
  26 + When I follow "Next »"
27 27 Then I should see "rails.png" within ".title"
28 28  
29 29 Scenario: not link to next when in last image
... ... @@ -38,7 +38,7 @@ Feature: gallery_navigation
38 38 @selenium
39 39 Scenario: view previous image when follow previous link
40 40 Given I am on /marciopunk/my-gallery/rails.png?view=true
41   - When I follow "« Previous" and wait
  41 + When I follow "« Previous"
42 42 Then I should see "other-pic.jpg" within ".title"
43 43  
44 44 Scenario: not link to previous when in first image
... ... @@ -68,11 +68,19 @@ Feature: gallery_navigation
68 68 When I follow "Go back to my-gallery"
69 69 Then I should be on /marciopunk/my-gallery
70 70  
  71 + # Looking for page title is problematic on selenium since it considers the
  72 + # title to be invibible. Checkout some information about this:
  73 + # * https://github.com/jnicklas/capybara/issues/863
  74 + # * https://github.com/jnicklas/capybara/pull/953
71 75 @selenium
72 76 Scenario: image title in window title
73 77 Given I am logged in as "marciopunk"
74   - When I visit "/marciopunk/other-gallery/rails.png?view=true" and wait
75   - And I follow "Edit" and wait
  78 + When I go to /marciopunk/other-gallery/rails.png?view=true
  79 + Then I should see "rails.png" within any "h1"
  80 +# And the page title should be "rails.png"
  81 + And I follow "Edit"
76 82 And I fill in "Title" with "Rails is cool"
77   - And I press "Save" and wait
78   - Then The page title should contain "Rails is cool"
  83 + And I press "Save"
  84 + When I go to /marciopunk/other-gallery/rails.png?view=true
  85 + Then I should see "Rails is cool" within any "h1"
  86 + #Then the page title should be "Rails is cool"
... ...
features/http_caching.feature
... ... @@ -35,13 +35,13 @@ Feature: HTTP caching
35 35 Then the response should be valid for 90 minutes
36 36  
37 37 Scenario: profile pages, default configuaration
38   - When I go to João Silva's homepage
  38 + When I go to joao's homepage
39 39 Then the response should be valid for 15 minutes
40 40  
41 41 Scenario: profile pages, custom configuration
42 42 Given the following environment configuration
43 43 | profile_cache_in_minutes | 90 |
44   - When I go to João Silva's homepage
  44 + When I go to joao's homepage
45 45 Then the response should be valid for 90 minutes
46 46  
47 47 Scenario: account controller should not be cached at all
... ... @@ -50,7 +50,7 @@ Feature: HTTP caching
50 50  
51 51 Scenario: profile administration
52 52 Given I am logged in as "joao"
53   - When I go to João Silva's control panel
  53 + When I go to joao's control panel
54 54 Then there must be no cache at all
55 55  
56 56 Scenario: environment administration
... ...
features/internationalization.feature
... ... @@ -28,6 +28,7 @@ Feature: internationalization
28 28 When I follow "Português"
29 29 Then the site should be in Portuguese
30 30  
  31 + @fixme
31 32 Scenario: language set by previous users
32 33 Given a user accessed in English before
33 34 And my browser prefers Portuguese
... ...
features/invitation.feature
... ... @@ -32,11 +32,13 @@ Feature: invitation
32 32 When I am on /profile/josesilva/invite/friends
33 33 Then I should see "Invite your friends"
34 34  
  35 + @selenium
35 36 Scenario: back to friends after invite friends
36 37 Given I am on /myprofile/josesilva/friends
37 38 And I follow "Invite people from my e-mail contacts"
38 39 And I press "Next"
39 40 And I fill in "manual_import_addresses" with "misfits@devil.doll"
  41 + And I follow "Personalize invitation mail"
40 42 And I fill in "mail_template" with "Follow this link <url>"
41 43 When I press "Invite my friends!"
42 44 Then I should be on /profile/josesilva/friends
... ... @@ -46,8 +48,7 @@ Feature: invitation
46 48 Then I should see "Invite your friends to join 26 Bsslines" link
47 49  
48 50 Scenario: not see link to invite members to community if has no rights
49   - Given I am not logged in
50   - And I am logged in as "josesantos"
  51 + Given I am logged in as "josesantos"
51 52 When I am on /profile/26-bsslines/members
52 53 Then I should not see "Invite your friends to join 26 Bsslines" link
53 54  
... ... @@ -65,8 +66,7 @@ Feature: invitation
65 66 Then I should not see "Invite your friends to join Beatles For Sale" link
66 67  
67 68 Scenario: deny access if user has no right to invite members
68   - Given I am not logged in
69   - And I am logged in as "josesantos"
  69 + Given I am logged in as "josesantos"
70 70 When I am on /profile/26-bsslines/invite/friends
71 71 Then I should see "Access denied"
72 72  
... ... @@ -74,93 +74,107 @@ Feature: invitation
74 74 Given I am on Beatles For Sale's members management
75 75 Then I should not see "Invite your friends to join Beatles For Sale" link
76 76  
  77 + @selenium
77 78 Scenario: back to members after invite friends to join a community
78 79 Given I am on 26 Bsslines's members management
79 80 And I follow "Invite your friends to join 26 Bsslines"
80 81 And I press "Next"
81 82 And I fill in "manual_import_addresses" with "misfits@devil.doll"
  83 + And I follow "Personalize invitation mail"
82 84 And I fill in "mail_template" with "Follow this link <url>"
83 85 When I press "Invite my friends!"
84 86 Then I should be on /profile/26-bsslines/members
85 87  
  88 + @selenium
86 89 Scenario: noosfero user receives a task when a user invites to join a community
87 90 Given I am on 26 Bsslines's members management
88 91 And I follow "Invite your friends to join 26 Bsslines"
89 92 And I press "Next"
90 93 And I fill in "manual_import_addresses" with "santos@invalid.br"
  94 + And I follow "Personalize invitation mail"
91 95 And I fill in "mail_template" with "Follow this link <url>"
92 96 And I press "Invite my friends!"
93 97 Given there are no pending jobs
94 98 When I am logged in as "josesantos"
95   - And I go to the Control panel
  99 + And I go to josesantos's control panel
96 100 And I should see "josesilva invited you to join 26 Bsslines."
97 101  
  102 + @selenium
98 103 Scenario: noosfero user accepts to join community
99 104 Given I invite email "santos@invalid.br" to join community "26 Bsslines"
100 105 And there are no pending jobs
101 106 When I am logged in as "josesantos"
102   - And I go to the Control panel
  107 + And I go to josesantos's control panel
103 108 And I follow "Process requests"
104 109 And I should see "josesilva invited you to join 26 Bsslines."
105 110 And I choose "Accept"
106 111 When I press "Apply!"
107 112 Then I should not see "josesilva invited you to join 26 Bsslines."
108   - When I go to the Control panel
  113 + When I go to josesantos's control panel
109 114 And I follow "Manage my groups"
110 115 Then I should see "26 Bsslines"
111 116  
  117 + @selenium
112 118 Scenario: noosfero user rejects to join community
113 119 Given I invite email "santos@invalid.br" to join community "26 Bsslines"
114 120 And there are no pending jobs
115 121 When I am logged in as "josesantos"
116   - And I go to the Control panel
  122 + And I go to josesantos's control panel
117 123 And I follow "Process requests"
118 124 And I should see "josesilva invited you to join 26 Bsslines."
119 125 And I choose "Reject"
120 126 When I press "Apply!"
121 127 Then I should not see "josesilva invited you to join 26 Bsslines."
122   - When I go to the Control panel
  128 + And I go to josesantos's control panel
123 129 And I follow "Manage my groups"
124 130 Then I should not see "26 Bsslines"
125 131  
  132 + @selenium
126 133 Scenario: noosfero user receives a task when a user invites to be friend
127 134 Given I am on josesilva's control panel
128   - And I follow "Manage Friends"
  135 + And I follow "Manage friends"
129 136 And I follow "Invite people from my e-mail contacts"
130 137 And I press "Next"
131 138 And I fill in "manual_import_addresses" with "santos@invalid.br"
  139 + And I follow "Personalize invitation mail"
132 140 And I fill in "mail_template" with "Follow this link <url>"
133 141 And I press "Invite my friends!"
134 142 Given there are no pending jobs
135 143 When I am logged in as "josesantos"
136   - And I go to the Control panel
  144 + And I go to josesantos's control panel
137 145 And I follow "Process requests"
138 146 Then I should see "josesilva wants to be your friend."
139 147  
  148 + @selenium
140 149 Scenario: noosfero user accepts to be friend
141   - Given I invite email "santos@invalid.br" to be my friend
  150 + Given I am logged in as "josesilva"
  151 + And I go to josesilva's control panel
  152 + And I invite email "santos@invalid.br" to be my friend
142 153 And there are no pending jobs
143 154 When I am logged in as "josesantos"
144   - And I go to the Control panel
  155 + And I go to josesantos's control panel
145 156 And I follow "Process requests"
146 157 And I should see "josesilva wants to be your friend."
147 158 And I choose "Accept"
148 159 When I press "Apply!"
149 160 And I should not see "josesilva wants to be your friend."
150   - When I go to the Control panel
  161 + When I go to josesantos's control panel
151 162 And I follow "Manage friends"
152 163 Then I should see "josesilva"
153 164  
  165 + @selenium
154 166 Scenario: noosfero user rejects to be friend
155   - Given I invite email "santos@invalid.br" to be my friend
  167 + Given I am logged in as "josesilva"
  168 + And I go to josesilva's control panel
  169 + And I invite email "santos@invalid.br" to be my friend
156 170 And there are no pending jobs
157 171 When I am logged in as "josesantos"
158   - And I go to the Control panel
  172 + And I go to josesantos's control panel
159 173 And I follow "Process requests"
160 174 And I should see "josesilva wants to be your friend."
161 175 And I choose "Reject"
162 176 When I press "Apply!"
163 177 And I should not see "josesilva wants to be your friend."
164   - When I go to the Control panel
  178 + When I go to josesantos's control panel
165 179 And I follow "Manage friends"
166 180 Then I should not see "josesilva"
... ...
features/language_redirection.feature
... ... @@ -7,7 +7,7 @@ Feature: language redirection
7 7 | login | name |
8 8 | manuel | Manuel Silva |
9 9 And the following articles
10   - | owner | name | body | lang | translation_of |
  10 + | owner | name | body | language | translation_of |
11 11 | manuel | Meu Artigo | isso é um teste | pt | nil |
12 12 | manuel | My Article | this is a test | en | Meu Artigo |
13 13  
... ... @@ -26,9 +26,9 @@ Feature: language redirection
26 26 # Testing the web UI
27 27 Given I am logged in as "manuel"
28 28 And my browser prefers English
29   - And I go to manuel's profile editor
  29 + And I go to /myprofile/manuel/profile_editor/edit
30 30 And I check "Automaticaly redirect the visitor to the article translated to his/her language"
31   - And I press "save"
  31 + And I press "Save"
32 32 When I go to /manuel/meu-artigo
33 33 Then the site should be in English
34 34  
... ...
features/location.feature
... ... @@ -16,13 +16,14 @@ Feature: Location
16 16 | state |
17 17 | city |
18 18 | zip_code |
19   - And I go to the Control panel
  19 + And I go to zezinho's control panel
20 20 And I follow "Location"
21 21 When I fill in "Address" with "Rua Marechal Floriano, 28"
22 22 And I select "Brazil" from "Country"
23 23 And I fill in "State" with "Bahia"
24 24 And I fill in "City" with "Salvador"
25   - And I fill in "ZIP Code" with "40110010"
  25 + And I fill in "ZIP code" with "40110010"
  26 + And I follow "Locate in the map"
26 27 And I press "Save"
27 28 Then "zezinho" should have the following data
28 29 | address | country | state | city | zip_code |
... ... @@ -38,14 +39,14 @@ Feature: Location
38 39 Given the following <plural>
39 40 | identifier | name | owner |
40 41 | mycollective | My Collective | zezinho |
41   - And I am on My Collective's control panel
  42 + And I am on mycollective's control panel
42 43 And I follow "Location"
43 44 And I select "Brazil" from "Country"
44 45 And I fill in the following:
45 46 | Address | Rua Marechal Floriano, 28 |
46 47 | State | Bahia |
47 48 | City | Salvador |
48   - | ZIP Code | 40110010 |
  49 + | ZIP code | 40110010 |
49 50 When I press "Save"
50 51 Then "mycollective" should have the following data
51 52 | address | country | state | city | zip_code |
... ...
features/login.feature
... ... @@ -8,17 +8,20 @@ Feature: login
8 8 | login | name |
9 9 | joaosilva | Joao Silva |
10 10  
  11 + @selenium
11 12 Scenario: login from portal homepage
12 13 Given feature "allow_change_of_redirection_after_login" is disabled on environment
13 14 And I am not logged in
14 15 And I go to the homepage
  16 + And I follow "Login"
15 17 And I fill in the following:
16   - | Username | joaosilva |
  18 + | Username / Email | joaosilva |
17 19 | Password | 123456 |
18 20 When I press "Log in"
19 21 Then I should be on the homepage
20 22 And I should be logged in as "joaosilva"
21 23  
  24 + @selenium
22 25 Scenario: login from some profile page
23 26 Given feature "allow_change_of_redirection_after_login" is disabled on environment
24 27 And I am not logged in
... ... @@ -28,30 +31,31 @@ Feature: login
28 31 And the following articles
29 32 | owner | name | homepage |
30 33 | mariasilva | my home page | true |
31   - And I go to Maria Silva's homepage
  34 + And I go to mariasilva's homepage
32 35 And I follow "Login"
33 36 And I fill in the following:
34   - | Username | joaosilva |
  37 + | Username / Email | joaosilva |
35 38 | Password | 123456 |
36 39 When I press "Log in"
37   - Then I should be on Maria Silva's homepage
  40 + Then I should be on mariasilva's homepage
38 41  
39 42 Scenario: view my control panel
40 43 Given feature "allow_change_of_redirection_after_login" is disabled on environment
41 44 And I am not logged in
42   - And I go to Joao Silva's control panel
  45 + And I go to joaosilva's control panel
43 46 And I should be on login page
44 47 And I fill in the following:
45   - | Username | joaosilva |
  48 + | Username / Email | joaosilva |
46 49 | Password | 123456 |
47 50 When I press "Log in"
48   - Then I should be on Joao Silva's control panel
  51 + Then I should be on joaosilva's control panel
49 52  
50 53 Scenario: be redirected if user goes to login page and is logged
51 54 Given I am logged in as "joaosilva"
52 55 And I go to login page
53   - Then I should be on Joao Silva's control panel
  56 + Then I should be on joaosilva's control panel
54 57  
  58 + @selenium
55 59 Scenario: stay on the same page after login if this is the environment default
56 60 Given feature "allow_change_of_redirection_after_login" is enabled on environment
57 61 And I am not logged in
... ... @@ -62,26 +66,28 @@ Feature: login
62 66 And the following articles
63 67 | owner | name | homepage |
64 68 | mariasilva | my home page | true |
65   - And I go to Maria Silva's homepage
  69 + And I go to mariasilva's homepage
66 70 And I follow "Login"
67 71 And I fill in the following:
68   - | Username | joaosilva |
  72 + | Username / Email | joaosilva |
69 73 | Password | 123456 |
70 74 When I press "Log in"
71   - Then I should be on Maria Silva's homepage
  75 + Then I should be on mariasilva's homepage
72 76  
  77 + @selenium
73 78 Scenario: go to site homepage if this is the environment default
74 79 Given feature "allow_change_of_redirection_after_login" is enabled on environment
75 80 And I am not logged in
76 81 And the environment is configured to redirect to site homepage after login
77   - And I go to Joao Silva's homepage
  82 + And I go to joaosilva's homepage
78 83 And I follow "Login"
79 84 And I fill in the following:
80   - | Username | joaosilva |
  85 + | Username / Email | joaosilva |
81 86 | Password | 123456 |
82 87 When I press "Log in"
83 88 Then I should be on the homepage
84 89  
  90 + @selenium
85 91 Scenario: go to user profile after login if this is the environment default
86 92 Given feature "allow_change_of_redirection_after_login" is enabled on environment
87 93 And I am not logged in
... ... @@ -89,11 +95,12 @@ Feature: login
89 95 And I go to the homepage
90 96 And I follow "Login"
91 97 And I fill in the following:
92   - | Username | joaosilva |
  98 + | Username / Email | joaosilva |
93 99 | Password | 123456 |
94 100 When I press "Log in"
95   - Then I should be on Joao Silva's profile
  101 + Then I should be on joaosilva's profile
96 102  
  103 + @selenium
97 104 Scenario: go to profile homepage after login if this is the environment default
98 105 Given the following articles
99 106 | owner | name | body | homepage |
... ... @@ -104,11 +111,12 @@ Feature: login
104 111 And I go to the homepage
105 112 And I follow "Login"
106 113 And I fill in the following:
107   - | Username | joaosilva |
  114 + | Username / Email | joaosilva |
108 115 | Password | 123456 |
109 116 When I press "Log in"
110   - Then I should be on Joao Silva's homepage
  117 + Then I should be on joaosilva's homepage
111 118  
  119 + @selenium
112 120 Scenario: go to profile control panel after login if this is the environment default
113 121 Given feature "allow_change_of_redirection_after_login" is enabled on environment
114 122 And I am not logged in
... ... @@ -116,11 +124,12 @@ Feature: login
116 124 And I go to the homepage
117 125 And I follow "Login"
118 126 And I fill in the following:
119   - | Username | joaosilva |
  127 + | Username / Email | joaosilva |
120 128 | Password | 123456 |
121 129 When I press "Log in"
122   - Then I should be on Joao Silva's control panel
  130 + Then I should be on joaosilva's control panel
123 131  
  132 + @selenium
124 133 Scenario: stay on the same page after login if this is the profile default
125 134 Given feature "allow_change_of_redirection_after_login" is enabled on environment
126 135 And I am not logged in
... ... @@ -132,27 +141,29 @@ Feature: login
132 141 And the following articles
133 142 | owner | name | homepage |
134 143 | mariasilva | my home page | true |
135   - And I go to Maria Silva's homepage
  144 + And I go to mariasilva's homepage
136 145 And I follow "Login"
137 146 And I fill in the following:
138   - | Username | joaosilva |
  147 + | Username / Email | joaosilva |
139 148 | Password | 123456 |
140 149 When I press "Log in"
141   - Then I should be on Maria Silva's homepage
  150 + Then I should be on mariasilva's homepage
142 151  
  152 + @selenium
143 153 Scenario: go to site homepage if this is the profile default
144 154 Given feature "allow_change_of_redirection_after_login" is enabled on environment
145 155 And I am not logged in
146 156 And the environment is configured to stay on the same page after login
147 157 And the profile joaosilva is configured to redirect to site homepage after login
148   - And I go to Joao Silva's homepage
  158 + And I go to joaosilva's homepage
149 159 And I follow "Login"
150 160 And I fill in the following:
151   - | Username | joaosilva |
  161 + | Username / Email | joaosilva |
152 162 | Password | 123456 |
153 163 When I press "Log in"
154 164 Then I should be on the homepage
155 165  
  166 + @selenium
156 167 Scenario: go to user profile after login if this is the profile default
157 168 Given feature "allow_change_of_redirection_after_login" is enabled on environment
158 169 And I am not logged in
... ... @@ -161,11 +172,12 @@ Feature: login
161 172 And I go to the homepage
162 173 And I follow "Login"
163 174 And I fill in the following:
164   - | Username | joaosilva |
  175 + | Username / Email | joaosilva |
165 176 | Password | 123456 |
166 177 When I press "Log in"
167   - Then I should be on Joao Silva's profile
  178 + Then I should be on joaosilva's profile
168 179  
  180 + @selenium
169 181 Scenario: go to profile homepage after login if this is the profile default
170 182 Given the following articles
171 183 | owner | name | body | homepage |
... ... @@ -177,11 +189,12 @@ Feature: login
177 189 And I go to the homepage
178 190 And I follow "Login"
179 191 And I fill in the following:
180   - | Username | joaosilva |
  192 + | Username / Email | joaosilva |
181 193 | Password | 123456 |
182 194 When I press "Log in"
183   - Then I should be on Joao Silva's homepage
  195 + Then I should be on joaosilva's homepage
184 196  
  197 + @selenium
185 198 Scenario: go to profile control panel after login if this is the profile default
186 199 Given feature "allow_change_of_redirection_after_login" is enabled on environment
187 200 And I am not logged in
... ... @@ -190,7 +203,7 @@ Feature: login
190 203 And I go to the homepage
191 204 And I follow "Login"
192 205 And I fill in the following:
193   - | Username | joaosilva |
  206 + | Username / Email | joaosilva |
194 207 | Password | 123456 |
195 208 When I press "Log in"
196   - Then I should be on Joao Silva's control panel
  209 + Then I should be on joaosilva's control panel
... ...
features/manage_categories.feature
... ... @@ -26,7 +26,6 @@ Feature: manage categories
26 26 Scenario: load subcategories only after following parent
27 27 Then I should not see "Beans"
28 28 And I should not see "Potatoes"
29   - When I follow "Show" and wait for jquery
30   - # Then show me the page
31   -
32   -
  29 + When I follow "Show"
  30 + Then I should see "Beans"
  31 + And I should see "Potatoes"
... ...
features/manage_enterprises.feature
... ... @@ -15,8 +15,10 @@ Feature: manage enterprises
15 15 Scenario: seeing my enterprises on menu
16 16 Given I am logged in as "joaosilva"
17 17 Then I should see "My enterprises" link
18   - When I follow "My enterprises" and wait
19   - Then I should see "Tangerine Dream" linking to "/myprofile/tangerine-dream"
  18 + When I follow "My enterprises"
  19 + And I follow "Tangerine Dream"
  20 + Then I should be on tangerine-dream's control panel
  21 +
20 22  
21 23 @selenium
22 24 Scenario: not show enterprises on menu to a user without enterprises
... ...
features/manage_inputs.feature
... ... @@ -32,8 +32,8 @@ Feature: manage inputs
32 32 And I follow "Inputs"
33 33 Then I should not see "Add new input or raw material"
34 34 And I follow "Add the inputs or raw material used by this product"
35   - And I select "Music »" and wait for jquery
36   - And I select "Rock" and wait for jquery
  35 + And I select "Music »" from "category_id" within "#categories_container_level0"
  36 + And I select "Rock" from "category_id" within "#categories_container_level1"
37 37 And I press "Save and continue"
38 38 Then I should see "Rock"
39 39  
... ... @@ -47,8 +47,8 @@ Feature: manage inputs
47 47 And I follow "Inputs"
48 48 And I should not see "Add the inputs or raw material used by this product"
49 49 And I follow "Add new input or raw material"
50   - And I select "Music »" and wait for jquery
51   - And I select "Rock" and wait for jquery
  50 + And I select "Music »" from "category_id" within "#categories_container_level0"
  51 + And I select "Rock" from "category_id" within "#categories_container_level1"
52 52 And I press "Save and continue"
53 53 Then I should see "Rock"
54 54  
... ... @@ -57,8 +57,8 @@ Feature: manage inputs
57 57 Given I am logged in as "joaosilva"
58 58 When I go to Rede Moinho's page of product Abbey Road
59 59 And I follow "Inputs"
60   - And I follow "Add the inputs or raw material used by this product" and wait until "#input-category-form" is present
61   - And I click "css=a.cancel-add-input"
  60 + And I follow "Add the inputs or raw material used by this product"
  61 + And I follow "Cancel" within "#categories_selection_actionbar"
62 62 Then I should see "Abbey Road"
63 63 And I should see "Add the inputs or raw material used by this product"
64 64  
... ... @@ -90,7 +90,7 @@ Feature: manage inputs
90 90 And I follow "Inputs and raw material"
91 91 Then I should see "Edit" within ".input-item"
92 92  
93   - @selenium
  93 + @selenium-fixme
94 94 Scenario: Order inputs by position
95 95 Given the following product_categories
96 96 | name |
... ... @@ -131,7 +131,7 @@ Feature: manage inputs
131 131 And I follow "Inputs"
132 132 And I follow "Click here to add price and the amount used"
133 133 And I should not see "Price by Meter ($)"
134   - When I select "Meter"
  134 + When I select "Meter" from "input_unit_id" within ".edit_input"
135 135 Then I should see "Price by Meter ($)"
136 136  
137 137 @selenium
... ... @@ -145,7 +145,7 @@ Feature: manage inputs
145 145 And I follow "Click here to add price and the amount used"
146 146 And I fill in "Amount used" with "2.5"
147 147 And I fill in "Price" with "11.50"
148   - And I select "Meter"
  148 + And I select "Meter" from "input_unit_id" within ".edit_input"
149 149 And I press "Save"
150 150 Then I should see "2.5"
151 151 And I should see "Meter"
... ... @@ -162,14 +162,14 @@ Feature: manage inputs
162 162 And I follow "Click here to add price and the amount used"
163 163 And I fill in "Amount used" with "2.5"
164 164 And I fill in "Price" with "11.50"
165   - And I select "Meter"
  165 + And I select "Meter" from "input_unit_id" within ".edit_input"
166 166 And I press "Save"
167 167 Then I should see "2.5"
168 168 And I should see "Meter"
169 169 When I follow "Edit" within ".input-details"
170 170 And I fill in "Amount used" with "3.0"
171 171 And I fill in "Price" with "23.31"
172   - And I select "Litre"
  172 + And I select "Litre" from "input_unit_id" within ".edit_input"
173 173 And I press "Save"
174 174 Then I should see "3"
175 175 And I should see "Litre"
... ... @@ -182,12 +182,12 @@ Feature: manage inputs
182 182 And I am logged in as "joaosilva"
183 183 When I go to Rede Moinho's page of product Abbey Road
184 184 And I follow "Inputs"
185   - And I follow "Click here to add price and the amount used" and wait until ".input-details-form" is present
  185 + And I follow "Click here to add price and the amount used"
186 186 Then I should see "Cancel"
187 187 And I should see "Amount used"
188 188 And I should see "Price"
189 189 And I should see "This input or raw material inpact on the final price of the product?"
190   - When I click "css=a.cancel-edit-input"
  190 + When I follow "Cancel" within ".edit_input"
191 191 Then I should see "Click here to add price and the amount used"
192 192  
193 193 @selenium
... ... @@ -199,7 +199,7 @@ Feature: manage inputs
199 199 When I go to Rede Moinho's page of product Abbey Road
200 200 And I follow "Inputs"
201 201 And I follow "Edit" within ".input-details"
202   - And I follow "Cancel"
  202 + And I follow "Cancel" within ".edit_input"
203 203 And I follow "Edit" within ".input-details"
204 204 Then I should see "Amount used"
205 205 And I should see "Price by Meter"
... ... @@ -215,7 +215,7 @@ Feature: manage inputs
215 215 Then I should see "Rock"
216 216 And I should not see "Add the inputs or raw material used by this product"
217 217 When I follow "Remove"
218   - And I confirm
  218 + And I confirm the browser dialog
219 219 Then I should see "Add the inputs or raw material used by this product"
220 220  
221 221 @selenium
... ... @@ -226,18 +226,18 @@ Feature: manage inputs
226 226 | redemoinho | Music | Manu Chao |
227 227 And I am logged in as "joaosilva"
228 228 When I go to Rede Moinho's page of product Depeche Mode
229   - Then the content "Add some description to your product" should be visible
230   - And the content "Add the inputs or raw material used by this product" should not be visible
  229 + Then I should see "Add some description to your product"
  230 + And "Add the inputs or raw material used by this product" should not be visible within "#show_product"
231 231 When I follow "Inputs and raw material"
232   - Then the content "Add the inputs or raw material used by this product" should be visible
233   - And the content "Add some description to your product" should not be visible
  232 + Then I should see "Add the inputs or raw material used by this product"
  233 + And "Add some description to your product" should not be visible within "#show_product"
234 234 When I go to Rede Moinho's page of product Manu Chao
235   - Then the content "Add some description to your product" should be visible
  235 + Then I should see "Add some description to your product"
236 236 When I go to Rede Moinho's page of product Depeche Mode
237   - Then the content "Add the inputs or raw material used by this product" should be visible
238   - And the content "Add some description to your product" should not be visible
  237 + Then I should see "Add the inputs or raw material used by this product"
  238 + And "Add some description to your product" should not be visible within "#show_product"
239 239  
240   - @selenium
  240 + @selenium-fixme
241 241 Scenario: Order input list
242 242 Given the following product_category
243 243 | name |
... ...
features/manage_product_price_details.feature
... ... @@ -51,9 +51,9 @@ Feature: manage product price details
51 51 And I follow "Price composition"
52 52 And I follow "Describe here the cost of production"
53 53 And I follow "New cost"
54   - And I select "Taxes"
  54 + And I select "Taxes" from "price_details__production_cost_id" within "#display-product-price-details"
55 55 And I fill in "$" with "5.00"
56   - And I leave the ".price-details-price" field
  56 + And I leave the "#price_details__price" field
57 57 And I press "Save"
58 58 Then I should not see "Save"
59 59 And I should see "Describe here the cost of production"
... ... @@ -67,15 +67,15 @@ Feature: manage product price details
67 67 And I follow "Price composition"
68 68 And I follow "Describe here the cost of production"
69 69 And I follow "New cost"
70   - And I select "Taxes"
  70 + And I select "Taxes" from "price_details__production_cost_id" within "#display-product-price-details"
71 71 And I fill in "$" with "20.00"
72 72 And I leave the ".price-details-price" field
73 73 And I press "Save"
74 74 Then I should not see "Save"
75 75 And I should see "Taxes" within "#display-price-details"
76 76 When I follow "Describe here the cost of production"
77   - And I select "Energy"
78   - And I leave the ".price-details-price" field
  77 + And I select "Energy" from "price_details__production_cost_id" within "#display-product-price-details"
  78 + And I leave the "#price_details__price" field
79 79 And I press "Save"
80 80 And I should not see "Taxes" within "#display-price-details"
81 81 And I should see "Energy" within "#display-price-details"
... ... @@ -102,9 +102,10 @@ Feature: manage product price details
102 102 And I follow "Price composition"
103 103 And I follow "Describe here the cost of production"
104 104 And I follow "New cost"
105   - And I select "Taxes"
  105 + And I select "Taxes" from "price_details__production_cost_id" within "#display-product-price-details"
106 106 And I fill in "$" with "20.00"
107 107 And I press "Save"
  108 + And I go to Rede Moinho's page of product Abbey Road
108 109 Then I should see "Inputs" within ".price-detail-name"
109 110 And I should see "60.0" within ".price-detail-price"
110 111  
... ... @@ -114,10 +115,10 @@ Feature: manage product price details
114 115 And I follow "Price composition"
115 116 And I follow "Describe here the cost of production"
116 117 And I follow "New cost"
  118 + And I select "Other cost" from "price_details__production_cost_id" within "#display-product-price-details"
117 119 And I want to add "Energy" as cost
118   - And I select "Other cost"
119 120 And I fill in "$" with "10.00"
120   - And I leave the ".price-details-price" field
  121 + And I leave the "#price_details__price" field
121 122 And I press "Save"
122 123 When I follow "Describe here the cost of production"
123 124 Then I should see "Energy" within ".production-cost-selection"
... ... @@ -127,9 +128,10 @@ Feature: manage product price details
127 128 Given I go to Rede Moinho's page of product Abbey Road
128 129 And I follow "Price composition"
129 130 And I follow "Describe here the cost of production"
  131 + And I follow "New cost"
  132 + And I select "Other cost" from "price_details__production_cost_id" within "#display-product-price-details"
130 133 And I want to add "Energy" as cost
131   - And I select "Other cost"
132   - Then I should see "Energy" within "#new-cost-fields"
  134 + Then I should see "Energy" within "#display-product-price-details"
133 135  
134 136 @selenium
135 137 Scenario: remove price detail
... ... @@ -141,7 +143,7 @@ Feature: manage product price details
141 143 And I follow "Describe here the cost of production"
142 144 And I should see "Taxes" within "#manage-product-details-form"
143 145 When I follow "Remove" within "#manage-product-details-form"
144   - And I confirm
  146 + And I confirm the browser dialog
145 147 And I press "Save"
146 148 And I follow "Describe here the cost of production"
147 149 Then I should not see "Taxes" within "#manage-product-details-form"
... ... @@ -160,7 +162,7 @@ Feature: manage product price details
160 162 Then I should see "$ 60.00 of $ 80.00" within "#progressbar-text"
161 163 And I follow "New cost"
162 164 And I fill in "$" with "10.00"
163   - And I leave the ".price-details-price" field
  165 + And I leave the "#price_details__price" field
164 166 Then I should see "$ 70.00 of $ 80.00" within "#progressbar-text"
165 167  
166 168 @selenium
... ...
features/manage_products.feature
... ... @@ -13,7 +13,7 @@ Feature: manage products
13 13  
14 14 Scenario: display "create new product" button
15 15 Given I am logged in as "joaosilva"
16   - And I am on Rede Moinho's control panel
  16 + And I am on redemoinho's control panel
17 17 When I follow "Manage Products and Services"
18 18 Then I should see "New product or service"
19 19  
... ... @@ -34,7 +34,7 @@ Feature: manage products
34 34 | redemoinho | bicycle | Bike I | bicycle 9 |
35 35 | redemoinho | bicycle | Bike J | bicycle 10 |
36 36 | redemoinho | bicycle | Bike K | bicycle 11 |
37   - When I go to /catalog/redemoinho
  37 + When I go to redemoinho's products page
38 38 Then I should see "Bike A" within "#product-list"
39 39 And I should see "Bike B" within "#product-list"
40 40 And I should see "Bike C" within "#product-list"
... ... @@ -52,13 +52,13 @@ Feature: manage products
52 52  
53 53 Scenario: listing products and services
54 54 Given I am logged in as "joaosilva"
55   - And I am on Rede Moinho's control panel
  55 + And I am on redemoinho's control panel
56 56 And I follow "Manage Products and Services"
57 57 Then I should see "Listing products and services"
58 58  
59 59 Scenario: see button to back in categories hierarchy
60 60 Given I am logged in as "joaosilva"
61   - And I am on Rede Moinho's control panel
  61 + And I am on redemoinho's control panel
62 62 And I follow "Manage Products and Services"
63 63 When I follow "New product or service"
64 64 Then I should see "Back to the product listing" link
... ... @@ -69,9 +69,7 @@ Feature: manage products
69 69 | Products |
70 70 | Services |
71 71 Given I am logged in as "joaosilva"
72   - And I am on Rede Moinho's control panel
73   - And I follow "Manage Products and Services"
74   - When I follow "New product or service"
  72 + And I go to redemoinho's new product page
75 73 Then I should see "Products"
76 74 And I should see "Service"
77 75  
... ... @@ -85,10 +83,8 @@ Feature: manage products
85 83 | Computers level1 | products-level0 |
86 84 | DVDs level1 | products-level0 |
87 85 Given I am logged in as "joaosilva"
88   - And I am on Rede Moinho's control panel
89   - And I follow "Manage Products and Services"
90   - When I follow "New product or service"
91   - And I select "Products level0 »" and wait for jquery
  86 + And I go to redemoinho's new product page
  87 + And I select "Products level0 »" from "category_id" within "#categories_container_level0"
92 88 Then I should see "Computers level1"
93 89 And I should see "DVDs level1"
94 90  
... ... @@ -103,12 +99,12 @@ Feature: manage products
103 99 | Computers level1 | products-level0 |
104 100 | Software development level1 | services-level0 |
105 101 Given I am logged in as "joaosilva"
106   - And I am on Rede Moinho's control panel
107   - And I follow "Manage Products and Services"
108   - When I follow "New product or service"
109   - And I select "Products level0 »" and wait for jquery
110   - And I select "Computers level1" and wait for jquery
111   - And I select "Services level0 »" and wait for jquery
  102 + And I go to redemoinho's new product page
  103 + And I should not see /Computers level/
  104 + And I select "Products level0 »" from "category_id" within "#categories_container_wrapper"
  105 + And I should see /Computers level/
  106 + And I should not see /Software develop/
  107 + And I select "Services level0 »" from "category_id" within "#categories_container_wrapper"
112 108 Then I should see /Software develop/
113 109 And I should not see /Computers level/
114 110  
... ... @@ -121,11 +117,9 @@ Feature: manage products
121 117 | name | parent |
122 118 | Computers | products |
123 119 Given I am logged in as "joaosilva"
124   - And I am on Rede Moinho's control panel
125   - And I follow "Manage Products and Services"
126   - When I follow "New product or service"
127   - And I select "Products »" and wait for jquery
128   - And I select "Computers" and wait for jquery
  120 + And I go to redemoinho's new product page
  121 + And I select "Products »" from "category_id" within "#categories_container_level0"
  122 + And I select "Computers" from "category_id" within "#categories_container_level1"
129 123 Then I should see "Products → Computers"
130 124  
131 125 @selenium
... ... @@ -137,11 +131,9 @@ Feature: manage products
137 131 | name | parent |
138 132 | Category Level 1 | toplevel-product-categories |
139 133 Given I am logged in as "joaosilva"
140   - And I am on Rede Moinho's control panel
141   - And I follow "Manage Products and Services"
142   - When I follow "New product or service"
143   - And I select "Toplevel Product Categories »" and wait for jquery
144   - And I select "Category Level 1" and wait for jquery
  134 + And I go to redemoinho's new product page
  135 + And I select "Toplevel Product Categories »" from "category_id" within "#categories_container_level0"
  136 + And I select "Category Level 1" from "category_id" within "#categories_container_level1"
145 137 Then I should see "Toplevel Product Categories" link
146 138 And I should not see "Category Level 1" link
147 139  
... ... @@ -151,8 +143,8 @@ Feature: manage products
151 143 | name |
152 144 | Only for test |
153 145 And I am logged in as "joaosilva"
154   - When I go to /myprofile/redemoinho/manage_products/new
155   - Then the "#save_and_continue" button should not be enabled
  146 + When I go to redemoinho's new product page
  147 + Then the "#save_and_continue" button should be disabled
156 148  
157 149 @selenium
158 150 Scenario: enable save button when select one category
... ... @@ -160,11 +152,9 @@ Feature: manage products
160 152 And the following product_category
161 153 | name |
162 154 | Browsers (accept categories) |
163   - And I am on Rede Moinho's control panel
164   - And I follow "Manage Products and Services"
165   - When I follow "New product or service"
166   - And I select "Browsers (accept categories)" and wait for jquery
167   - Then the "Save and continue" button should be enabled
  155 + When I go to redemoinho's new product page
  156 + And I select "Browsers (accept categories)" from "category_id" within "#categories_container_wrapper"
  157 + Then the "#save_and_continue" button should be enabled
168 158  
169 159 @selenium
170 160 Scenario: dont enable save button when select category with not accept products
... ... @@ -172,11 +162,9 @@ Feature: manage products
172 162 | name | accept_products |
173 163 | Browsers | false |
174 164 Given I am logged in as "joaosilva"
175   - And I am on Rede Moinho's control panel
176   - And I follow "Manage Products and Services"
177   - When I follow "New product or service"
178   - And I select "Browsers" and wait for jquery
179   - Then the "#save_and_continue" button should not be enabled
  165 + When I go to redemoinho's new product page
  166 + And I select "Browsers" from "category_id" within "#categories_container_wrapper"
  167 + Then the "#save_and_continue" button should be disabled
180 168  
181 169 @selenium
182 170 Scenario: save product
... ... @@ -184,32 +172,14 @@ Feature: manage products
184 172 | name |
185 173 | Bicycle |
186 174 Given I am logged in as "joaosilva"
187   - And I am on Rede Moinho's control panel
188   - And I follow "Manage Products and Services"
189   - When I follow "New product or service"
190   - And I select "Bicycle" and wait for jquery
  175 + When I go to redemoinho's new product page
  176 + And I select "Bicycle" from "category_id" within "#categories_container_wrapper"
191 177 And I press "Save and continue"
192   - Then I should see "Bicycle"
  178 + When I go to redemoinho's products page
  179 + And I follow "Bicycle" within "#product-list"
  180 + Then I should see "Bicycle" within "#show_product"
193 181 And I should see "Change category"
194 182  
195   - @selenium
196   - Scenario: stay on the same place after error on save
197   - Given the following product_category
198   - | name |
199   - | Bicycle |
200   - Given I am logged in as "joaosilva"
201   - And I am on Rede Moinho's control panel
202   - And I follow "Manage Products and Services"
203   - And I follow "New product or service"
204   - And I select "Bicycle" and wait for jquery
205   - And I press "Save and continue"
206   - When I follow "Back"
207   - And I follow "New product or service"
208   - And I select "Bicycle" and wait for jquery
209   - And I press "Save and continue"
210   - Then I should be on Rede Moinho's new product page
211   - And I should see "Bicycle"
212   -
213 183 Scenario: a user with permission can see edit links
214 184 Given the following product_category
215 185 | name |
... ... @@ -331,10 +301,11 @@ Feature: manage products
331 301 And I am logged in as "joaosilva"
332 302 When I go to Rede Moinho's page of product Generic pc
333 303 And I follow "Change category"
334   - And I select "Eletronics »" and wait for jquery
335   - Then I select "DVDs" and wait for jquery
  304 + And I select "Eletronics »" from "category_id" within "#categories_container_level0"
  305 + Then I select "DVDs" from "category_id" within "#categories_container_level1"
336 306 And I press "Save and continue"
337   - Then I should see "Eletronics → DVDs"
  307 + When I go to Rede Moinho's page of product Generic pc
  308 + Then I should see "Eletronics → DVDs" within ".hierarchy-category"
338 309  
339 310 @selenium
340 311 Scenario: cancel edition of a product category
... ... @@ -424,7 +395,9 @@ Feature: manage products
424 395 And I follow "Change category"
425 396 And I press "Save and continue"
426 397 Then I should not see "Product category can't be blank"
427   - And I should be on Rede Moinho's page of product Generic pc
  398 + When I go to Rede Moinho's page of product Generic pc
  399 + Then I should see "Eletronics → Computers" within ".hierarchy-category"
  400 +
428 401 And I should see "Generic pc"
429 402  
430 403 @selenium
... ... @@ -450,7 +423,7 @@ Feature: manage products
450 423 And I am logged in as "joaosilva"
451 424 When I go to Rede Moinho's page of product Generic pc
452 425 And I follow "Change category"
453   - Then the select for category "Netbook from Venus" should be visible
  426 + Then "Netbook from Venus" should be visible within "#categories_container_wrapper"
454 427  
455 428 @selenium
456 429 Scenario: Truncate long category name in selection of category
... ... @@ -462,7 +435,7 @@ Feature: manage products
462 435 | name | parent |
463 436 | Netbook Quantum | Super Quantum Computers with teraflops |
464 437 And I am logged in as "joaosilva"
465   - When I go to Rede Moinho's new product page
  438 + When I go to redemoinho's new product page
466 439 Then I should see "Nanonote nanotech with long lo..."
467 440 And I should see "Super Quantum Computers with t... »"
468 441  
... ... @@ -481,7 +454,7 @@ Feature: manage products
481 454 When I go to Rede Moinho's page of product Bike
482 455 And I follow "Edit name and unit"
483 456 And I fill in "Red bicycle" for "product_name"
484   - And I select "Kilo"
  457 + And I select "Kilo" from "product_unit_id" within "#product-name-form"
485 458 And I press "Save"
486 459 Then I should see "Red bicycle - kilo"
487 460  
... ... @@ -519,12 +492,14 @@ Feature: manage products
519 492 When I go to Rede Moinho's page of product Bike
520 493 And I follow "Add price and other basic information"
521 494 And I follow "Add new qualifier"
522   - And I select "Organic" and wait for jquery
  495 + And I select "Organic" from "selected_qualifier" within "#product-qualifiers-list"
523 496 And I press "Save"
  497 + And I go to Rede Moinho's page of product Bike
524 498 Then I should see "Organic (Self declared)"
525 499 When I follow "Edit basic information"
526 500 And I follow "Delete qualifier"
527 501 And I press "Save"
  502 + And I go to Rede Moinho's page of product Bike
528 503 Then I should not see "Organic (Self declared)"
529 504  
530 505 @selenium
... ...
features/my_network_block.feature
... ... @@ -20,11 +20,11 @@ Feature: my_network_block
20 20 | identifier | name | owner | public_profile |
21 21 | other-public-community | Other Public Community | joaosilva | true |
22 22 | private-community | Private Community | joaosilva | false |
23   - And I am on Joao Silva's homepage
  23 + And I am on joaosilva's homepage
24 24 And I should see "2 communities"
25   - When I go to Public Community's homepage
  25 + When I go to public-community's homepage
26 26 And I follow "Join"
27   - And I go to Joao Silva's homepage
  27 + And I go to joaosilva's homepage
28 28 Then I should see "3 communities"
29 29  
30 30 @selenium
... ... @@ -34,11 +34,11 @@ Feature: my_network_block
34 34 | identifier | name | owner | visible |
35 35 | visible-community | Visible Community | joaosilva | true |
36 36 | not-visible-community | Not Visible Community | joaosilva | false |
37   - And I am on Joao Silva's homepage
  37 + And I am on joaosilva's homepage
38 38 And I should see "One community"
39   - When I go to Public Community's homepage
  39 + When I go to public-community's homepage
40 40 And I follow "Join"
41   - And I go to Joao Silva's homepage
  41 + And I go to joaosilva's homepage
42 42 Then I should see "2 communities"
43 43  
44 44 Scenario: display how many public/private friends I have
... ... @@ -48,10 +48,10 @@ Feature: my_network_block
48 48 | josesilva | Jose Silva | false |
49 49 And "joaosilva" is friend of "mariasilva"
50 50 And I am logged in as "joaosilva"
51   - And I am on Joao Silva's homepage
  51 + And I am on joaosilva's homepage
52 52 Then I should see "1 friend"
53 53 And "joaosilva" is friend of "josesilva"
54   - When I go to Joao Silva's homepage
  54 + When I go to joaosilva's homepage
55 55 Then I should see "2 friends"
56 56  
57 57 Scenario: not display how many invisible friends I have
... ... @@ -62,8 +62,8 @@ Feature: my_network_block
62 62 And "josesilva" is invisible
63 63 And "joaosilva" is friend of "mariasilva"
64 64 And I am logged in as "joaosilva"
65   - When I go to Joao Silva's homepage
  65 + When I go to joaosilva's homepage
66 66 Then I should see "1 friend"
67 67 And "joaosilva" is friend of "josesilva"
68   - When I go to Joao Silva's homepage
  68 + When I go to joaosilva's homepage
69 69 Then I should see "1 friend"
... ...
features/new_content_on_cms.feature
... ... @@ -7,10 +7,10 @@ Feature: create content on cms
7 7 | login | name |
8 8 | joaosilva | Joao Silva |
9 9 And I am logged in as "joaosilva"
10   - And I am on Joao Silva's cms
  10 + And I am on joaosilva's cms
11 11  
12 12 Scenario: open page to select type of content
13   - Given I follow "New Content"
  13 + Given I follow "New content"
14 14 Then I should see "Choose the type of content"
15 15  
16 16 Scenario: list all content types
... ... @@ -27,7 +27,7 @@ Feature: create content on cms
27 27 When I follow "Folder"
28 28 And I fill in "Title" with "My Folder"
29 29 And I press "Save"
30   - And I go to Joao Silva's cms
  30 + And I go to joaosilva's cms
31 31 Then I should see "My Folder"
32 32  
33 33 Scenario: create a tiny_mce article
... ... @@ -35,7 +35,7 @@ Feature: create content on cms
35 35 When I follow "Text article with visual editor"
36 36 And I fill in "Title" with "My tiny_mce article"
37 37 And I press "Save"
38   - And I go to Joao Silva's cms
  38 + And I go to joaosilva's cms
39 39 Then I should see "My tiny_mce article"
40 40  
41 41 Scenario: create a textile article
... ... @@ -43,7 +43,7 @@ Feature: create content on cms
43 43 When I follow "Text article with Textile markup"
44 44 And I fill in "Title" with "My textile article"
45 45 And I press "Save"
46   - And I go to Joao Silva's cms
  46 + And I go to joaosilva's cms
47 47 Then I should see "My textile article"
48 48  
49 49 Scenario: create a Blog
... ... @@ -51,7 +51,7 @@ Feature: create content on cms
51 51 When I follow "Blog"
52 52 And I fill in "Title" with "My blog"
53 53 And I press "Save"
54   - And I go to Joao Silva's cms
  54 + And I go to joaosilva's cms
55 55 Then I should see "My blog"
56 56  
57 57 Scenario: create an event
... ... @@ -59,7 +59,7 @@ Feature: create content on cms
59 59 When I follow "Event"
60 60 And I fill in "Title" with "My event"
61 61 And I press "Save"
62   - And I go to Joao Silva's cms
  62 + And I go to joaosilva's cms
63 63 Then I should see "My event"
64 64  
65 65 Scenario: redirect to upload files if choose UploadedFile
... ...
features/organization_custom_fields.feature
... ... @@ -9,7 +9,7 @@ Feature: organization custom fields
9 9 | joaosilva | Joao Silva |
10 10 And I am logged in as "joaosilva"
11 11 And feature "enterprise_registration" is enabled on environment
12   - And I go to the Control panel
  12 + And I go to joaosilva's control panel
13 13  
14 14 Scenario Outline: organization active fields are not displayed on creation
15 15 Given the following <organization> fields are active fields
... ... @@ -35,7 +35,7 @@ Feature: organization custom fields
35 35 | name | identifier |
36 36 | Organization | organization |
37 37 And "Joao Silva" is admin of "Organization"
38   - And I am on Organization's control panel
  38 + And I am on organization's control panel
39 39 And I follow <information>
40 40 Then I should see "Display name"
41 41 Then I should see "Contact email"
... ... @@ -70,7 +70,7 @@ Feature: organization custom fields
70 70 | name | identifier | display_name | contact_email | city |
71 71 | Organization | organization | organization | bla@bleee.com | city |
72 72 And "Joao Silva" is admin of "Organization"
73   - And I am on Organization's control panel
  73 + And I am on organization's control panel
74 74 And I follow <information>
75 75 And I fill in the following:
76 76 | Display name | |
... ...
features/plugins.feature
... ... @@ -23,36 +23,36 @@ Feature: plugins
23 23  
24 24 Scenario: a user must see the plugin\'s button in the control panel if the plugin is enabled
25 25 Given plugin TestPlugin is enabled on environment
26   - And I go to Joao Silva's control panel
  26 + And I go to joaosilva's control panel
27 27 Then I should see "Test plugin button"
28 28  
29 29 Scenario: a user must see the plugin\'s tab in in the profile if the plugin is enabled
30 30 Given plugin TestPlugin is enabled on environment
31   - And I am on Joao Silva's profile
  31 + And I am on joaosilva's profile
32 32 Then I should see "Test plugin tab"
33 33  
34 34 Scenario: a user must not see the plugin\'s button in the control panel if the plugin is disabled
35 35 Given plugin TestPlugin is disabled on environment
36   - And I go to Joao Silva's control panel
  36 + And I go to joaosilva's control panel
37 37 Then I should not see "Test plugin button"
38 38  
39 39 Scenario: a user must not see the plugin\'s tab in in the profile if the plugin is disabled
40 40 Given plugin TestPlugin is disabled on environment
41   - And I am on Joao Silva's profile
  41 + And I am on joaosilva's profile
42 42 Then I should not see "Test plugin tab"
43 43  
44 44 Scenario: an admin should be able to deactivate a plugin
45 45 Given plugin TestPlugin is enabled on environment
46 46 And I am logged in as admin
47   - When I go to the Control panel
  47 + When I go to admin_user's control panel
48 48 Then I should see "Test plugin button"
49   - When I go to the profile
  49 + When I go to admin_user's profile
50 50 Then I should see "Test plugin tab"
51 51 And I go to the environment control panel
52 52 And I follow "Plugins"
53 53 And I uncheck "Test plugin"
54 54 And I press "Save changes"
55   - When I go to the Control panel
  55 + When I go to admin_user's control panel
56 56 Then I should not see "Test plugin button"
57   - When I go to the profile
  57 + When I go to admin_user's profile
58 58 Then I should not see "Test plugin tab"
... ...
features/private_profile.feature
... ... @@ -14,7 +14,7 @@ Feature: private profiles
14 14  
15 15 Scenario: joining a private community
16 16 Given I am logged in as "joao"
17   - When I go to Safernet's homepage
  17 + When I go to safernet's homepage
18 18 Then I should see "members only"
19 19 When I follow "Join"
20 20 And "joao" is accepted on community "Safernet"
... ...
features/profile_domain.feature
... ... @@ -12,62 +12,68 @@ Feature: domain for profile
12 12 | sample-community | Sample Community | localhost |
13 13 And the following blocks
14 14 | owner | type |
15   - | sample-community | ProfileImageBlock |
16   - | sample-community | ProfileInfoBlock |
  15 + | joaosilva | ProfileInfoBlock |
17 16 And the environment domain is "127.0.0.1"
  17 + And "Joao Silva" is environment admin
18 18 And "Joao Silva" is admin of "Sample Community"
19 19  
20 20 @selenium
21 21 Scenario: access profile control panel through profile blocks
22 22 Given I am logged in as "joaosilva"
23   - When I visit "/" and wait
24   - And I follow "Control panel" within "div.profile-info-block" and wait
25   - Then I should see "Sample Community" within "span.control-panel-title"
26   - When I visit "/" and wait
27   - And I follow "Control panel" within "div.profile-image-block" and wait
28   - Then I should see "Sample Community" within "span.control-panel-title"
  23 + When I go to joaosilva's homepage
  24 + And I follow "Control panel" within ".profile-info-block"
  25 + Then I should see "Joao Silva" within "span.control-panel-title"
  26 + When I follow "Control panel" within ".profile-image-block"
  27 + Then I should see "Joao Silva" within "span.control-panel-title"
29 28  
30 29 @selenium
31 30 Scenario: access user control panel
32 31 Given I am logged in as "joaosilva"
33   - When I visit "/" and wait
34   - And I follow "joaosilva" and wait
  32 + When I go to the homepage
  33 + And I follow "joaosilva"
  34 + And I go to sample-community's homepage
35 35 And I follow "Login"
36 36 And I fill in "joaosilva" for "Username"
37 37 And I fill in "123456" for "Password"
38   - And I press "Log in" and wait
39   - And I follow "Control panel" within "div#user" and wait
  38 + And I press "Log in"
  39 + And I follow "Control panel" within "div#user"
40 40 Then I should see "Joao Silva" within "span.control-panel-title"
41 41  
  42 + # Looking for page title is problematic on selenium since it considers the
  43 + # title to be invibible. Checkout some information about this:
  44 + # * https://github.com/jnicklas/capybara/issues/863
  45 + # * https://github.com/jnicklas/capybara/pull/953
42 46 @selenium
43 47 Scenario: access user page
44 48 Given I am logged in as "joaosilva"
45   - When I visit "/" and wait
46   - And I follow "joaosilva" and wait
47   - Then The page title should contain "Joao Silva"
  49 + When I go to the homepage
  50 + And I follow "joaosilva"
  51 + Then I should be on joaosilva's profile
  52 + And I should see "Joao Silva" within any "h1"
  53 + #And the page title should be "Joao Silva"
48 54  
49   - @selenium
50 55 Scenario: access community by domain
51   - When I go to the homepage
52   - Then The page title should contain "Sample Community"
  56 + Given I go to the search communities page
  57 + When I follow "Sample Community" within ".search-profile-item"
  58 + Then the page title should be "Sample Community"
53 59  
54   - @selenium
  60 + # This test is not working because the community domain isn't at all different
  61 + # from the environment (localhost / 127.0.0.1)
  62 + @fixme
55 63 Scenario: Go to profile homepage after clicking on home button on not found page
56   - Given I am on the homepage
  64 + Given I am on sample-community's homepage
57 65 When I go to /something-that-does-not-exist
58 66 And I follow "Go to the home page"
59 67 Then the page title should be "Sample Community - Colivre.net"
60 68  
61   - @selenium
62 69 Scenario: Go to environment homepage after clicking on home button on not found page
63 70 Given I am on the homepage
64   - And I click on the logo
65   - When I open /something-that-does-not-exist
  71 + When I go to /something-that-does-not-exist
66 72 And I follow "Go to the home page"
67   - Then the page title should be "Colivre.net"
  73 + Then I should be on the homepage
  74 + And the page title should be "Colivre.net"
68 75  
69 76 @selenium
70 77 Scenario: Compose link to administration with environment domain
71 78 Given I am logged in as "joaosilva"
72   - When I visit "/" and wait
73   - Then I should see "Administration" linking to "http://127.0.0.1/admin"
  79 + Then I should see "Administration" linking to "http://127.0.0.1.*/admin"
... ...
features/profile_search.feature
... ... @@ -14,7 +14,7 @@ Feature: search inside a profile
14 14 | joaosilva | whales and dolphins | this is an article about whales and dolphins |
15 15  
16 16 Scenario: search on profile
17   - Given I go to Joao Silva's profile
  17 + Given I go to joaosilva's profile
18 18 And I fill in "q" with "bees"
19 19 And I press "Search"
20 20 Then I should see "bees and butterflies" within ".main-block"
... ... @@ -25,7 +25,7 @@ Feature: search inside a profile
25 25 | owner | name | start_date |
26 26 | joaosilva | Group meeting | 2009-10-01 |
27 27 | joaosilva | John Doe's birthday | 2009-09-01 |
28   - When I go to Joao Silva's profile
  28 + When I go to joaosilva's profile
29 29 And I fill in "q" with "birthday"
30 30 And I press "Search"
31 31 Then I should see "John Doe's birthday" within ".main-block"
... ... @@ -35,7 +35,7 @@ Feature: search inside a profile
35 35 Given the following blocks
36 36 | owner | type |
37 37 | joaosilva | ProfileSearchBlock |
38   - When I go to Joao Silva's profile
  38 + When I go to joaosilva's profile
39 39 And I fill in "q" with "bees" within ".profile-search-block"
40 40 And I press "Search"
41 41 Then I should see "bees and butterflies" within ".main-block"
... ... @@ -45,14 +45,14 @@ Feature: search inside a profile
45 45 | owner | name | body | published |
46 46 | joaosilva | published article | this is a public article | true |
47 47 | joaosilva | unpublished article | this is a private article | false |
48   - And I go to Joao Silva's profile
  48 + And I go to joaosilva's profile
49 49 And I fill in "q" with "article"
50 50 And I press "Search"
51 51 Then I should see "public article" within ".main-block"
52 52 And I should not see "private article" within ".main-block"
53 53  
54 54 Scenario: search on environment
55   - Given I go to Joao Silva's profile
  55 + Given I go to joaosilva's profile
56 56 And I fill in "q" with "bees"
57 57 And I choose "General"
58 58 And I press "Search"
... ...
features/publish_article.feature
... ... @@ -20,48 +20,48 @@ Feature: publish article
20 20 Scenario: publishing an article that doesn't exists in the community
21 21 Given I am logged in as "joaosilva"
22 22 And "Joao Silva" is a member of "Sample Community"
23   - And I am on Joao Silva's control panel
  23 + And I am on joaosilva's control panel
24 24 And I follow "Manage Content"
25 25 And I follow "Spread"
26 26 And I check "Sample Community"
27 27 And I press "Spread this"
28   - And I go to Sample Community's sitemap
  28 + And I go to sample-community's sitemap
29 29 When I follow "Sample Article"
30 30 Then I should see "This is the first published article"
31 31  
32 32 Scenario: publishing an article with a different name
33 33 Given I am logged in as "joaosilva"
34 34 And "Joao Silva" is a member of "Sample Community"
35   - And I am on Joao Silva's control panel
  35 + And I am on joaosilva's control panel
36 36 And I follow "Manage Content"
37 37 And I follow "Spread"
38 38 And I check "Sample Community"
39 39 And I fill in "Title" with "Another name"
40 40 And I press "Spread this"
41   - When I go to Sample Community's sitemap
  41 + When I go to sample-community's sitemap
42 42 Then I should see "Another name"
43 43 And I should not see "Sample Article"
44 44  
45   - @selenium
  45 + @selenium @ignore-hidden-elements
46 46 Scenario: getting an error message when publishing article with same name
47 47 Given I am logged in as "joaosilva"
48 48 And "Joao Silva" is a member of "Sample Community"
49   - And I am on Joao Silva's control panel
50   - And I follow "Manage Content" and wait
  49 + And I am on joaosilva's control panel
  50 + And I follow "Manage Content"
51 51 And I follow "Spread"
52 52 And I check "Sample Community"
53 53 And I press "Spread this"
54 54 And I am not logged in
55 55 And I am logged in as "mariasilva"
56 56 And "Maria Silva" is a member of "Sample Community"
57   - And I am on Maria Silva's control panel
  57 + And I am on mariasilva's control panel
58 58 And I follow "Manage Content"
59 59 And I follow "New content"
60   - And I follow "Text article with Textile markup language" and wait
  60 + And I follow "Text article with Textile markup language"
61 61 And I fill in the following:
62 62 | Title | Sample Article |
63 63 | Text | this is Maria's first published article |
64   - And I press "Save" and wait
  64 + And I press "Save"
65 65 And I follow "Spread"
66 66 And I check "Sample Community"
67 67 When I press "Spread this"
... ... @@ -77,13 +77,13 @@ Feature: publish article
77 77 And "Joao Silva" is a member of "Sample Community"
78 78 And "Joao Silva" is a member of "Another Community1"
79 79 And "Joao Silva" is a member of "Another Community2"
80   - And I am on Joao Silva's control panel
  80 + And I am on joaosilva's control panel
81 81 And I follow "Manage Content"
82 82 And I follow "Spread"
83 83 And I check "Sample Community"
84 84 And I press "Spread this"
85 85 And I should not see "This article name is already in use in the following community(ies):"
86   - And I am on Joao Silva's control panel
  86 + And I am on joaosilva's control panel
87 87 And I follow "Manage Content"
88 88 And I follow "Spread"
89 89 And I check "Sample Community"
... ... @@ -91,30 +91,30 @@ Feature: publish article
91 91 And I check "Another Community2"
92 92 When I press "Spread this"
93 93 Then I should see "The title (article name) is already being used by another article, please use another title."
94   - When I go to Another Community1's sitemap
  94 + When I go to another-community1's sitemap
95 95 Then I should see "Sample Article"
96   - When I go to Another Community2's sitemap
  96 + When I go to another-community2's sitemap
97 97 Then I should see "Sample Article"
98 98  
99 99 Scenario: publishing articles with the same name in a moderated community
100 100 Given I am logged in as "joaosilva"
101 101 And "Joao Silva" is a member of "Sample Community"
102 102 And "Joao Silva" is admin of "Sample Community"
103   - And I am on Sample Community's control panel
  103 + And I am on sample-community's control panel
104 104 And I follow "Community Info and settings"
105 105 And I choose "profile_data_moderated_articles_true"
106 106 And I press "Save"
107   - And I am on Joao Silva's control panel
  107 + And I am on joaosilva's control panel
108 108 And I follow "Manage Content"
109 109 And I follow "Spread"
110 110 And I check "Sample Community"
111 111 And I press "Spread this"
112   - And I am on Joao Silva's control panel
  112 + And I am on joaosilva's control panel
113 113 And I follow "Manage Content"
114 114 And I follow "Spread"
115 115 And I check "Sample Community"
116 116 And I press "Spread this"
117   - And I am on Sample Community's control panel
  117 + And I am on sample-community's control panel
118 118 And I follow "Tasks"
119 119 And I choose "Accept"
120 120 And I press "Apply!"
... ... @@ -126,17 +126,17 @@ Feature: publish article
126 126 Scenario: ask to publish an article that was deleted before approval
127 127 Given I am logged in as "joaosilva"
128 128 And "Joao Silva" is admin of "Sample Community"
129   - And I am on Sample Community's control panel
  129 + And I am on sample-community's control panel
130 130 And I follow "Community Info and settings"
131 131 And I choose "profile_data_moderated_articles_true"
132 132 And I press "Save"
133   - And I am on Joao Silva's control panel
  133 + And I am on joaosilva's control panel
134 134 And I follow "Manage Content"
135 135 And I follow "Spread"
136 136 And I check "Sample Community"
137 137 And I press "Spread this"
138 138 And "joaosilva" has no articles
139   - And I am on Sample Community's control panel
  139 + And I am on sample-community's control panel
140 140 When I follow "Tasks"
141 141 Then I should see "The article was removed."
142 142 And I press "Apply!"
... ...
features/register_enterprise.feature
... ... @@ -9,7 +9,7 @@ Feature: register enterprise
9 9 | joaosilva | Joao Silva | joaosilva@example.com |
10 10  
11 11 And I am logged in as "joaosilva"
12   - And I am on Joao Silva's control panel
  12 + And I am on joaosilva's control panel
13 13 And feature "enterprise_registration" is enabled on environment
14 14  
15 15 Scenario: enterprise registration is disabled by admin
... ... @@ -92,7 +92,7 @@ Feature: register enterprise
92 92 And I press "Next"
93 93 Then I should see "Enterprise registration completed"
94 94 And I am logged in as admin
95   - And I go to the Control panel
  95 + And I go to admin_user's control panel
96 96 When I follow "Tasks" within ".control-panel"
97 97 Then I should see "Joao Silva wants to create enterprise My Enterprise."
98 98 And the first mail is to admin_user@example.com
... ... @@ -100,10 +100,11 @@ Feature: register enterprise
100 100 And I press "Apply!"
101 101 Then the last mail is to joaosilva@example.com
102 102 And I am logged in as "joaosilva"
103   - And I am on Joao Silva's control panel
  103 + And I am on joaosilva's control panel
104 104 When I follow "Manage my groups"
105 105 Then I should see "My Enterprise"
106 106  
  107 + @selenium
107 108 Scenario: a user register an enterprise successfully through the admin
108 109 validator method and the admin rejects
109 110 Given organization_approval_method is "admin" on environment
... ... @@ -119,7 +120,7 @@ Feature: register enterprise
119 120 And I press "Next"
120 121 Then I should see "Enterprise registration completed"
121 122 And I am logged in as admin
122   - And I go to the Control panel
  123 + And I go to admin_user's control panel
123 124 When I follow "Tasks" within ".control-panel"
124 125 Then I should see "Joao Silva wants to create enterprise My Enterprise."
125 126 And the first mail is to admin_user@example.com
... ... @@ -128,7 +129,7 @@ Feature: register enterprise
128 129 And I press "Apply!"
129 130 Then the last mail is to joaosilva@example.com
130 131 And I am logged in as "joaosilva"
131   - And I am on Joao Silva's control panel
  132 + And I am on joaosilva's control panel
132 133 When I follow "Manage my groups"
133 134 Then I should not see "My Enterprise"
134 135  
... ... @@ -156,15 +157,16 @@ Feature: register enterprise
156 157 When I choose "Validator"
157 158 And I press "Confirm"
158 159 Then I should see "Enterprise registration completed"
159   - And I am on Validator's control panel
  160 + And I am on validator's control panel
160 161 When I follow "Tasks"
161 162 Then I should see "Joao Silva wants to create enterprise My Enterprise."
162 163 And I choose "Accept"
163 164 And I press "Apply!"
164   - And I am on Joao Silva's control panel
  165 + And I am on joaosilva's control panel
165 166 When I follow "Manage my groups"
166 167 Then I should see "My Enterprise"
167 168  
  169 + @selenium
168 170 Scenario: a user register an enterprise successfully through the region
169 171 validator method and the validator rejects
170 172 Given organization_approval_method is "region" on environment
... ... @@ -189,13 +191,13 @@ Feature: register enterprise
189 191 When I choose "Validator"
190 192 And I press "Confirm"
191 193 Then I should see "Enterprise registration completed"
192   - And I am on Validator's control panel
  194 + And I am on validator's control panel
193 195 When I follow "Tasks"
194 196 Then I should see "Joao Silva wants to create enterprise My Enterprise."
195 197 And I choose "Reject"
196 198 And I fill in "Rejection explanation" with "This enterprise has some irregularities."
197 199 And I press "Apply"
198   - And I am on Joao Silva's control panel
  200 + And I am on joaosilva's control panel
199 201 When I follow "Manage my groups"
200 202 Then I should not see "My Enterprise"
201 203  
... ...
features/search.feature
... ... @@ -9,7 +9,7 @@ Feature: search
9 9  
10 10 Scenario: show empty results in all enabled assets
11 11 Given I go to the search page
12   - And I fill in "query" with "Anything"
  12 + And I fill in "search-input" with "Anything"
13 13 And I press "Search"
14 14 Then I should see "People" within ".search-results-people"
15 15 And I should see "None" within ".search-results-people"
... ... @@ -30,7 +30,7 @@ Feature: search
30 30 | joaosilva | Joao Silva |
31 31 | josearaujo | Jose Araujo |
32 32 When I go to the search page
33   - And I fill in "query" with "Silva"
  33 + And I fill in "search-input" with "Silva"
34 34 And I press "Search"
35 35 Then I should see "Joao Silva" within ".common-profile-list-block"
36 36 And I should not see "Jose Araujo"
... ... @@ -51,7 +51,7 @@ Feature: search
51 51 | joaosilva | article #8 |
52 52 | joaosilva | article #9 |
53 53 When I go to the search page
54   - And I fill in "query" with "article"
  54 + And I fill in "search-input" with "article"
55 55 And I press "Search"
56 56 Then I should see "article #8" within ".search-results-articles"
57 57 And I should not see "article #9" within ".search-results-articles"
... ... @@ -65,7 +65,7 @@ Feature: search
65 65 | boring-community | Boring community | semterrinha |
66 66 | fancy-community | Fancy community | agrotox |
67 67 And I go to the search page
68   - And I fill in "query" with "fancy"
  68 + And I fill in "search-input" with "fancy"
69 69 And I press "Search"
70 70 Then I should see "Fancy community" within ".common-profile-list-block"
71 71 And I should not see "Boring community"
... ... @@ -76,7 +76,7 @@ Feature: search
76 76 | shop1 | Shoes shop |
77 77 | shop2 | Fruits shop |
78 78 And I go to the search page
79   - And I fill in "query" with "shoes"
  79 + And I fill in "search-input" with "shoes"
80 80 And I press "Search"
81 81 Then I should see "Shoes shop" within ".common-profile-list-block"
82 82 And I should not see "Fruits shop"
... ... @@ -90,7 +90,7 @@ Feature: search
90 90 | joaosilva | bees and butterflies | this is an article about bees and butterflies |
91 91 | joaosilva | whales and dolphins | this is an article about whales and dolphins |
92 92 When I go to the search page
93   - And I fill in "query" with "whales"
  93 + And I fill in "search-input" with "whales"
94 94 And I press "Search"
95 95 Then I should see "whales and dolphins" within "div.search-results-articles"
96 96 And I should not see "bees and butterflies"
... ... @@ -107,7 +107,7 @@ Feature: search
107 107 | colivre-ent | development | social networks consultancy |
108 108 | colivre-ent | development | wikis consultancy |
109 109 When I go to the search page
110   - And I fill in "query" with "wikis"
  110 + And I fill in "search-input" with "wikis"
111 111 And I press "Search"
112 112 Then I should see "wikis consultancy" within "div.search-results-products"
113 113 And I should not see "social networks consultancy"
... ... @@ -121,7 +121,7 @@ Feature: search
121 121 | nice-people | Group meeting | 2009-10-01 |
122 122 | nice-people | John Doe's birthday | 2009-09-01 |
123 123 When I go to the search page
124   - And I fill in "query" with "birthday"
  124 + And I fill in "search-input" with "birthday"
125 125 And I press "Search"
126 126 Then I should see "John Doe's birthday" within "div.search-results-events"
127 127 And I should not see "Group meeting"
... ... @@ -140,7 +140,7 @@ Feature: search
140 140 | owner | name | category |
141 141 | colivre_dev | Noosfero platform | Development |
142 142 When I go to the search page
143   - And I fill in "query" with "noosfero"
  143 + And I fill in "search-input" with "noosfero"
144 144 And I press "Search"
145 145 Then I should see "Colivre - Noosfero dev." within "div.search-results-enterprises"
146 146 And I should see "Noosfero users" within "div.search-results-communities"
... ...
features/search_communities.feature
... ... @@ -28,7 +28,7 @@ Feature: search communities
28 28  
29 29 Scenario: simple search for community
30 30 When I go to the search communities page
31   - And I fill in "query" with "noosfero"
  31 + And I fill in "search-input" with "noosfero"
32 32 And I press "Search"
33 33 Then I should see "Noosfero Community" within "#search-results"
34 34 And I should see "Noosfero Community" within ".only-one-result-box"
... ... @@ -42,7 +42,7 @@ Feature: search communities
42 42 | identifier | name | category |
43 43 | noos-comm | Noosfero Community | software-livre |
44 44 When I go to the search communities page
45   - And I fill in "query" with "software livre"
  45 + And I fill in "search-input" with "software livre"
46 46 And I press "Search"
47 47 Then I should see "Noosfero" within "#search-results"
48 48  
... ... @@ -57,7 +57,7 @@ Feature: search communities
57 57 | identifier | name | category |
58 58 | linux | Linux Community | software-livre |
59 59 When I go to the search communities page
60   - And I fill in "query" with "Linux"
  60 + And I fill in "search-input" with "Linux"
61 61 And I press "Search"
62 62 Then I should see "Temáticas" within "#facets-menu"
63 63  
... ... @@ -66,7 +66,7 @@ Feature: search communities
66 66 | identifier | name |
67 67 | luwac | Linux Users Without a Clue |
68 68 When I go to the search communities page
69   - And I fill in "query" with "Linux Clue"
  69 + And I fill in "search-input" with "Linux Clue"
70 70 And I press "Search"
71 71 Then I should see "Linux Users Without a Clue" within "#search-results"
72 72  
... ... @@ -83,7 +83,7 @@ Feature: search communities
83 83 | noos-dev | Noosfero Developers | software-livre |
84 84 | facebook | Facebook Developers | big-brother |
85 85 When I go to the search communities page
86   - And I fill in "query" with "Developers"
  86 + And I fill in "search-input" with "Developers"
87 87 And I press "Search"
88 88 And I follow "Software Livre" within "#facets-menu"
89 89 Then I should see "Noosfero Developers" within "#search-results"
... ... @@ -106,10 +106,10 @@ Feature: search communities
106 106 | rails-dev | Rails Developers | other-category |
107 107 | rails-usr | Rails Users | software-livre |
108 108 When I go to the search communities page
109   - And I fill in "query" with "Developers"
  109 + And I fill in "search-input" with "Developers"
110 110 And I press "Search"
111 111 And I follow "Software Livre" within "#facets-menu"
112   - And I fill in "query" with "Rails"
  112 + And I fill in "search-input" with "Rails"
113 113 And I press "Search"
114 114 Then I should see "Rails Users" within "#search-results"
115 115 And I should not see "Rails Developers"
... ...
features/search_contents.feature
... ... @@ -26,7 +26,7 @@ Feature: search contents
26 26 Then I should see "whales and dolphins" within ".search-text-article-item"
27 27 And I should see "whales and dolphins" within ".only-one-result-box"
28 28 And I should not see "bees and butterflies"
29   - And I should see content inside ".icon-content-textile-article"
  29 + And The page should contain ".icon-content-textile-article"
30 30 When I follow "whales and dolphins"
31 31 Then I should be on article "whales and dolphins"
32 32  
... ... @@ -155,19 +155,19 @@ Feature: search contents
155 155  
156 156 Scenario: link to author on search results
157 157 When I go to the search articles page
158   - And I fill in "query" with "whales"
  158 + And I fill in "search-input" with "whales"
159 159 And I press "Search"
160 160 Then I should see "Author" within ".search-article-author"
161 161 Then I should see "Joao Silva" within ".search-article-author-name"
162 162 When I follow "Joao Silva"
163   - Then I should be on Joao Silva's profile
  163 + Then I should be on joaosilva's profile
164 164  
165 165 Scenario: show clean description excerpt on search results
166 166 Given the following articles
167 167 | owner | name | body |
168 168 | joaosilva | Herreninsel | The island <b>Herreninsel</b>, with an area of 238 hectares, is the biggest of the three main islands of the Chiemsee, a lake in the state of Bavaria, Germany. Together with the islands of Fraueninsel and Krautinsel it forms the municipality of Chiemsee. |
169 169 When I go to the search articles page
170   - And I fill in "query" with "island"
  170 + And I fill in "search-input" with "island"
171 171 And I press "Search"
172 172 Then I should see "Description" within ".search-article-description"
173 173 And I should see "The island Herreninsel, with" within ".search-article-description"
... ... @@ -178,7 +178,7 @@ Feature: search contents
178 178 | owner | name | body |
179 179 | joaosilva | Herreninsel | |
180 180 When I go to the search articles page
181   - And I fill in "query" with "Herreninsel"
  181 + And I fill in "search-input" with "Herreninsel"
182 182 And I press "Search"
183 183 Then I should see "None" within ".search-article-description"
184 184  
... ... @@ -188,7 +188,7 @@ Feature: search contents
188 188 | bees and butterflies | Hymenoptera |
189 189 | bees and butterflies | Lepidoptera |
190 190 When I go to the search articles page
191   - And I fill in "query" with "bees"
  191 + And I fill in "search-input" with "bees"
192 192 And I press "Search"
193 193 Then I should see "Tags" within ".search-article-tags"
194 194 And I should see "Hymenoptera" within ".search-article-tags"
... ... @@ -198,7 +198,7 @@ Feature: search contents
198 198  
199 199 Scenario: show empty tags in search results
200 200 When I go to the search articles page
201   - And I fill in "query" with "dolphins"
  201 + And I fill in "search-input" with "dolphins"
202 202 And I press "Search"
203 203 Then I should see "None" within ".search-article-tags"
204 204  
... ... @@ -210,14 +210,14 @@ Feature: search contents
210 210 | owner | name | body | category |
211 211 | joaosilva | Sergei Sorokin | Retired ice hockey player | soviet |
212 212 When I go to the search articles page
213   - And I fill in "query" with "hockey"
  213 + And I fill in "search-input" with "hockey"
214 214 And I press "Search"
215 215 Then I should see "Categories" within ".search-article-categories"
216 216 And I should see "Soviet" within ".search-article-category"
217 217  
218 218 Scenario: show empty categories on search results
219 219 When I go to the search articles page
220   - And I fill in "query" with "whales"
  220 + And I fill in "search-input" with "whales"
221 221 And I press "Search"
222 222 Then I should see "whales and dolphins"
223 223 And I should see "None" within ".search-article-categories-container"
... ... @@ -243,7 +243,7 @@ Feature: search contents
243 243 | owner | name | body | category |
244 244 | joaosilva | using noosfero | noosfero is a great CMS | software-livre |
245 245 When I go to the search articles page
246   - And I fill in "query" with "Software"
  246 + And I fill in "search-input" with "Software"
247 247 And I press "Search"
248 248 Then I should see "using noosfero" within "#search-results"
249 249 And I should not see "bees and butterflies"
... ... @@ -255,7 +255,7 @@ Feature: search contents
255 255 | joaosilva | JSilva blog |
256 256 When I search contents for "JSilva"
257 257 Then I should see "JSilva blog" within ".search-result-title"
258   - And I should see content inside ".icon-content-blog"
  258 + And The page should contain ".icon-content-blog"
259 259  
260 260 Scenario: show and link last posts on blog search results
261 261 Given the following blogs
... ... @@ -286,7 +286,7 @@ Feature: search contents
286 286  
287 287 Scenario: see default facets when searching
288 288 When I go to the search articles page
289   - And I fill in "query" with "bees"
  289 + And I fill in "search-input" with "bees"
290 290 And I press "Search"
291 291 Then I should see "Type" within "#facets-menu"
292 292 And I should see "Published date" within "#facets-menu"
... ... @@ -295,7 +295,7 @@ Feature: search contents
295 295  
296 296 Scenario: find enterprises without exact query
297 297 When I go to the search articles page
298   - And I fill in "query" with "article bees"
  298 + And I fill in "search-input" with "article bees"
299 299 And I press "Search"
300 300 Then I should see "bees and butterflies" within "#search-results"
301 301  
... ... @@ -309,7 +309,7 @@ Feature: search contents
309 309 | joaosilva | noosfero and debian | this is an article about noosfero and debian | software-livre |
310 310 | joaosilva | facebook and 1984 | this is an article about facebook and 1984 | big-brother |
311 311 When I go to the search articles page
312   - And I fill in "query" with "this is an article"
  312 + And I fill in "search-input" with "this is an article"
313 313 And I press "Search"
314 314 # Then show me the page
315 315 And I follow "Software Livre" within "#facets-menu"
... ... @@ -329,10 +329,10 @@ Feature: search contents
329 329 | joaosilva | facebook and 1984 | this is an article about facebook and 1984 | big-brother |
330 330 | joaosilva | facebook defense | facebook is not so bad | software-livre |
331 331 When I go to the search articles page
332   - And I fill in "query" with "this is an article"
  332 + And I fill in "search-input" with "this is an article"
333 333 And I press "Search"
334 334 And I follow "Software Livre" within "#facets-menu"
335   - And I fill in "query" with "facebook"
  335 + And I fill in "search-input" with "facebook"
336 336 And I press "Search"
337 337 Then I should see "facebook defense" within "#search-results"
338 338 And I should not see "1984"
... ...
features/search_enterprises.feature
... ... @@ -14,6 +14,7 @@ Feature: search enterprises
14 14 | Temáticas |
15 15  
16 16 Scenario: show recent enterprises on index
  17 + Given there are no pending jobs
17 18 When I go to the search enterprises page
18 19 Then I should see "Shoes shop" within "#search-results"
19 20 And I should see Shoes shop's profile image
... ... @@ -26,7 +27,7 @@ Feature: search enterprises
26 27  
27 28 Scenario: simple search for enterprise
28 29 When I go to the search enterprises page
29   - And I fill in "query" with "shoes"
  30 + And I fill in "search-input" with "shoes"
30 31 And I press "Search"
31 32 Then I should see "Shoes shop" within ".only-one-result-box"
32 33 And I should see Shoes shop's profile image
... ... @@ -36,7 +37,7 @@ Feature: search enterprises
36 37 Scenario: link to enterprise homepage on search results
37 38 Given I search enterprises for "shoes"
38 39 When I follow "Shoes shop"
39   - Then I should be on Shoes shop's profile
  40 + Then I should be on shop1's profile
40 41  
41 42 Scenario: show clean enterprise homepage on search results
42 43 Given the following articles
... ... @@ -56,13 +57,13 @@ Feature: search enterprises
56 57  
57 58 Scenario: see default facets when searching
58 59 When I go to the search enterprises page
59   - And I fill in "query" with "shoes"
  60 + And I fill in "search-input" with "shoes"
60 61 And I press "Search"
61 62 Then I should see "City" within "#facets-menu"
62 63  
63 64 Scenario: see category facets when searching
64 65 When I go to the search enterprises page
65   - And I fill in "query" with "shoes"
  66 + And I fill in "search-input" with "shoes"
66 67 And I press "Search"
67 68 Then I should see "Temáticas" within "#facets-menu"
68 69  
... ... @@ -74,7 +75,7 @@ Feature: search enterprises
74 75 | identifier | name | region |
75 76 | art-pp | Artesanato PP | Pres. Prudente |
76 77 When I go to the search enterprises page
77   - And I fill in "query" with "Artesanato"
  78 + And I fill in "search-input" with "Artesanato"
78 79 And I press "Search"
79 80 Then I should see "Pres. Prudente" within "#facet-menu-f_region"
80 81 And I should see ", SP" within "#facet-menu-f_region"
... ... @@ -89,7 +90,7 @@ Feature: search enterprises
89 90 | identifier | name | region |
90 91 | art-pp | Artesanato PP | Pres. Prudente |
91 92 When I go to the search enterprises page
92   - And I fill in "query" with "Prudente"
  93 + And I fill in "search-input" with "Prudente"
93 94 And I press "Search"
94 95 Then I should see "Artesanato PP" within "#search-results"
95 96  
... ... @@ -101,7 +102,7 @@ Feature: search enterprises
101 102 | identifier | name | category |
102 103 | noosfero | Noosfero | software-livre |
103 104 When I go to the search enterprises page
104   - And I fill in "query" with "software"
  105 + And I fill in "search-input" with "software"
105 106 And I press "Search"
106 107 Then I should see "Noosfero" within "#search-results"
107 108 And I should see "Software Livre" within ".search-enterprise-category"
... ... @@ -123,7 +124,7 @@ Feature: search enterprises
123 124 | identifier | name |
124 125 | noosfero | Noosfero Developers Association |
125 126 When I go to the search enterprises page
126   - And I fill in "query" with "Noosfero Association"
  127 + And I fill in "search-input" with "Noosfero Association"
127 128 And I press "Search"
128 129 Then I should see "Noosfero Developers Association" within "#search-results"
129 130  
... ... @@ -136,7 +137,7 @@ Feature: search enterprises
136 137 | noosfero | Noosfero Developers | software-livre |
137 138 | facebook | Facebook Developers | |
138 139 When I go to the search enterprises page
139   - And I fill in "query" with "Developers"
  140 + And I fill in "search-input" with "Developers"
140 141 And I press "Search"
141 142 And I follow "Software Livre" within "#facets-menu"
142 143 Then I should see "Noosfero Developers" within "#search-results"
... ... @@ -155,10 +156,10 @@ Feature: search enterprises
155 156 | rails-dev | Rails Developers | |
156 157 | rails-usr | Rails Users | software-livre |
157 158 When I go to the search enterprises page
158   - And I fill in "query" with "Developers"
  159 + And I fill in "search-input" with "Developers"
159 160 And I press "Search"
160 161 And I follow "Software Livre" within "#facets-menu"
161   - And I fill in "query" with "Rails"
  162 + And I fill in "search-input" with "Rails"
162 163 And I press "Search"
163 164 Then I should see "Rails Users" within "#search-results"
164 165 And I should not see "Rails Developers"
... ...
features/search_people.feature
... ... @@ -17,7 +17,7 @@ Feature: search people
17 17  
18 18 Scenario: simple search for person
19 19 When I go to the search people page
20   - And I fill in "query" with "Silva"
  20 + And I fill in "search-input" with "Silva"
21 21 And I press "Search"
22 22 Then I should see "Joao Silva" within "#search-results"
23 23 And I should see "Joao Silva" within ".only-one-result-box"
... ... @@ -32,7 +32,7 @@ Feature: search people
32 32 | name |
33 33 | Temáticas |
34 34 When I go to the search people page
35   - And I fill in "query" with "joao"
  35 + And I fill in "search-input" with "joao"
36 36 And I press "Search"
37 37 Then I should see "Temáticas" within "#facets-menu"
38 38  
... ... @@ -44,7 +44,7 @@ Feature: search people
44 44 | login | name | category |
45 45 | linus | Linus Torvalds | software-livre |
46 46 When I go to the search people page
47   - And I fill in "query" with "software livre"
  47 + And I fill in "search-input" with "software livre"
48 48 And I press "Search"
49 49 Then I should see "Linus Torvalds" within "#search-results"
50 50 And I should not see "Joao Silva"
... ... @@ -55,7 +55,7 @@ Feature: search people
55 55 | login | name |
56 56 | jsilva | Joao Adalberto de Oliveira Silva |
57 57 When I go to the search people page
58   - And I fill in "query" with "Adalberto Silva"
  58 + And I fill in "search-input" with "Adalberto Silva"
59 59 And I press "Search"
60 60 Then I should see "Joao Adalberto de Oliveira Silva" within "#search-results"
61 61  
... ... @@ -71,7 +71,7 @@ Feature: search people
71 71 | linus | Linus Torvalds | software-livre |
72 72 | other | Other Linus | |
73 73 When I go to the search people page
74   - And I fill in "query" with "Linus"
  74 + And I fill in "search-input" with "Linus"
75 75 And I press "Search"
76 76 And I follow "Software Livre" within "#facets-menu"
77 77 Then I should see "Linus Torvalds" within "#search-results"
... ... @@ -93,10 +93,10 @@ Feature: search people
93 93 | rilin | Richard Linus | |
94 94 | stall | Richard Stallman | software-livre |
95 95 When I go to the search people page
96   - And I fill in "query" with "Linus"
  96 + And I fill in "search-input" with "Linus"
97 97 And I press "Search"
98 98 And I follow "Software Livre" within "#facets-menu"
99   - And I fill in "query" with "Richard"
  99 + And I fill in "search-input" with "Richard"
100 100 And I press "Search"
101 101 Then I should see "Richard Stallman" within "#search-results"
102 102 And I should not see "Richard Linus"
... ...
features/search_products.feature
... ... @@ -21,14 +21,18 @@ Feature: search products
21 21 When I go to the search products page
22 22 Then I should see "wikis consultancy" within "#search-results"
23 23 And I should see "social networks consultancy" within "#search-results"
24   - And I should not see content inside "div.pagination"
25   - And I should not see content inside "#facets-menu"
  24 +
  25 + Scenario: not show pagination and facets on recent products
  26 + When I go to the search products page
  27 + Then The page should not contain "div.pagination"
  28 + And The page should not contain "#facets-menu"
26 29  
27 30 Scenario: show empty search results
28 31 When I search products for "something unrelated"
29 32 Then I should see "None" within ".search-results-type-empty"
30 33  
31 34 Scenario: simple search for product
  35 + Given there are no pending jobs
32 36 When I search products for "wikis"
33 37 Then I should see "wikis consultancy" within "#search-results"
34 38 And I should see "wikis consultancy" within ".only-one-result-box"
... ... @@ -38,7 +42,7 @@ Feature: search products
38 42  
39 43 Scenario: see default facets when searching
40 44 When I go to the search products page
41   - And I fill in "query" with "wikis"
  45 + And I fill in "search-input" with "wikis"
42 46 And I press "Search"
43 47 Then I should see "Related products" within "#facets-menu"
44 48 Then I should see "City" within "#facets-menu"
... ... @@ -49,7 +53,7 @@ Feature: search products
49 53 | product | category | solidary |
50 54 | wikis consultancy | development | true |
51 55 When I go to the search products page
52   - And I fill in "query" with "wikis"
  56 + And I fill in "search-input" with "wikis"
53 57 And I press "Search"
54 58 Then I should see "100%" within "div.search-product-ecosol-percentage-icon-100"
55 59  
... ... @@ -59,7 +63,7 @@ Feature: search products
59 63 | wikis consultancy | development | true |
60 64 | wikis consultancy | development | false |
61 65 When I go to the search products page
62   - And I fill in "query" with "wikis"
  66 + And I fill in "search-input" with "wikis"
63 67 And I press "Search"
64 68 Then I should see "50%" within "div.search-product-ecosol-percentage-icon-50"
65 69  
... ... @@ -71,7 +75,7 @@ Feature: search products
71 75 | wikis consultancy | development | true |
72 76 | wikis consultancy | development | false |
73 77 When I go to the search products page
74   - And I fill in "query" with "wikis"
  78 + And I fill in "search-input" with "wikis"
75 79 And I press "Search"
76 80 Then I should see "75%" within "div.search-product-ecosol-percentage-icon-75"
77 81  
... ... @@ -83,7 +87,7 @@ Feature: search products
83 87 | wikis consultancy | development | false |
84 88 | wikis consultancy | development | false |
85 89 When I go to the search products page
86   - And I fill in "query" with "wikis"
  90 + And I fill in "search-input" with "wikis"
87 91 And I press "Search"
88 92 Then I should see "25%" within "div.search-product-ecosol-percentage-icon-25"
89 93  
... ... @@ -92,7 +96,7 @@ Feature: search products
92 96 | owner | category | name | price | img |
93 97 | colivre-ent | development | noosfero | 12.34 | noosfero-network |
94 98 When I go to the search products page
95   - And I fill in "query" with "noosfero"
  99 + And I fill in "search-input" with "noosfero"
96 100 And I press "Search"
97 101 Then I should not see "No image"
98 102 And I should see "Zoom in" within "a.zoomify-image"
... ... @@ -105,7 +109,7 @@ Feature: search products
105 109 | owner | name | category |
106 110 | colivre-ent | Noosfero | software-livre |
107 111 When I go to the search products page
108   - And I fill in "query" with "software livre"
  112 + And I fill in "search-input" with "software livre"
109 113 And I press "Search"
110 114 Then I should see "Noosfero" within "#search-results"
111 115 And I should not see "wikis consultancy"
... ... @@ -125,7 +129,7 @@ Feature: search products
125 129 | owner | name | category |
126 130 | art-pp | Arte em Madeira | solidaria |
127 131 When I go to the search products page
128   - And I fill in "query" with "Madeira"
  132 + And I fill in "search-input" with "Madeira"
129 133 And I press "Search"
130 134 Then I should see "Pres. Prudente" within "#facet-menu-f_region"
131 135 And I should see ", SP" within "#facet-menu-f_region"
... ... @@ -145,7 +149,7 @@ Feature: search products
145 149 | owner | name | category |
146 150 | art-pp | Arte em Madeira | solidaria |
147 151 When I go to the search products page
148   - And I fill in "query" with "Prudente"
  152 + And I fill in "search-input" with "Prudente"
149 153 And I press "Search"
150 154 Then I should see "Arte em Madeira" within "#search-results"
151 155  
... ... @@ -157,7 +161,7 @@ Feature: search products
157 161 | owner | name | category |
158 162 | colivre-ent | Noosfero Social Network Platform | software-livre |
159 163 When I go to the search products page
160   - And I fill in "query" with "Noosfero Network"
  164 + And I fill in "search-input" with "Noosfero Network"
161 165 And I press "Search"
162 166 Then I should see "Noosfero Social Network Platform" within "#search-results"
163 167  
... ... @@ -177,7 +181,7 @@ Feature: search products
177 181 | colivre-ent | Noosfero Network | software-livre |
178 182 | fb | Facebook Network | big-brother |
179 183 When I go to the search products page
180   - And I fill in "query" with "Network"
  184 + And I fill in "search-input" with "Network"
181 185 And I press "Search"
182 186 And I follow "Software Livre" within "#facets-menu"
183 187 Then I should see "Noosfero Network" within "#search-results"
... ... @@ -206,10 +210,10 @@ Feature: search products
206 210 | other | Other open | software-livre |
207 211 | other | Other closed | big-brother |
208 212 When I go to the search products page
209   - And I fill in "query" with "Network"
  213 + And I fill in "search-input" with "Network"
210 214 And I press "Search"
211 215 And I follow "Software Livre" within "#facets-menu"
212   - And I fill in "query" with "Other"
  216 + And I fill in "search-input" with "Other"
213 217 And I press "Search"
214 218 Then I should see "Other open" within "#search-results"
215 219 And I should not see "Other closed"
... ... @@ -217,4 +221,4 @@ Feature: search products
217 221 Scenario: don't search when products are disabled in environment
218 222 Given feature "disable_asset_products" is enabled on environment
219 223 When I go to the search products page
220   - Then I should not see content inside "#search-results"
  224 + Then I should see "There is no such page" within "#not-found"
... ...
features/send_email_to_environment_members.feature
... ... @@ -17,37 +17,29 @@ Feature: send emails to environment members users
17 17  
18 18 Scenario: Send e-mail to members
19 19 Given I am logged in as admin
20   - When I follow "Administration"
21   - And I follow "Users"
22   - And I follow "Send e-mail to users"
  20 + And I go to /admin/users/send_mail
23 21 And I fill in "Subject" with "Hello, user!"
24   - And I fill in "body" with "We have some news"
  22 + And I fill in "Body" with "We have some news"
25 23 When I press "Send"
26 24 Then I should be on /admin/users
27 25  
28 26 Scenario: Not send e-mail to members if subject is blank
29 27 Given I am logged in as admin
30   - When I follow "Administration"
31   - And I follow "Users"
32   - And I follow "Send e-mail to users"
33   - And I fill in "body" with "We have some news"
  28 + And I go to /admin/users/send_mail
  29 + And I fill in "Body" with "We have some news"
34 30 When I press "Send"
35 31 Then I should be on /admin/users/send_mail
36 32  
37 33 Scenario: Not send e-mail to members if body is blank
38 34 Given I am logged in as admin
39   - When I follow "Administration"
40   - And I follow "Users"
41   - And I follow "Send e-mail to users"
  35 + And I go to /admin/users/send_mail
42 36 And I fill in "Subject" with "Hello, user!"
43 37 When I press "Send"
44 38 Then I should be on /admin/users/send_mail
45 39  
46 40 Scenario: Cancel creation of mailing
47 41 Given I am logged in as admin
48   - When I follow "Administration"
49   - And I follow "Users"
50   - And I follow "Send e-mail to users"
  42 + And I go to /admin/users/send_mail
51 43 Then I should be on /admin/users/send_mail
52 44 When I follow "Cancel e-mail"
53 45 Then I should be on /admin/users
... ...
features/send_email_to_organization_members.feature
... ... @@ -33,7 +33,7 @@ Feature: send emails to organization members
33 33 And I go to Sample Community's members management
34 34 And I follow "Send e-mail to members"
35 35 And I fill in "Subject" with "Hello, member!"
36   - And I fill in "body" with "We have some news"
  36 + And I fill in "Body" with "We have some news"
37 37 When I press "Send"
38 38 Then I should be on Sample Community's members management
39 39  
... ... @@ -41,7 +41,7 @@ Feature: send emails to organization members
41 41 Given I am logged in as "joaosilva"
42 42 And I go to Sample Community's members management
43 43 And I follow "Send e-mail to members"
44   - And I fill in "body" with "We have some news"
  44 + And I fill in "Body" with "We have some news"
45 45 When I press "Send"
46 46 Then I should be on /profile/sample-community/send_mail
47 47  
... ... @@ -68,19 +68,19 @@ Feature: send emails to organization members
68 68 Scenario: Show button "Send e-Mail to members" of community to an moderator
69 69 Given I am logged in as "jose"
70 70 When I go to Sample Community's members page
71   - Then I should see "Send e-mail to members" link
  71 + Then I should see "Send e-mail to members"
72 72  
73 73 Scenario: Not show button "Send e-Mail to members" if user has no right permission
74 74 Given I am logged in as "manoel"
75 75 When I go to Sample Community's members page
76   - Then I should not see "Send e-mail to members" link
  76 + Then I should not see "Send e-mail to members"
77 77  
78 78 Scenario: Redirect back to profile members page after send mail
79 79 Given I am logged in as "jose"
80 80 When I go to Sample Community's members page
81 81 And I follow "Send e-mail to members"
82 82 And I fill in "Subject" with "Hello, member!"
83   - And I fill in "body" with "We have some news"
  83 + And I fill in "Body" with "We have some news"
84 84 When I press "Send"
85 85 Then I should be on Sample Community's members page
86 86  
... ...
features/session_and_cookies_handling.feature
... ... @@ -4,6 +4,7 @@ Feature: session and cookies handling
4 4 I want Noosfero to manage well it usage of sessions and cookies
5 5 So that we can use HTTP caching effectively
6 6  
  7 + @fixme
7 8 Scenario: home page, logged in
8 9 Given the following users
9 10 | login |
... ... @@ -16,10 +17,12 @@ Feature: session and cookies handling
16 17 When I go to the homepage
17 18 Then there must be no cookies
18 19  
  20 + @fixme
19 21 Scenario: user_data, not logged in
20 22 When I make a AJAX request to the user data path
21 23 Then there must be no cookies
22 24  
  25 + @fixme
23 26 Scenario: user_data, logged in
24 27 Given I am logged in as admin
25 28 When I make a AJAX request to the user data path
... ...
features/signup.feature
... ... @@ -16,13 +16,12 @@ Feature: signup
16 16 | Full name | José da Silva |
17 17 And wait for the captcha signup time
18 18 And I press "Create my account"
19   - Then I should not be logged in
20   - And I should receive an e-mail on josesilva@example.com
  19 + Then I should receive an e-mail on josesilva@example.com
21 20 When I go to login page
22 21 And I fill in "Username" with "josesilva"
23 22 And I fill in "Password" with "secret"
24 23 And I press "Log in"
25   - Then I should not be logged in
  24 + Then I should not be logged in as "josesilva"
26 25 When José da Silva's account is activated
27 26 And I go to login page
28 27 And I fill in "Username" with "josesilva"
... ... @@ -36,7 +35,7 @@ Feature: signup
36 35 | joaosilva | Joao Silva |
37 36 Given I am logged in as "joaosilva"
38 37 And I go to signup page
39   - Then I should be on Joao Silva's control panel
  38 + Then I should be on joaosilva's control panel
40 39  
41 40 @selenium
42 41 Scenario: user cannot register without a name
... ... @@ -56,7 +55,7 @@ Feature: signup
56 55 | login | name |
57 56 | joaosilva | Joao Silva |
58 57 Given I am logged in as "joaosilva"
59   - And I am on Joao Silva's control panel
  58 + And I am on joaosilva's control panel
60 59 And I follow "Edit Profile"
61 60 And I fill in "Name" with ""
62 61 When I press "Save"
... ...
features/step_definitions/admin_categories_steps.rb 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +When /^I follow "([^"]*)" and wait while it hides$/ do |link|
  2 + click_link link
  3 + wait_until{ page.should have_no_css('a', :text => link, :visible => true) }
  4 +end
... ...
features/step_definitions/chat_steps.rb 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +When /^I select window "([^\"]*)"$/ do |selector|
  2 + page.driver.browser.switch_to.window(selector)
  3 +end
... ...
features/step_definitions/create_community_steps.rb
1 1 include DatesHelper
2 2  
3 3 Given /^I create community "(.+)"$/ do |community|
4   - Given 'I go to the Control panel'
  4 + Given %{I go to admin_user's control panel}
5 5 click_link('Manage my groups')
6 6 click_link('Create a new community')
7 7 fill_in("Name", :with => community)
... ... @@ -10,7 +10,7 @@ end
10 10  
11 11 Given /^I approve community "(.+)"$/ do |community|
12 12 task = CreateCommunity.all.select {|c| c.name == community}.first
13   - Given 'I go to the Control panel'
  13 + Given %{I go to admin_user's control panel}
14 14 click_link('Process requests')
15 15 choose("decision-finish-#{task.id}")
16 16 click_button('Apply!')
... ... @@ -18,7 +18,7 @@ end
18 18  
19 19 Given /^I reject community "(.+)"$/ do |community|
20 20 task = CreateCommunity.all.select {|c| c.name == community}.first
21   - Given 'I go to the Control panel'
  21 + Given %{I go to admin_user's control panel}
22 22 click_link('Process requests')
23 23 choose("decision-cancel-#{task.id}")
24 24 click_button('Apply!')
... ... @@ -27,5 +27,5 @@ end
27 27 Then /^I should see "([^\"]*)"'s creation date$/ do |community|
28 28 com = Community.find_by_name community
29 29 text = "Created at: #{show_date(com.created_at)}"
30   - response.should contain(text)
  30 + has_content?(text)
31 31 end
... ...
features/step_definitions/custom_web_steps.rb 0 → 100644
... ... @@ -0,0 +1,46 @@
  1 +Then /^"([^"]*)" should not be visible within "([^"]*)"$/ do |text, selector|
  2 + if page.has_content?(text)
  3 + page.should have_no_css(selector, :text => text, :visible => false)
  4 + end
  5 +end
  6 +
  7 +Then /^"([^"]*)" should be visible within "([^"]*)"$/ do |text, selector|
  8 + if page.has_content?(text)
  9 + page.should have_css(selector, :text => text, :visible => false)
  10 + end
  11 +end
  12 +
  13 +Then /^I should see "([^"]*)" link$/ do |text|
  14 + page.should have_css('a', :text => text)
  15 +end
  16 +
  17 +Then /^I should not see "([^"]*)" link$/ do |text|
  18 + page.should have_no_css('a', :text => text)
  19 +end
  20 +
  21 +When /^I should see "([^\"]+)" linking to "([^\"]+)"$/ do |text, href|
  22 + page.should have_xpath("//a", :href => /#{href}/)
  23 +end
  24 +
  25 +Then /^the "([^"]*)" button should be disabled$/ do |selector|
  26 + field = find(selector)
  27 + field['disabled'].should be_true
  28 +end
  29 +
  30 +Then /^the "([^"]*)" button should be enabled$/ do |selector|
  31 + field = find(selector)
  32 + field['disabled'].should_not be_true
  33 +end
  34 +
  35 +When /^I reload and wait for the page$/ do
  36 + raise "Why why need this? Remove!"
  37 + visit page.driver.browser.current_url
  38 +end
  39 +
  40 +When /^I leave the "([^\"]+)" field$/ do |selector|
  41 + page.execute_script "jQuery('#{selector}').trigger('blur')"
  42 +end
  43 +
  44 +When /^I confirm the browser dialog$/ do
  45 + page.driver.browser.switch_to.alert.accept
  46 +end
... ...
features/step_definitions/custom_webrat_steps.rb
... ... @@ -1,48 +0,0 @@
1   -When /^I should see "([^\"]+)" link$/ do |text|
2   - if response.class.to_s == 'Webrat::SeleniumResponse'
3   - response.selenium.is_element_present("css=a:contains('#{text}')")
4   - else
5   - response.should have_selector("a:contains('#{text}')")
6   - end
7   -end
8   -
9   -When /^I should not see "([^\"]+)" link$/ do |text|
10   - response.should_not have_selector("a:contains('#{text}')")
11   -end
12   -
13   -When /^I should see "([^\"]+)" linking to "([^\"]+)"$/ do |text, href|
14   - response.should have_selector("a:contains('#{text}')")
15   - response.should have_selector("a[href='#{href}']")
16   -end
17   -
18   -Then /^I should be exactly on (.+)$/ do |page_name|
19   - URI.parse(current_url).request_uri.should == path_to(page_name)
20   -end
21   -
22   -Then /^I should be moved to anchor "([^\"]+)"$/ do |anchor|
23   - URI.parse(current_url).fragment.should == anchor
24   -end
25   -
26   -When /^I select "([^\"]*)"$/ do |value|
27   - select(value)
28   -end
29   -
30   -When /^I fill in the following within "([^\"]*)":$/ do |parent, fields|
31   - fields.rows_hash.each do |name, value|
32   - When %{I fill in "#{name}" with "#{value}" within "#{parent}"}
33   - end
34   -end
35   -
36   -When /^I fill in "([^\"]*)" with "([^\"]*)" within "([^\"]*)"$/ do |field, value, parent|
37   - within(parent) do |content|
38   - content.fill_in(field, :with => value)
39   - end
40   -end
41   -
42   -When /^I should see content inside "([^\"]+)"$/ do |selector|
43   - response.should have_selector(selector)
44   -end
45   -
46   -When /^I should not see content inside "([^\"]+)"$/ do |selector|
47   - response.should_not have_selector(selector)
48   -end
features/step_definitions/http_caching_steps.rb
1 1 Then /^the response should be valid for (.+) minutes$/ do |n|
2   - response.headers['Cache-Control'].split(/,\s*/).should include("max-age=#{n.to_i * 60}")
  2 + page.response_headers['Cache-Control'].split(/,\s*/).should include("max-age=#{n.to_i * 60}")
3 3 end
4 4  
5 5 Then /^the cache should be public/ do
6   - response.headers['Cache-Control'].split(/,\s*/).should include("public")
  6 + page.response_headers['Cache-Control'].split(/,\s*/).should include("public")
7 7 end
8 8  
9 9 Then /^there must be no cache at all$/ do
10   - parts = response.headers['Cache-Control'].split(/,\s*/)
  10 + parts = page.response_headers['Cache-Control'].split(/,\s*/)
11 11 parts.should include('must-revalidate')
12 12 parts.should include('max-age=0')
13 13 end
... ...
features/step_definitions/internationalization_steps.rb
  1 +# -*- coding: utf-8 -*-
1 2 def language_to_code(name)
2 3 {
3 4 'Brazilian Portuguese' => 'pt-br',
... ... @@ -35,11 +36,11 @@ Given /^a user accessed in (.*) before$/ do |lang|
35 36 end
36 37  
37 38 Given /^my browser prefers (.*)$/ do |lang|
38   - header 'Accept-Language', language_to_code(lang)
  39 + page.driver.header 'Accept-Language', language_to_code(lang)
39 40 end
40 41  
41 42 Then /^the site should be in (.*)$/ do |lang|
42   - response.should have_selector("html[lang=#{language_to_code(lang)}]")
43   - response.body.should match(/<strong>#{native_name(lang)}<\/strong>/)
  43 + page.should have_selector("html[lang=#{language_to_code(lang)}]")
  44 + page.body.should match(/<strong>#{native_name(lang)}<\/strong>/)
44 45 end
45 46  
... ...
features/step_definitions/invitation_steps.rb
... ... @@ -4,22 +4,17 @@ Given /^I invite email &quot;(.+)&quot; to join community &quot;(.+)&quot;$/ do |email, community|
4 4 click_link('Invite your friends to join 26 Bsslines')
5 5 click_button('Next')
6 6 fill_in('manual_import_addresses', :with => "#{email}")
  7 + click_link('Personalize invitation mail')
7 8 fill_in('mail_template', :with => 'Follow this link <url>')
8 9 click_button("Invite my friends!")
9 10 end
10 11  
11 12 Given /^I invite email "(.+)" to be my friend$/ do |email|
12   - Given "I go to the Control panel"
13 13 click_link('Manage friends')
14 14 click_link('Invite people from my e-mail contacts')
15 15 click_button('Next')
16 16 fill_in('manual_import_addresses', :with => "#{email}")
  17 + click_link('Personalize invitation mail')
17 18 fill_in('mail_template', :with => 'Follow this link <url>')
18 19 click_button("Invite my friends!")
19 20 end
20   -
21   -Given /^there are no pending jobs$/ do
22   - silence_stream(STDOUT) do
23   - Delayed::Worker.new.work_off
24   - end
25   -end
... ...
features/step_definitions/noosfero_steps.rb
1   -def selenium_driver?
2   - self.class.to_s == 'Webrat::SeleniumSession'
3   -end
4   -
5 1 Given /^the following users?$/ do |table|
6 2 # table is a Cucumber::Ast::Table
7 3 table.hashes.each do |item|
... ... @@ -118,7 +114,7 @@ Given /^the following (articles|events|blogs|folders|forums|galleries|uploaded f
118 114 parent = item.delete("parent")
119 115 owner = Profile[owner_identifier]
120 116 home = item.delete("homepage")
121   - language = item.delete("lang")
  117 + language = item.delete("language")
122 118 category = item.delete("category")
123 119 filename = item.delete("filename")
124 120 translation_of_id = nil
... ... @@ -133,24 +129,24 @@ Given /^the following (articles|events|blogs|folders|forums|galleries|uploaded f
133 129 :profile => owner,
134 130 :language => language,
135 131 :translation_of_id => translation_of_id)
136   - if !filename.blank?
137   - item.merge!(:uploaded_data => fixture_file_upload("/files/#{filename}", 'binary/octet-stream'))
138   - end
139   - result = klass.new(item)
140   - if !parent.blank?
141   - result.parent = Article.find_by_name(parent)
142   - end
143   - if category
144   - cat = Category.find_by_slug category
145   - if cat
146   - result.add_category(cat)
147   - end
148   - end
149   - result.save!
150   - if home == 'true'
151   - owner.home_page = result
152   - owner.save!
  132 + if !filename.blank?
  133 + item.merge!(:uploaded_data => fixture_file_upload("/files/#{filename}", 'binary/octet-stream'))
  134 + end
  135 + result = klass.new(item)
  136 + if !parent.blank?
  137 + result.parent = Article.find_by_name(parent)
  138 + end
  139 + if category
  140 + cat = Category.find_by_slug category
  141 + if cat
  142 + result.add_category(cat)
153 143 end
  144 + end
  145 + result.save!
  146 + if home == 'true'
  147 + owner.home_page = result
  148 + owner.save!
  149 + end
154 150 end
155 151 end
156 152  
... ... @@ -289,17 +285,25 @@ Given /^the following price details?$/ do |table|
289 285 end
290 286  
291 287 Given /^I am logged in as "(.+)"$/ do |username|
292   - visit('/account/logout')
293   - visit('/account/login')
294   - fill_in("Username", :with => username)
295   - fill_in("Password", :with => '123456')
296   - click_button("Log in")
297   - # FIXME selenium do not wait page load sometimes
298   - if selenium_driver?
299   - selenium.wait_for_page
300   - end
301   - Then "I should be logged in as \"#{username}\""
302   - @current_user = username
  288 + Given %{I go to logout page}
  289 + And %{I go to login page}
  290 + And %{I fill in "Username" with "#{username}"}
  291 + And %{I fill in "Password" with "123456"}
  292 + When %{I press "Log in"}
  293 + # FIXME:
  294 + # deveria apenas verificar que esta no myprofile do usuario
  295 + # nao conseguir fazer funcionar sem essa reduntancia no capybara
  296 + # acho que e algum problema com o http_referer
  297 + # olhar account_controller#store_location
  298 + And %{I go to #{username}'s control panel}
  299 + Then %{I should be on #{username}'s control panel}
  300 +end
  301 +
  302 +Given /^"([^"]*)" is environment admin$/ do |person|
  303 + user = Profile.find_by_name(person)
  304 + e = Environment.default
  305 +
  306 + e.add_admin(user)
303 307 end
304 308  
305 309 Given /^I am logged in as admin$/ do
... ... @@ -312,10 +316,6 @@ Given /^I am logged in as admin$/ do
312 316 fill_in("Username", :with => user.login)
313 317 fill_in("Password", :with => '123456')
314 318 click_button("Log in")
315   - # FIXME selenium do not wait page load sometimes
316   - if selenium_driver?
317   - selenium.wait_for_page
318   - end
319 319 end
320 320  
321 321 Given /^I am not logged in$/ do
... ... @@ -421,12 +421,16 @@ Given /^enterprise &quot;([^\&quot;]*)&quot; is disabled$/ do |enterprise_name|
421 421 enterprise.save
422 422 end
423 423  
424   -Then /^The page title should contain "(.*)"$/ do |text|
425   - if response.class.to_s == 'Webrat::SeleniumResponse'
426   - response.selenium.text('css=title').should include(text)
427   - else
428   - response.should have_selector("title:contains('#{text}')")
429   - end
  424 +Then /^the page title should be "(.*)"$/ do |text|
  425 + Then %{I should see "#{text}" within "title"}
  426 +end
  427 +
  428 +Then /^The page should contain "(.*)"$/ do |selector|
  429 + page.should have_css("#{selector}")
  430 +end
  431 +
  432 +Then /^The page should not contain "(.*)"$/ do |selector|
  433 + page.should have_no_css("#{selector}")
430 434 end
431 435  
432 436 Given /^the mailbox is empty$/ do
... ... @@ -458,12 +462,14 @@ Given /^the following environment configuration$/ do |table|
458 462 env.save
459 463 end
460 464  
461   -Then /^I should be logged in as "(.+)"$/ do |login|
462   - User.find(session[:user]).login.should == login
  465 +Then /^I should be logged in as "(.+)"$/ do |username|
  466 + When %{I go to #{username}'s control panel}
  467 + Then %{I should be on #{username}'s control panel}
463 468 end
464 469  
465   -Then /^I should not be logged in$/ do
466   - session[:user].nil?
  470 +Then /^I should not be logged in as "(.+)"$/ do |username|
  471 + When %{I go to #{username}'s control panel}
  472 + Then %{I should be on login page}
467 473 end
468 474  
469 475 Given /^the profile "(.+)" has no blocks$/ do |profile|
... ... @@ -586,11 +592,6 @@ Then /^I should be taken to &quot;([^\&quot;]*)&quot; product page$/ do |product_name|
586 592 end
587 593 end
588 594  
589   -When /^I reload and wait for the page$/ do
590   - response.selenium.refresh
591   - selenium.wait_for_page
592   -end
593   -
594 595 Given /^the following enterprise homepages?$/ do |table|
595 596 # table is a Cucumber::Ast::Table
596 597 table.hashes.each do |item|
... ... @@ -602,7 +603,9 @@ Given /^the following enterprise homepages?$/ do |table|
602 603 end
603 604  
604 605 And /^I want to add "([^\"]*)" as cost$/ do |string|
605   - selenium.answer_on_next_prompt(string)
  606 + prompt = page.driver.browser.switch_to.alert
  607 + prompt.send_keys(string)
  608 + prompt.accept
606 609 end
607 610  
608 611 Given /^([^\s]+) (enabled|disabled) translation redirection in (?:his|her) profile$/ do
... ... @@ -658,44 +661,42 @@ end
658 661  
659 662 When /^I search ([^\"]*) for "([^\"]*)"$/ do |asset, query|
660 663 When %{I go to the search #{asset} page}
661   - And %{I fill in "query" with "#{query}"}
  664 + And %{I fill in "search-input" with "#{query}"}
662 665 And %{I press "Search"}
663 666 end
664 667  
665 668 Then /^I should see ([^\"]*)'s product image$/ do |product_name|
666 669 p = Product.find_by_name product_name
667   - path = url_for(p.enterprise.public_profile_url.merge(:controller => 'manage_products', :action => 'show', :id => p, :only_path => true))
668   - response.should have_selector("div[class~=\"zoomable-image\"] a[href=\"http://#{path}\"]")
  670 + path = url_for(p.enterprise.public_profile_url.merge(:controller => 'manage_products', :action => 'show', :id => p))
  671 +
  672 + with_scope('.zoomable-image') do
  673 + page.should have_xpath("a[@href=\"#{path}\"][@class='search-image-pic']")
  674 + end
669 675 end
670 676  
671 677 Then /^I should not see ([^\"]*)'s product image$/ do |product_name|
672 678 p = Product.find_by_name product_name
673   - path = url_for(p.enterprise.public_profile_url.merge(:controller => 'manage_products', :action => 'show', :id => p, :only_path => true))
674   - response.should_not have_selector("div[class~=\"zoomable-image\"] a[href=\"http://#{path}\"]")
  679 + path = url_for(p.enterprise.public_profile_url.merge(:controller => 'manage_products', :action => 'show', :id => p))
  680 +
  681 + with_scope('.zoomable-image') do
  682 + page.should have_no_xpath("a[@href=\"#{path}\"][@class='search-image-pic']")
  683 + end
675 684 end
676 685  
677 686 Then /^I should see ([^\"]*)'s profile image$/ do |name|
678   - response.should have_selector("img[alt=\"#{name}\"]")
  687 + page.should have_xpath("//img[@alt=\"#{name}\"]")
679 688 end
680 689  
681 690 Then /^I should not see ([^\"]*)'s profile image$/ do |name|
682   - response.should_not have_selector("img[alt=\"#{name}\"]")
683   -end
684   -
685   -Then /^I should see ([^\"]*)'s content image$/ do |name|
686   - response.should have_selector("img[alt=\"#{name}\"]")
687   -end
688   -
689   -Then /^I should not see ([^\"]*)'s content image$/ do |name|
690   - response.should_not have_selector("img[alt=\"#{name}\"]")
  691 + page.should have_no_xpath("//img[@alt=\"#{name}\"]")
691 692 end
692 693  
693 694 Then /^I should see ([^\"]*)'s community image$/ do |name|
694   - response.should have_selector("img[alt=\"#{name}\"]")
  695 + page.should have_xpath("//img[@alt=\"#{name}\"]")
695 696 end
696 697  
697 698 Then /^I should not see ([^\"]*)'s community image$/ do |name|
698   - response.should_not have_selector("img[alt=\"#{name}\"]")
  699 + page.should have_no_xpath("//img[@alt=\"#{name}\"]")
699 700 end
700 701  
701 702 Given /^the article "([^\"]*)" is updated by "([^\"]*)"$/ do |article, person|
... ... @@ -754,3 +755,9 @@ When /^wait for the captcha signup time$/ do
754 755 environment = Environment.default
755 756 sleep environment.min_signup_delay + 1
756 757 end
  758 +
  759 +Given /^there are no pending jobs$/ do
  760 + silence_stream(STDOUT) do
  761 + Delayed::Worker.new.work_off
  762 + end
  763 +end
... ...
features/step_definitions/selenium_steps.rb
... ... @@ -1,133 +0,0 @@
1   -require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
2   -
3   -def string_to_element_locator(selector)
4   - if selector.gsub!(/^\./, '')
5   - "css=[class='#{selector}']"
6   - elsif selector.gsub!(/^value[.=]/, '')
7   - "xpath=//input[@value='#{selector}']"
8   - elsif selector.gsub!(/^option=/, '')
9   - "xpath=//option[@value='#{selector}']"
10   - elsif selector.gsub!(/^#/, '')
11   - "css=[id='#{selector}']"
12   - elsif selector.gsub!(/^content=/, '')
13   - "xpath=//*[.='#{selector}']"
14   - elsif selector.gsub!(/^li=/, '')
15   - "xpath=//li[contains(.,'#{selector}')]"
16   - else
17   - selector
18   - end
19   -end
20   -
21   -Then /^the "([^\"]*)" should be visible$/ do |selector|
22   - (selenium.is_element_present(string_to_element_locator(selector)) && selenium.is_visible(string_to_element_locator(selector))).should be_true
23   -end
24   -Then /^the content "([^\"]*)" should be visible$/ do |selector|
25   - selenium.is_visible(string_to_element_locator("content=#{selector}")).should be_true
26   -end
27   -
28   -Then /^the "([^\"]*)" should not be visible$/ do |selector|
29   - (selenium.is_element_present(string_to_element_locator(selector)) && selenium.is_visible(string_to_element_locator(selector))).should be_false
30   -end
31   -Then /^the content "([^\"]*)" should not be visible$/ do |selector|
32   - selenium.is_visible(string_to_element_locator("content=#{selector}")).should be_false
33   -end
34   -
35   -When /^I click "([^\"]*)"$/ do |selector|
36   - selenium.click(string_to_element_locator(selector))
37   -end
38   -
39   -Then /^the "([^\"]*)" button should not be enabled$/ do |text|
40   - selenium.is_editable(string_to_element_locator(text)).should be_false
41   -end
42   -
43   -Then /^the "([^\"]*)" button should be enabled$/ do |text|
44   - selenium.is_editable(string_to_element_locator("value.#{text}")).should be_true
45   -end
46   -
47   -Then /^I should see "([^\"]*)" above of "([^\"]*)"$/ do |above, below|
48   - above_position = selenium.get_element_position_top(string_to_element_locator("li=#{above}"))
49   - below_position = selenium.get_element_position_top(string_to_element_locator("li=#{below}"))
50   - above_position.to_i.should < below_position.to_i
51   -end
52   -
53   -When /^I drag "([^\"]*)" to "([^\"]*)"$/ do |from, to|
54   - selenium.drag_and_drop_to_object(string_to_element_locator("li=#{from}"), string_to_element_locator("li=#{to}"))
55   - selenium.wait_for_ajax
56   -end
57   -
58   -When /^I select "([^\"]*)" and wait for (jquery)$/ do |value, framework|
59   - select(value)
60   - # FIXME ugly hack to make selenium tests waiting to render page
61   - # "select(value, :wait_for => :ajax)" did not effect
62   - selenium.wait_for(:wait_for => :ajax, :javascript_framework => framework)
63   -end
64   -
65   -When /^I select window "([^\"]*)"$/ do |selector|
66   - selenium.select_window(selector)
67   -end
68   -
69   -When /^I fill in "([^\"]*)" within "([^\"]*)" with "([^\"]*)"$/ do |field_label, parent_class, value|
70   - selenium.type("xpath=//*[contains(@class, '#{parent_class}')]//*[@id=//label[contains(., '#{field_label}')]/@for]", value)
71   -end
72   -
73   -When /^I press "([^\"]*)" within "([^\"]*)"$/ do |button_value, selector|
74   - selenium.click("css=#{selector} input[value=#{button_value}]")
75   - selenium.wait_for_page_to_load(10000)
76   -end
77   -
78   -Then /^there should be ([1-9][0-9]*) "([^\"]*)" within "([^\"]*)"$/ do |number, child_class, parent_class|
79   - # Using xpath is the only way to count
80   - response.selenium.get_xpath_count("//*[contains(@class,'#{parent_class}')]//*[contains(@class,'#{child_class}')]").to_i.should be(number.to_i)
81   -end
82   -
83   -Then /^"([^\"]*)" should be (left|right) aligned$/ do |element_class, align|
84   - # Using xpath is the only way to count
85   - response.selenium.get_xpath_count("//*[contains(@class,'#{element_class}') and contains(@style,'float: #{align}')]").to_i.should be(1)
86   -end
87   -
88   -When /^I confirm$/ do
89   - selenium.get_confirmation
90   -end
91   -
92   -When /^I type "([^\"]*)" in TinyMCE field "([^\"]*)"$/ do |value, field_id|
93   - response.selenium.type("dom=document.getElementById('#{field_id}_ifr').contentDocument.body", value)
94   -end
95   -
96   -When /^I refresh the page$/ do
97   - response.selenium.refresh
98   -end
99   -
100   -When /^I click on the logo$/ do
101   - selenium.click("css=h1#site-title a")
102   - selenium.wait_for_page_to_load(10000)
103   -end
104   -
105   -When /^I open (.*)$/ do |url|
106   - selenium.open(URI.join(response.selenium.get_location, url))
107   -end
108   -
109   -Then /^the page title should be "([^"]+)"$/ do |text|
110   - selenium.get_text("//title").should == text
111   -end
112   -
113   -#### Noosfero specific steps ####
114   -
115   -Then /^the select for category "([^\"]*)" should be visible$/ do |name|
116   - sleep 2 # FIXME horrible hack to wait categories selection scolling to right
117   - category = Category.find_by_name(name)
118   - selenium.is_visible(string_to_element_locator("option=#{category.id}")).should be_true
119   -end
120   -
121   -When /^I follow "([^\"]*)" and sleep ([^\"]*) seconds?$/ do |link, time|
122   - click_link(link)
123   - sleep time.to_i
124   -end
125   -
126   -When /^I follow "([^\"]*)" and wait for jquery$/ do |link|
127   - click_link(link)
128   - selenium.wait_for(:wait_for => :ajax, :javascript_framework => framework)
129   -end
130   -
131   -When /^I leave the "([^\"]+)" field$/ do |field|
132   - selenium.fire_event("css=#{field}", "blur")
133   -end
features/step_definitions/web_steps.rb 0 → 100644
... ... @@ -0,0 +1,245 @@
  1 +# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
  2 +# It is recommended to regenerate this file in the future when you upgrade to a
  3 +# newer version of cucumber-rails. Consider adding your own code to a new file
  4 +# instead of editing this one. Cucumber will automatically load all features/**/*.rb
  5 +# files.
  6 +
  7 +
  8 +require 'uri'
  9 +require 'cgi'
  10 +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
  11 +
  12 +module WithinHelpers
  13 + def with_scope(locator)
  14 + locator ? within(locator) { yield } : yield
  15 + end
  16 +end
  17 +World(WithinHelpers)
  18 +
  19 +Given /^(?:|I )am on (.+)$/ do |page_name|
  20 + visit path_to(page_name)
  21 +end
  22 +
  23 +When /^(?:|I )go to (.+)$/ do |page_name|
  24 + visit path_to(page_name)
  25 +end
  26 +
  27 +When /^(?:|I )press "([^"]*)"(?: within "([^"]*)")?$/ do |button, selector|
  28 + with_scope(selector) do
  29 + click_button(button)
  30 + end
  31 +end
  32 +
  33 +When /^(?:|I )follow "([^"]*)"(?: within "([^"]*)")?$/ do |link, selector|
  34 + with_scope(selector) do
  35 + click_link(link)
  36 + end
  37 +end
  38 +
  39 +When /^(?:|I )fill in "([^"]*)" with "([^"]*)"(?: within "([^"]*)")?$/ do |field, value, selector|
  40 + with_scope(selector) do
  41 + fill_in(field, :with => value)
  42 + end
  43 +end
  44 +
  45 +When /^(?:|I )fill in "([^"]*)" for "([^"]*)"(?: within "([^"]*)")?$/ do |value, field, selector|
  46 + with_scope(selector) do
  47 + fill_in(field, :with => value)
  48 + end
  49 +end
  50 +
  51 +# Use this to fill in an entire form with data from a table. Example:
  52 +#
  53 +# When I fill in the following:
  54 +# | Account Number | 5002 |
  55 +# | Expiry date | 2009-11-01 |
  56 +# | Note | Nice guy |
  57 +# | Wants Email? | |
  58 +#
  59 +# TODO: Add support for checkbox, select og option
  60 +# based on naming conventions.
  61 +#
  62 +When /^(?:|I )fill in the following(?: within "([^"]*)")?:$/ do |selector, fields|
  63 + with_scope(selector) do
  64 + fields.rows_hash.each do |name, value|
  65 + When %{I fill in "#{name}" with "#{value}"}
  66 + end
  67 + end
  68 +end
  69 +
  70 +When /^(?:|I )select "([^"]*)" from "([^"]*)"(?: within "([^"]*)")?$/ do |value, field, selector|
  71 + with_scope(selector) do
  72 + select(value, :from => field)
  73 + end
  74 +end
  75 +
  76 +When /^(?:|I )check "([^"]*)"(?: within "([^"]*)")?$/ do |field, selector|
  77 + with_scope(selector) do
  78 + check(field)
  79 + end
  80 +end
  81 +
  82 +When /^(?:|I )uncheck "([^"]*)"(?: within "([^"]*)")?$/ do |field, selector|
  83 + with_scope(selector) do
  84 + uncheck(field)
  85 + end
  86 +end
  87 +
  88 +When /^(?:|I )choose "([^"]*)"(?: within "([^"]*)")?$/ do |field, selector|
  89 + with_scope(selector) do
  90 + choose(field)
  91 + end
  92 +end
  93 +
  94 +When /^(?:|I )attach the file "([^"]*)" to "([^"]*)"(?: within "([^"]*)")?$/ do |path, field, selector|
  95 + with_scope(selector) do
  96 + attach_file(field, path)
  97 + end
  98 +end
  99 +
  100 +Then /^(?:|I )should see JSON:$/ do |expected_json|
  101 + require 'json'
  102 + expected = JSON.pretty_generate(JSON.parse(expected_json))
  103 + actual = JSON.pretty_generate(JSON.parse(response.body))
  104 + expected.should == actual
  105 +end
  106 +
  107 +Then /^(?:|I )should see "([^"]*)"(?: within "([^"]*)")?$/ do |text, selector|
  108 + with_scope(selector) do
  109 + if page.respond_to? :should
  110 + page.should have_content(text)
  111 + else
  112 + assert page.has_content?(text)
  113 + end
  114 + end
  115 +end
  116 +
  117 +
  118 +Then /^(?:|I )should see "([^"]*)" within any "([^"]*)"?$/ do |text, selector|
  119 + if page.respond_to? :should
  120 + page.should have_css(selector, :content => text)
  121 + else
  122 + assert page.has_css?(selector, :content => text)
  123 + end
  124 +end
  125 +
  126 +Then /^(?:|I )should see \/([^\/]*)\/(?: within "([^"]*)")?$/ do |regexp, selector|
  127 + regexp = Regexp.new(regexp)
  128 + with_scope(selector) do
  129 + if page.respond_to? :should
  130 + page.should have_xpath('//*', :text => regexp)
  131 + else
  132 + assert page.has_xpath?('//*', :text => regexp)
  133 + end
  134 + end
  135 +end
  136 +
  137 +Then /^(?:|I )should not see "([^"]*)"(?: within "([^"]*)")?$/ do |text, selector|
  138 + with_scope(selector) do
  139 + if page.respond_to? :should
  140 + page.should have_no_content(text)
  141 + else
  142 + assert page.has_no_content?(text)
  143 + end
  144 + end
  145 +end
  146 +
  147 +Then /^(?:|I )should not see \/([^\/]*)\/(?: within "([^"]*)")?$/ do |regexp, selector|
  148 + regexp = Regexp.new(regexp)
  149 + with_scope(selector) do
  150 + if page.respond_to? :should
  151 + page.should have_no_xpath('//*', :text => regexp)
  152 + else
  153 + assert page.has_no_xpath?('//*', :text => regexp)
  154 + end
  155 + end
  156 +end
  157 +
  158 +Then /^the "([^"]*)" field(?: within "([^"]*)")? should contain "([^"]*)"$/ do |field, selector, value|
  159 + with_scope(selector) do
  160 + field = find_field(field)
  161 + field_value = (field.tag_name == 'textarea') ? field.text : field.value
  162 + if field_value.respond_to? :should
  163 + field_value.should =~ /#{value}/
  164 + else
  165 + assert_match(/#{value}/, field_value)
  166 + end
  167 + end
  168 +end
  169 +
  170 +Then /^the "([^"]*)" field(?: within "([^"]*)")? should not contain "([^"]*)"$/ do |field, selector, value|
  171 + with_scope(selector) do
  172 + field = find_field(field)
  173 + field_value = (field.tag_name == 'textarea') ? field.text : field.value
  174 + if field_value.respond_to? :should_not
  175 + field_value.should_not =~ /#{value}/
  176 + else
  177 + assert_no_match(/#{value}/, field_value)
  178 + end
  179 + end
  180 +end
  181 +
  182 +Then /^the "([^"]*)" checkbox(?: within "([^"]*)")? should be checked$/ do |label, selector|
  183 + with_scope(selector) do
  184 + field_checked = find_field(label)['checked']
  185 + if field_checked.respond_to? :should
  186 + field_checked.should be_true
  187 + else
  188 + assert field_checked
  189 + end
  190 + end
  191 +end
  192 +
  193 +Then /^the "([^"]*)" checkbox(?: within "([^"]*)")? should not be checked$/ do |label, selector|
  194 + with_scope(selector) do
  195 + field_checked = find_field(label)['checked']
  196 + if field_checked.respond_to? :should
  197 + field_checked.should be_false
  198 + else
  199 + assert !field_checked
  200 + end
  201 + end
  202 +end
  203 +
  204 +Then /^(?:|I )should be on (.+)$/ do |page_name|
  205 + current_path = URI.parse(current_url).path
  206 + if current_path.respond_to? :should
  207 + current_path.should == path_to(page_name)
  208 + else
  209 + assert_equal path_to(page_name), current_path
  210 + end
  211 +end
  212 +
  213 +Then /^(?:|I )should be exactly on (.+)$/ do |page_name|
  214 + uri = URI.parse(current_url)
  215 + path_with_params = "#{uri.path}?#{uri.query}"
  216 + if path_with_params.respond_to? :should
  217 + path_with_params.should == path_to(page_name)
  218 + else
  219 + assert_equal path_to(page_name), path_with_params
  220 + end
  221 +end
  222 +
  223 +Then /^(?:|I )should have the following query string:$/ do |expected_pairs|
  224 + query = URI.parse(current_url).query
  225 + actual_params = query ? CGI.parse(query) : {}
  226 + expected_params = {}
  227 + expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')}
  228 +
  229 + if actual_params.respond_to? :should
  230 + actual_params.should == expected_params
  231 + else
  232 + assert_equal expected_params, actual_params
  233 + end
  234 +end
  235 +
  236 +Then /^show me the page$/ do
  237 + save_and_open_page
  238 +end
  239 +
  240 +Then /^display "([^\"]*)"$/ do |element|
  241 + # Need this " && false " work-around because this version of selenium doesn't
  242 + # have the execute_script method which does not returns the script. Checout:
  243 + # * https://github.com/jnicklas/capybara/issues/76
  244 + evaluate_script("jQuery('#{element}').show() && false;")
  245 +end
... ...
features/step_definitions/webrat_steps.rb
... ... @@ -1,239 +0,0 @@
1   -# IMPORTANT: This file was generated by Cucumber 0.4.0
2   -# Edit at your own peril - it's recommended to regenerate this file
3   -# in the future when you upgrade to a newer version of Cucumber.
4   -# Consider adding your own code to a new file instead of editing this one.
5   -
6   -require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
7   -
8   -# Commonly used webrat steps
9   -# http://github.com/brynary/webrat
10   -
11   -Given /^I am on (.+)$/ do |page_name|
12   - visit path_to(page_name)
13   -end
14   -
15   -When /^I go to (.+)$/ do |page_name|
16   - visit path_to(page_name)
17   -end
18   -
19   -When /^I visit "([^\"]*)" and wait$/ do |page_name|
20   - visit path_to(page_name)
21   - selenium.wait_for_page_to_load(10000)
22   -# selenium.wait_for_page
23   -end
24   -
25   -When /^I press "([^\"]*)"$/ do |button|
26   - click_button(button)
27   -end
28   -
29   -When /^I press "([^\"]*)" and wait$/ do |button|
30   - click_button(button)
31   - selenium.wait_for_page_to_load(10000)
32   -end
33   -
34   -When /^I follow "([^\"]*)"$/ do |link|
35   - click_link(link)
36   -end
37   -
38   -When /^I follow "([^\"]*)" and wait$/ do |link|
39   - click_link(link)
40   - selenium.wait_for_page_to_load(10000)
41   -end
42   -
43   -When /^I follow "([^\"]*)" and wait until "([^\"]*)" is present$/ do |link, element|
44   - click_link(link)
45   - selenium.wait_for_element(string_to_element_locator(element))
46   -end
47   -
48   -When /^I follow "([^\"]*)" within "([^\"]*)"$/ do |link, parent|
49   - click_link_within(parent, link)
50   -end
51   -
52   -When /^I follow "([^\"]*)" within "([^\"]*)" and wait$/ do |link, parent|
53   - click_link_within(parent, link)
54   - selenium.wait_for_page_to_load(10000)
55   -end
56   -
57   -When /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value|
58   - if response.class.to_s == 'Webrat::SeleniumResponse'
59   - response.selenium.type("//*[@id=//label[contains(., '#{field}')]/@for]", value)
60   - else
61   - fill_in(field, :with => value)
62   - end
63   -end
64   -
65   -When /^I fill in "([^\"]*)" for "([^\"]*)"$/ do |value, field|
66   - fill_in(field, :with => value)
67   -end
68   -
69   -# Use this to fill in an entire form with data from a table. Example:
70   -#
71   -# When I fill in the following:
72   -# | Account Number | 5002 |
73   -# | Expiry date | 2009-11-01 |
74   -# | Note | Nice guy |
75   -# | Wants Email? | |
76   -#
77   -# TODO: Add support for checkbox, select og option
78   -# based on naming conventions.
79   -#
80   -When /^I fill in the following:$/ do |fields|
81   - fields.rows_hash.each do |name, value|
82   - When %{I fill in "#{name}" with "#{value}"}
83   - end
84   -end
85   -
86   -When /^I select "([^\"]*)" from "([^\"]*)"$/ do |value, field|
87   - if response.class.to_s == 'Webrat::SeleniumResponse'
88   - response.selenium.select("//*[@id=//label[contains(., '#{field}')]/@for]", value)
89   - else
90   - select(value, :from => field)
91   - end
92   -end
93   -
94   -# Use this step in conjunction with Rail's datetime_select helper. For example:
95   -# When I select "December 25, 2008 10:00" as the date and time
96   -When /^I select "([^\"]*)" as the date and time$/ do |time|
97   - select_datetime(time)
98   -end
99   -
100   -# Use this step when using multiple datetime_select helpers on a page or
101   -# you want to specify which datetime to select. Given the following view:
102   -# <%= f.label :preferred %><br />
103   -# <%= f.datetime_select :preferred %>
104   -# <%= f.label :alternative %><br />
105   -# <%= f.datetime_select :alternative %>
106   -# The following steps would fill out the form:
107   -# When I select "November 23, 2004 11:20" as the "Preferred" date and time
108   -# And I select "November 25, 2004 10:30" as the "Alternative" date and time
109   -When /^I select "([^\"]*)" as the "([^\"]*)" date and time$/ do |datetime, datetime_label|
110   - select_datetime(datetime, :from => datetime_label)
111   -end
112   -
113   -# Use this step in conjunction with Rail's time_select helper. For example:
114   -# When I select "2:20PM" as the time
115   -# Note: Rail's default time helper provides 24-hour time-- not 12 hour time. Webrat
116   -# will convert the 2:20PM to 14:20 and then select it.
117   -When /^I select "([^\"]*)" as the time$/ do |time|
118   - select_time(time)
119   -end
120   -
121   -# Use this step when using multiple time_select helpers on a page or you want to
122   -# specify the name of the time on the form. For example:
123   -# When I select "7:30AM" as the "Gym" time
124   -When /^I select "([^\"]*)" as the "([^\"]*)" time$/ do |time, time_label|
125   - select_time(time, :from => time_label)
126   -end
127   -
128   -# Use this step in conjunction with Rail's date_select helper. For example:
129   -# When I select "February 20, 1981" as the date
130   -When /^I select "([^\"]*)" as the date$/ do |date|
131   - select_date(date)
132   -end
133   -
134   -# Use this step when using multiple date_select helpers on one page or
135   -# you want to specify the name of the date on the form. For example:
136   -# When I select "April 26, 1982" as the "Date of Birth" date
137   -When /^I select "([^\"]*)" as the "([^\"]*)" date$/ do |date, date_label|
138   - select_date(date, :from => date_label)
139   -end
140   -
141   -When /^I check "([^\"]*)"$/ do |field|
142   - check(field)
143   -end
144   -
145   -When /^I uncheck "([^\"]*)"$/ do |field|
146   - uncheck(field)
147   -end
148   -
149   -When /^I choose "([^\"]*)"$/ do |field|
150   - choose(field)
151   -end
152   -
153   -When /^I attach the file at "([^\"]*)" to "([^\"]*)"$/ do |path, field|
154   - attach_file(field, path)
155   -end
156   -
157   -Then /^I should see "([^\"]*)"$/ do |text|
158   - response.should contain(text)
159   -end
160   -
161   -Then /^I should see "([^\"]*)" within "([^\"]*)"$/ do |text, selector|
162   - if response.class.to_s == 'Webrat::SeleniumResponse'
163   - response.selenium.text('css=' + selector).should include(text)
164   - else
165   - within(selector) do |content|
166   - content.should contain(text)
167   - end
168   - end
169   -end
170   -
171   -Then /^I should see \/([^\/]*)\/$/ do |regexp|
172   - regexp = Regexp.new(regexp)
173   - response.should contain(regexp)
174   -end
175   -
176   -Then /^I should see \/([^\/]*)\/ within "([^\"]*)"$/ do |regexp, selector|
177   - within(selector) do |content|
178   - regexp = Regexp.new(regexp)
179   - content.should contain(regexp)
180   - end
181   -end
182   -
183   -Then /^I should not see "([^\"]*)"$/ do |text|
184   - response.should_not contain(text)
185   -end
186   -
187   -Then /^I should not see "([^\"]*)" within "([^\"]*)"$/ do |text, selector|
188   - if response.class.to_s == 'Webrat::SeleniumResponse'
189   - response.selenium.text('css=' + selector).should_not include(text)
190   - else
191   - within(selector) do |content|
192   - content.should_not contain(text)
193   - end
194   - end
195   -end
196   -
197   -Then /^I should not see \/([^\/]*)\/$/ do |regexp|
198   - regexp = Regexp.new(regexp)
199   - response.should_not contain(regexp)
200   -end
201   -
202   -Then /^I should not see \/([^\/]*)\/ within "([^\"]*)"$/ do |regexp, selector|
203   - within(selector) do |content|
204   - regexp = Regexp.new(regexp)
205   - content.should_not contain(regexp)
206   - end
207   -end
208   -
209   -Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value|
210   - if response.class.to_s == 'Webrat::SeleniumResponse'
211   - response.selenium.get_value("//*[@id=//label[contains(., '#{field}')]/@for]").should match(value)
212   - else
213   - field_labeled(field).value.should =~ /#{value}/
214   - end
215   -end
216   -
217   -Then /^the "([^\"]*)" field should not contain "([^\"]*)"$/ do |field, value|
218   - field_labeled(field).value.should_not =~ /#{value}/
219   -end
220   -
221   -Then /^the "([^\"]*)" checkbox should be checked$/ do |label|
222   - field_labeled(label).should be_checked
223   -end
224   -
225   -Then /^the "([^\"]*)" checkbox should not be checked$/ do |label|
226   - field_labeled(label).should_not be_checked
227   -end
228   -
229   -Then /^I should be on (.+)$/ do |page_name|
230   - if response.class.to_s == 'Webrat::SeleniumResponse'
231   - URI.parse(response.selenium.get_location).path.should == path_to(page_name)
232   - else
233   - URI.parse(current_url).path.should == path_to(page_name)
234   - end
235   -end
236   -
237   -Then /^show me the page$/ do
238   - save_and_open_page
239   -end
features/suggest_article.feature
... ... @@ -17,15 +17,15 @@ Feature: suggest article
17 17 | target | article_name | article_body | name | email |
18 18 | sample-community | A suggested article | this is an article about whales | jose | jose@example.org |
19 19 When I am logged in as "joaosilva"
20   - And I go to Sample Community's control panel
  20 + And I go to sample-community's control panel
21 21 And I follow "Process requests"
22 22 And I should see "suggested the publication of the article"
23 23 Then I should see "Highlight this article" within ".task_box"
24 24  
25   - @selenium
  25 + @selenium-fixme
26 26 Scenario: an article is suggested and the admin approve it
27 27 Given I am on Sample Community's blog
28   - And I follow "Suggest an article" and wait
  28 + And I follow "Suggest an article"
29 29 And I fill in "Title" with "Suggestion"
30 30 And I fill in "Your name" with "Some Guy"
31 31 And I fill in "Email" with "someguy@somewhere.com"
... ...
features/support/env.rb
1   -# IMPORTANT: This file was generated by Cucumber 0.4.0
2   -# Edit at your own peril - it's recommended to regenerate this file
3   -# in the future when you upgrade to a newer version of Cucumber.
4   -# Consider adding your own code to a new file instead of editing this one.
  1 +# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
  2 +# It is recommended to regenerate this file in the future when you upgrade to a
  3 +# newer version of cucumber-rails. Consider adding your own code to a new file
  4 +# instead of editing this one. Cucumber will automatically load all features/**/*.rb
  5 +# files.
5 6  
6   -# Sets up the Rails environment for Cucumber
7 7 ENV["RAILS_ENV"] ||= "cucumber"
8   -
9   -# Start/stop Solr
10   -if not $cucumber_env_loaded
11   - abort unless system 'rake solr:start'
12   - at_exit { system 'rake solr:stop' }
13   - $cucumber_env_loaded = true
14   -end
  8 +abort unless system 'rake -s solr:start'
  9 +at_exit { system 'rake -s solr:stop' }
15 10  
16 11 require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
17   -require 'cucumber/rails/world'
18   -
19   -# If you set this to true, each scenario will run in a database transaction.
20   -# You can still turn off transactions on a per-scenario basis, simply tagging
21   -# a feature or scenario with the @no-txn tag.
22   -#
23   -# If you set this to false, transactions will be off for all scenarios,
24   -# regardless of whether you use @no-txn or not.
25   -#
26   -# Beware that turning transactions off will leave data in your database
27   -# after each scenario, which can lead to hard-to-debug failures in
28   -# subsequent scenarios. If you do this, we recommend you create a Before
29   -# block that will explicitly put your database in a known state.
30   -Cucumber::Rails::World.use_transactional_fixtures = true
31 12  
32   -# If you set this to false, any error raised from within your app will bubble
  13 +require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
  14 +require 'cucumber/rails/world'
  15 +require 'cucumber/rails/active_record'
  16 +require 'cucumber/web/tableish'
  17 +
  18 +require 'capybara/rails'
  19 +require 'capybara/cucumber'
  20 +require 'capybara/session'
  21 +# require 'cucumber/rails/capybara_javascript_emulation' # Lets you click links with onclick javascript handlers without using @culerity or @javascript
  22 +# Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In
  23 +# order to ease the transition to Capybara we set the default here. If you'd
  24 +# prefer to use XPath just remove this line and adjust any selectors in your
  25 +# steps to use the XPath syntax.
  26 +Capybara.default_selector = :css
  27 +Capybara.ignore_hidden_elements = true
  28 +
  29 +# If you set this to false, any error raised from within your app will bubble
33 30 # up to your step definition and out to cucumber unless you catch it somewhere
34 31 # on the way. You can make Rails rescue errors and render error pages on a
35 32 # per-scenario basis by tagging a scenario or feature with the @allow-rescue tag.
... ... @@ -40,16 +37,25 @@ Cucumber::Rails::World.use_transactional_fixtures = true
40 37 # of your scenarios, as this makes it hard to discover errors in your application.
41 38 ActionController::Base.allow_rescue = false
42 39  
43   -require 'cucumber'
44   -# Comment out the next line if you don't want Cucumber Unicode support
45   -require 'cucumber/formatter/unicode'
46   -require 'cucumber/webrat/element_locator' # Lets you do table.diff!(element_at('#my_table_or_dl_or_ul_or_ol').to_table)
47   -require 'cucumber/rails/rspec'
48   -
49   -require 'webrat'
50   -require 'webrat/core/matchers'
51   -Webrat.configure do |config|
52   - config.mode = :rails
53   - config.open_error_files = false # Set to true if you want error pages to pop up in the browser
  40 +# If you set this to true, each scenario will run in a database transaction.
  41 +# You can still turn off transactions on a per-scenario basis, simply tagging
  42 +# a feature or scenario with the @no-txn tag. If you are using Capybara,
  43 +# tagging with @culerity or @javascript will also turn transactions off.
  44 +#
  45 +# If you set this to false, transactions will be off for all scenarios,
  46 +# regardless of whether you use @no-txn or not.
  47 +#
  48 +# Beware that turning transactions off will leave data in your database
  49 +# after each scenario, which can lead to hard-to-debug failures in
  50 +# subsequent scenarios. If you do this, we recommend you create a Before
  51 +# block that will explicitly put your database in a known state.
  52 +Cucumber::Rails::World.use_transactional_fixtures = true
  53 +# How to clean your database when transactions are turned off. See
  54 +# http://github.com/bmabey/database_cleaner for more info.
  55 +
  56 +Before do
  57 + Fixtures.reset_cache
  58 + fixtures_folder = File.join(RAILS_ROOT, 'test', 'fixtures')
  59 + fixtures = ['environments', 'roles']
  60 + Fixtures.create_fixtures(fixtures_folder, fixtures)
54 61 end
55   -
... ...
features/support/fixtures.rb
... ... @@ -1,6 +0,0 @@
1   -# set the very basic fixtures for Noosfero
2   -Fixtures.reset_cache
3   -fixtures_folder = File.join(RAILS_ROOT, 'test', 'fixtures')
4   -fixtures = ['environments', 'roles']
5   -Fixtures.create_fixtures(fixtures_folder, fixtures)
6   -
features/support/paths.rb
... ... @@ -3,7 +3,7 @@ module NavigationHelpers
3 3 #
4 4 # When /^I go to (.+)$/ do |page_name|
5 5 #
6   - # step definition in webrat_steps.rb
  6 + # step definition in web_steps.rb
7 7 #
8 8 def path_to(page_name)
9 9 case page_name
... ... @@ -11,6 +11,12 @@ module NavigationHelpers
11 11 when /the homepage/
12 12 '/'
13 13  
  14 + # Add more mappings here.
  15 + # Here is an example that pulls values out of the Regexp:
  16 + #
  17 + # when /^(.*)'s profile page$/i
  18 + # user_profile_path(User.find_by_login($1))
  19 +
14 20 when /^\//
15 21 page_name
16 22  
... ... @@ -31,43 +37,37 @@ module NavigationHelpers
31 37 "/myprofile/#{$2}/profile_design/edit/#{block.id}"
32 38  
33 39 when /^(.*)'s homepage$/
34   - '/%s' % Profile.find_by_name($1).identifier
  40 + '/' + profile_identifier($1)
35 41  
36 42 when /^(.*)'s blog$/
37   - '/%s/blog' % Profile.find_by_name($1).identifier
  43 + '/%s/blog' % profile_identifier($1)
38 44  
39 45 when /^(.*)'s (.+) creation$/
40   - '/myprofile/%s/cms/new?type=%s' % [Profile.find_by_name($1).identifier,$2]
  46 + '/myprofile/%s/cms/new?type=%s' % [profile_identifier($1),$2]
41 47  
42 48 when /^(.*)'s sitemap/
43   - '/profile/%s/sitemap' % Profile.find_by_name($1).identifier
  49 + '/profile/%s/sitemap' % profile_identifier($1)
44 50  
45 51 when /^(.*)'s profile$/
46   - '/profile/%s' % Profile.find_by_name($1).identifier
47   -
48   - when /^the profile$/
49   - '/profile/%s' % User.find_by_id(session[:user]).login
  52 + '/profile/' + profile_identifier($1)
50 53  
51 54 when /^(.*)'s join page/
52   - '/profile/%s/join' % Profile.find_by_name($1).identifier
  55 + '/profile/%s/join' % profile_identifier($1)
53 56  
54 57 when /^(.*)'s leave page/
55   - '/profile/%s/leave' % Profile.find_by_name($1).identifier
56   -
57   - when /^(.*)'s profile editor$/
58   - "myprofile/manuel/profile_editor/edit"
  58 + '/profile/%s/leave' % profile_identifier($1)
59 59  
60 60 when /^login page$/
61 61 '/account/login'
62 62  
  63 + when /^logout page$/
  64 + '/account/logout'
  65 +
63 66 when /^signup page$/
64 67 '/account/signup'
65 68  
66 69 when /^(.*)'s control panel$/
67   - '/myprofile/%s' % Profile.find_by_name($1).identifier
68   -
69   - when /^the Control panel$/
70   - '/myprofile/%s' % User.find_by_id(session[:user]).login
  70 + '/myprofile/' + profile_identifier($1)
71 71  
72 72 when /the environment control panel/
73 73 '/admin'
... ... @@ -79,7 +79,7 @@ module NavigationHelpers
79 79 '/search/%s' % $1
80 80  
81 81 when /^(.+)'s cms/
82   - '/myprofile/%s/cms' % Profile.find_by_name($1).identifier
  82 + '/myprofile/%s/cms' % profile_identifier($1)
83 83  
84 84 when /^"(.+)" edit page/
85 85 article = Article.find_by_name($1)
... ... @@ -89,7 +89,7 @@ module NavigationHelpers
89 89 '/myprofile/%s/profile_members' % Profile.find_by_name($1).identifier
90 90  
91 91 when /^(.+)'s new product page/
92   - '/myprofile/%s/manage_products/new' % Profile.find_by_name($1).identifier
  92 + '/myprofile/%s/manage_products/new' % profile_identifier($1)
93 93  
94 94 when /^(.+)'s page of product (.*)$/
95 95 enterprise = Profile.find_by_name($1)
... ... @@ -97,7 +97,7 @@ module NavigationHelpers
97 97 '/myprofile/%s/manage_products/show/%s' % [enterprise.identifier, product.id]
98 98  
99 99 when /^(.*)'s products page$/
100   - '/catalog/%s' % Profile.find_by_name($1).identifier
  100 + '/catalog/%s' % $1
101 101  
102 102 when /^chat$/
103 103 '/chat'
... ... @@ -109,19 +109,24 @@ module NavigationHelpers
109 109 '/account/user_data'
110 110  
111 111 when /^(.+)'s members page/
112   - '/profile/%s/members' % Profile.find_by_name($1).identifier
113   -
114   - # Add more mappings here.
115   - # Here is a more fancy example:
116   - #
117   - # when /^(.*)'s profile page$/i
118   - # user_profile_path(User.find_by_login($1))
  112 + '/profile/%s/members' % profile_identifier($1)
119 113  
120 114 else
121   - raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
122   - "Now, go and add a mapping in #{__FILE__}"
  115 + begin
  116 + page_name =~ /the (.*) page/
  117 + path_components = $1.split(/\s+/)
  118 + self.send(path_components.push('path').join('_').to_sym)
  119 + rescue Object => e
  120 + raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
  121 + "Now, go and add a mapping in #{__FILE__}"
  122 + end
123 123 end
124 124 end
  125 +
  126 + def profile_identifier(field)
  127 + profile = Profile.find_by_name(field) || Profile.find_by_identifier(field)
  128 + profile.identifier
  129 + end
125 130 end
126 131  
127 132 World(NavigationHelpers)
... ...
features/support/selenium.rb
1   -Webrat.configure do |config|
2   - config.mode = :selenium
3   - config.application_environment = :cucumber
4   - config.selenium_browser_startup_timeout = 30000
5   -end
  1 +require 'database_cleaner'
  2 +require 'database_cleaner/cucumber'
6 3  
7 4 Cucumber::Rails::World.use_transactional_fixtures = false
8 5  
9   -require 'database_cleaner'
10   -require 'database_cleaner/cucumber'
  6 +Capybara.default_driver = :selenium
  7 +Capybara.register_driver :selenium do |app|
  8 + Capybara::Selenium::Driver.new(app, :browser => :firefox)
  9 +end
11 10  
  11 +# FIXME: 'DELETE FROM ...' is being ran 3x - see cucumber.log
12 12 DatabaseCleaner.clean_with :truncation
13 13 DatabaseCleaner.strategy = :truncation
14 14  
15 15 Before do
16   - Fixtures.reset_cache
17   - fixtures_folder = File.join(RAILS_ROOT, 'test', 'fixtures')
18   - fixtures = ['environments', 'roles']
19   - Fixtures.create_fixtures(fixtures_folder, fixtures)
20   - ENV['LANG'] = 'C'
21 16 DatabaseCleaner.start
22 17 end
23 18  
  19 +Before('@ignore-hidden-elements') do
  20 + Capybara.ignore_hidden_elements = true
  21 +end
  22 +
  23 +Capybara.default_wait_time = 30
  24 +
24 25 After do
25   - sleep 2
26 26 DatabaseCleaner.clean
27 27 end
  28 +
  29 +World(Capybara)
... ...
features/support/version_check.rb
... ... @@ -1,29 +0,0 @@
1   -if Cucumber::VERSION::STRING != '0.4.0'
2   -warning = <<-WARNING
3   -(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
4   -
5   - (::) R O T T E N C U C U M B E R A L E R T (::)
6   -
7   -Your #{__FILE__.gsub(/version_check.rb$/, 'env.rb')} file was generated with Cucumber 0.4.0,
8   -but you seem to be running Cucumber #{Cucumber::VERSION::STRING}. If you're running an older
9   -version than #{Cucumber::VERSION::STRING}, just upgrade your gem. If you're running a newer
10   -version than #{Cucumber::VERSION::STRING} you should:
11   -
12   - 1) Read http://wiki.github.com/aslakhellesoy/cucumber/upgrading
13   -
14   - 2) Regenerate your cucumber environment with the following command:
15   -
16   - ruby script/generate cucumber
17   -
18   -If you get prompted to replace a file, hit 'd' to see the difference.
19   -When you're sure you have captured any personal edits, confirm that you
20   -want to overwrite #{__FILE__.gsub(/version_check.rb$/, 'env.rb')} by pressing 'y'. Then reapply any
21   -personal changes that may have been overwritten.
22   -
23   -This message will then self destruct.
24   -
25   -(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
26   -WARNING
27   -warn(warning)
28   -at_exit {warn(warning)}
29   -end
30 0 \ No newline at end of file
features/unblock_button.feature
... ... @@ -15,7 +15,7 @@ Feature: unblock button
15 15 Scenario: the environment administrator unblocks a blocked enterprise
16 16 Given I am logged in as admin
17 17 And enterprise "Sample Enterprise" is blocked
18   - And I am on Sample Enterprise's homepage
  18 + And I am on sample-enterprise's homepage
19 19 When I follow "Unblock"
20 20 Then I should not see "Unblock"
21 21  
... ... @@ -25,10 +25,10 @@ Feature: unblock button
25 25 | joaosilva | Joao Silva |
26 26 And I am logged in as "joaosilva"
27 27 And enterprise "Sample Enterprise" is blocked
28   - When I am on Sample Enterprise's homepage
  28 + When I am on sample-enterprise's homepage
29 29 Then I should not see "Unblock"
30 30  
31 31 Scenario: a not blocked enterprise should not show "Unblock" button
32 32 Given I am logged in as admin
33   - When I am on Sample Enterprise's homepage
  33 + When I am on sample-enterprise's homepage
34 34 Then I should not see "Unblock"
... ...
features/upload_files.feature
... ... @@ -16,7 +16,7 @@ Feature: upload files
16 16 And the following galleries
17 17 | owner | name |
18 18 | sample-community | Gallery test |
19   - And I go to Sample Community's profile
  19 + And I go to sample-community's profile
20 20 And I follow "0 pictures"
21 21 And I should see "Upload files"
22 22  
... ... @@ -28,7 +28,7 @@ Feature: upload files
28 28 And the following galleries
29 29 | owner | name |
30 30 | sample-enterprise | Gallery test |
31   - And I go to Sample Enterprise's profile
  31 + And I go to sample-enterprise's profile
32 32 And I follow "0 pictures"
33 33 And I should see "Upload files"
34 34  
... ...
lib/noosfero.rb
  1 +# -*- coding: utf-8 -*-
1 2 require 'fast_gettext'
2 3  
3 4 module Noosfero
... ... @@ -78,13 +79,14 @@ module Noosfero
78 79 end
79 80  
80 81 def self.url_options
81   - if ENV['RAILS_ENV'] == 'development'
  82 + case ENV['RAILS_ENV']
  83 + when 'development'
82 84 development_url_options
83   - elsif ENV['RAILS_ENV'] == 'cucumber'
84   - Webrat.configuration.mode == :rails ? { :host => '' } : { :port => Webrat.configuration.application_port }
85   - else
86   - {}
87   - end
  85 + when 'cucumber'
  86 + if Capybara.current_driver == :selenium
  87 + { :host => Capybara.current_session.driver.rack_server.host, :port => Capybara.current_session.driver.rack_server.port }
  88 + end
  89 + end || { }
88 90 end
89 91  
90 92 def self.development_url_options
... ...
lib/tasks/cucumber.rake
1   -# This file was generated by
2   -$LOAD_PATH.unshift(RAILS_ROOT + '/vendor/plugins/cucumber/lib') if File.directory?(RAILS_ROOT + '/vendor/plugins/cucumber/lib')
  1 +# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
  2 +# It is recommended to regenerate this file in the future when you upgrade to a
  3 +# newer version of cucumber-rails. Consider adding your own code to a new file
  4 +# instead of editing this one. Cucumber will automatically load all features/**/*.rb
  5 +# files.
3 6  
4   -unless ARGV.any? {|a| a =~ /^gems/}
  7 +
  8 +unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks
  9 +
  10 +vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
  11 +$LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil?
5 12  
6 13 begin
7 14 require 'cucumber/rake/task'
8 15  
9   - # Use vendored cucumber binary if possible. If it's not vendored,
10   - # Cucumber::Rake::Task will automatically use installed gem's cucumber binary
11   - vendored_cucumber_binary = Dir["#{RAILS_ROOT}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
12   -
13 16 namespace :cucumber do
14 17 Cucumber::Rake::Task.new({:ok => 'db:test:prepare'}, 'Run features that should pass') do |t|
15   - t.binary = vendored_cucumber_binary
  18 + t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
16 19 t.fork = true # You may get faster startup if you set this to false
17   - t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'progress'}"
  20 + t.profile = 'default'
18 21 end
19 22  
20 23 Cucumber::Rake::Task.new({:wip => 'db:test:prepare'}, 'Run features that are being worked on') do |t|
21   - t.binary = vendored_cucumber_binary
  24 + t.binary = vendored_cucumber_bin
22 25 t.fork = true # You may get faster startup if you set this to false
23   - t.cucumber_opts = "--color --tags @wip:2 --wip --format #{ENV['CUCUMBER_FORMAT'] || 'progress'}"
  26 + t.profile = 'wip'
24 27 end
25 28  
26   - Cucumber::Rake::Task.new({:selenium => 'db:test:prepare'}, 'Run features with selenium') do |t|
27   - t.binary = vendored_cucumber_binary
  29 + Cucumber::Rake::Task.new({:rerun => 'db:test:prepare'}, 'Record failing features and run only them if any exist') do |t|
  30 + t.binary = vendored_cucumber_bin
28 31 t.fork = true # You may get faster startup if you set this to false
29   - t.cucumber_opts = "--color -p selenium --format #{ENV['CUCUMBER_FORMAT'] || 'pretty'}"
  32 + t.profile = 'rerun'
30 33 end
31 34  
32 35 desc 'Run all features'
33 36 task :all => [:ok, :wip]
34 37 end
35 38 desc 'Alias for cucumber:ok'
36   - task :cucumber => ['cucumber:ok']
  39 + task :cucumber => 'cucumber:ok'
  40 +
  41 + task :default => :cucumber
37 42  
38 43 task :features => :cucumber do
39 44 STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***"
... ...
lib/tasks/plugins_tests.rake
... ... @@ -31,7 +31,7 @@ def run_cucumber(name, profile, files_glob)
31 31 if files.empty?
32 32 puts "I: no tests to run #{name}"
33 33 else
34   - sh 'xvfb-run', 'ruby', '-S', 'cucumber', '--profile', profile, '--format', ENV['CUCUMBER_FORMAT'] || 'progress' , *features
  34 + sh 'xvfb-run', 'ruby', '-S', 'cucumber', '--profile', profile.to_s, '--format', ENV['CUCUMBER_FORMAT'] || 'progress' , *files
35 35 end
36 36 end
37 37  
... ... @@ -42,14 +42,16 @@ def plugin_test_task(name, plugin, files_glob)
42 42 end
43 43 end
44 44  
45   -def plugin_cucumber_task(plugin, files_glob)
46   - task :cucumber => 'db:test:plugins:prepare' do |t|
  45 +def plugin_cucumber_task(name, plugin, files_glob)
  46 + desc "Run #{name} tests for #{plugin_name(plugin)}"
  47 + task name => 'db:test:plugins:prepare' do |t|
47 48 run_cucumber t.name, :default, files_glob
48 49 end
49 50 end
50 51  
51   -def plugin_selenium_task(plugin, files_glob)
52   - task :selenium => 'db:test:plugins:prepare' do |t|
  52 +def plugin_selenium_task(name, plugin, files_glob)
  53 + desc "Run #{name} tests for #{plugin_name(plugin)}"
  54 + task name => 'db:test:plugins:prepare' do |t|
53 55 run_cucumber t.name, :selenium, files_glob
54 56 end
55 57 end
... ... @@ -79,11 +81,11 @@ namespace :test do
79 81 plugin_test_task :units, plugin, "plugins/#{plugin}/test/unit/**/*.rb"
80 82 plugin_test_task :functionals, plugin, "plugins/#{plugin}/test/functional/**/*.rb"
81 83 plugin_test_task :integration, plugin, "plugins/#{plugin}/test/integration/**/*.rb"
82   - plugin_cucumber_task plugin, "plugins/#{plugin}/features/**/*.feature"
83   - plugin_selenium_task plugin, "plugins/#{plugin}/features/**/*.feature"
  84 + plugin_cucumber_task :cucumber, plugin, "plugins/#{plugin}/test/features/**/*.feature"
  85 + plugin_selenium_task :selenium, plugin, "plugins/#{plugin}/test/features/**/*.feature"
84 86 end
85 87  
86   - test_sequence_task(plugin, plugin, "#{plugin}:units", "#{plugin}:functionals", "#{plugin}:integration", "#{plugin}:cucumber", "#{plugin}:selenium") # FIXME missing cucumber and selenium
  88 + test_sequence_task(plugin, plugin, "#{plugin}:units", "#{plugin}:functionals", "#{plugin}:integration", "#{plugin}:cucumber", "#{plugin}:selenium")
87 89 end
88 90  
89 91 { :units => :unit , :functionals => :functional , :integration => :integration }.each do |taskname,folder|
... ... @@ -93,11 +95,11 @@ namespace :test do
93 95 end
94 96  
95 97 task :cucumber => 'db:test:plugins:prepare' do |t|
96   - run_cucumber t.name, :default, "plugins/{#{enabled_plugins.join(',')}}/features/**/*.features"
  98 + run_cucumber t.name, :default, "plugins/{#{enabled_plugins.join(',')}}/test/features/**/*.features"
97 99 end
98 100  
99 101 task :selenium => 'db:test:plugins:prepare' do |t|
100   - run_cucumber t.name, :selenium, "plugins/{#{enabled_plugins.join(',')}}/features/**/*.features"
  102 + run_cucumber t.name, :selenium, "plugins/{#{enabled_plugins.join(',')}}/test/features/**/*.features"
101 103 end
102 104  
103 105 task :temp_enable_all_plugins do
... ...
public/javascripts/comment_form.js 0 → 100644
... ... @@ -0,0 +1,23 @@
  1 +jQuery('.display-comment-form').click(function(){
  2 + toggleBox('.post_comment_box');
  3 + jQuery('.display-comment-form').hide();
  4 + jQuery('form.comment_form input').first().focus();
  5 + return false;
  6 +});
  7 +
  8 +jQuery('#cancel-comment').click(function(){
  9 + toggleBox('.post_comment_box');
  10 + jQuery('.display-comment-form').show();
  11 + return false
  12 +})
  13 +
  14 +function toggleBox(div_selector){
  15 + div = jQuery(div_selector);
  16 + if(div.hasClass('opened')) {
  17 + div.removeClass('opened');
  18 + div.addClass('closed');
  19 + } else {
  20 + div.removeClass('closed');
  21 + div.addClass('opened');
  22 + }
  23 +}
... ...
public/stylesheets/application.css
... ... @@ -1106,8 +1106,7 @@ a.comment-picture {
1106 1106 }
1107 1107 #article .article-comments-list, #article .article-comments-list ul, #article .article-comments-list li {
1108 1108 padding: 0;
1109   - margin: 0;
1110   - margin-bottom: 10px;
  1109 + margin: 25px 0 10px 0;
1111 1110 list-style: none;
1112 1111 }
1113 1112 .article-comment .button-bar {
... ... @@ -1273,20 +1272,24 @@ a.comment-picture {
1273 1272 background: transparent url(../images/loading-small.gif) no-repeat left center;
1274 1273 }
1275 1274  
  1275 +
1276 1276 .post_comment_box {
1277 1277 text-align: center;
1278 1278 padding: 0px 15px 5px 15px;
1279   - margin: 10px auto;
1280 1279 }
1281   -.post-comment-button a, .post_comment_box h4 {
  1280 +
  1281 +#comments_list a.display-comment-form {
1282 1282 padding: 1px 20px;
1283 1283 margin: 0px;
1284 1284 background: #eee;
1285   -}
1286   -.post-comment-button a, .post_comment_box.closed h4 {
1287   - display: inline;
1288 1285 border: 1px solid #888;
1289   - cursor: pointer;
  1286 + text-decoration: none;
  1287 + color: black;
  1288 + font-size: 14px;
  1289 + font-weight: bold;
  1290 + -moz-border-radius: 4px;
  1291 + -webkit-border-radius: 4px;
  1292 + border-radius: 4px;
1290 1293 }
1291 1294 .post_comment_box.opened {
1292 1295 border: 1px solid #888;
... ... @@ -2720,6 +2723,29 @@ div#activation_enterprise label, div#activation_enterprise input, div#activation
2720 2723 padding-bottom: 0.5em;
2721 2724 }
2722 2725  
  2726 +#catalog-categories-homepage-link {
  2727 + background-color: #d3d7cf;
  2728 + font-weight: bold;
  2729 + height: 28px;
  2730 + text-align: center;
  2731 + border-radius: 5px;
  2732 + margin-bottom: 10px;
  2733 +}
  2734 +
  2735 +
  2736 +#catalog-categories-homepage-link:hover {
  2737 + background-color: #babdb6;
  2738 +}
  2739 +
  2740 +
  2741 +#catalog-categories-homepage-link a{
  2742 + display: inline-block;
  2743 + height: 100%;
  2744 + width: 100%;
  2745 + line-height: 28px;
  2746 + text-decoration: none;
  2747 + color: #2e3436;
  2748 +}
2723 2749 /* * * Show Product * * * * * * * * * * * * */
2724 2750  
2725 2751 .controller-catalog #show_product .product-pic {
... ...
script/cucumber
1 1 #!/usr/bin/env ruby
2 2  
3   -vendored_cucumber_binary = Dir[File.join(File.dirname(__FILE__),
4   - '..',
5   - 'vendor',
6   - '{gems,plugins}',
7   - 'cucumber*',
8   - 'bin',
9   - 'cucumber')].first
10   -
11   -if vendored_cucumber_binary
12   - load File.expand_path(vendored_cucumber_binary)
  3 +vendored_cucumber_bin = Dir["#{File.dirname(__FILE__)}/../vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
  4 +if vendored_cucumber_bin
  5 + load File.expand_path(vendored_cucumber_bin)
13 6 else
14 7 require 'rubygems' unless ENV['NO_RUBYGEMS']
15 8 require 'cucumber'
... ...
test/functional/content_viewer_controller_test.rb
... ... @@ -1281,7 +1281,7 @@ end
1281 1281 comment = article.comments.build(:author => profile, :title => 'hi', :body => 'hello')
1282 1282 comment.save!
1283 1283 get :view_page, :profile => 'testuser', :page => [ 'test' ]
1284   - assert_no_tag :tag => 'p', :attributes => { :class => 'post-comment-button' }
  1284 + assert_no_tag :tag => 'a', :attributes => { :class => 'display-comment-form' }
1285 1285 end
1286 1286  
1287 1287 should 'not show a post comment button on top if there are no comments' do
... ... @@ -1289,7 +1289,7 @@ end
1289 1289 article = profile.articles.build(:name => 'test')
1290 1290 article.save!
1291 1291 get :view_page, :profile => 'testuser', :page => [ 'test' ]
1292   - assert_no_tag :tag => 'p', :attributes => { :class => 'post-comment-button' }
  1292 + assert_no_tag :tag => 'a', :attributes => { :class => 'display-comment-form' }
1293 1293 end
1294 1294  
1295 1295 should 'show a post comment button on top if there are at least two comments' do
... ... @@ -1301,7 +1301,7 @@ end
1301 1301 comment2 = article.comments.build(:author => profile, :title => 'hi', :body => 'hello', :reply_of_id => comment1.id)
1302 1302 comment2.save!
1303 1303 get :view_page, :profile => 'testuser', :page => [ 'test' ]
1304   - assert_tag :tag => 'p', :attributes => { :class => 'post-comment-button' }
  1304 + assert_tag :tag => 'a', :attributes => { :class => 'display-comment-form' }
1305 1305 end
1306 1306  
1307 1307 should 'store number of comments' do
... ...
vendor/plugins/acts_as_solr_reloaded/lib/tasks/solr.rake
1 1 namespace :solr do
2 2  
3 3 APACHE_MIRROR = ENV['APACHE_MIRROR'] || "http://ftp.unicamp.br/pub/apache"
4   - SOLR_VERSION = '3.6.0'
  4 + SOLR_VERSION = '3.6.2'
5 5 SOLR_FILENAME = "apache-solr-#{SOLR_VERSION}.tgz"
6   - SOLR_MD5SUM = 'ac11ef4408bb015aa3a5eefcb1047aec'
  6 + SOLR_MD5SUM = 'e9c51f51265b070062a9d8ed50b84647'
7 7 SOLR_URL = "#{APACHE_MIRROR}/lucene/solr/#{SOLR_VERSION}/#{SOLR_FILENAME}"
8 8 SOLR_DIR = "apache-solr-#{SOLR_VERSION}"
9 9  
... ...