Commit 82012975eb8accbac901a06c04227a67322160f8

Authored by Caio Almeida
Committed by Daniela Feitosa
1 parent 8b0ca3f5

Loading logged-in stuff through Ajax

Also, fixing all selenium tests

(ActionItem1672)
app/controllers/public/content_viewer_controller.rb
@@ -51,6 +51,11 @@ class ContentViewerController < ApplicationController @@ -51,6 +51,11 @@ class ContentViewerController < ApplicationController
51 return 51 return
52 end 52 end
53 53
  54 + if request.xhr? && params[:toolbar]
  55 + render :partial => 'article_toolbar'
  56 + return
  57 + end
  58 +
54 redirect_to_translation 59 redirect_to_translation
55 60
56 # At this point the page will be showed 61 # At this point the page will be showed
app/controllers/public/profile_controller.rb
@@ -215,6 +215,14 @@ class ProfileController < PublicController @@ -215,6 +215,14 @@ class ProfileController < PublicController
215 end 215 end
216 end 216 end
217 217
  218 + def profile_info
  219 + begin
  220 + @block = profile.blocks.find(params[:block_id])
  221 + rescue
  222 + render :text => _('Profile information could not be loaded')
  223 + end
  224 + end
  225 +
218 protected 226 protected
219 227
220 def check_access_to_profile 228 def check_access_to_profile
app/helpers/lightbox_helper.rb
@@ -32,4 +32,8 @@ module LightboxHelper @@ -32,4 +32,8 @@ module LightboxHelper
32 request.xhr? 32 request.xhr?
33 end 33 end
34 34
  35 + def lightbox_remote_button(type, label, url, options = {})
  36 + button(type, label, url, lightbox_options(options, 'remote-lbOn'))
  37 + end
  38 +
35 end 39 end
app/views/blocks/profile_image.rhtml
@@ -14,14 +14,11 @@ @@ -14,14 +14,11 @@
14 <p><%= h block.owner.short_name %></p> 14 <p><%= h block.owner.short_name %></p>
15 <% end %> 15 <% end %>
16 16
17 -<% if !user.nil? and user.has_permission?('edit_profile', profile) %>  
18 - <div style='text-align: center; font-size: 75%; clear: both'>  
19 - <%= link_to _('Control panel'), :controller => 'profile_editor' %>  
20 - </div>  
21 -<% end %> 17 +<div style="text-align: center; font-size: 75%; clear: both" id="profile-admin-url-<%= block.id %>"></div>
22 18
23 -<div class="profile-info-options">  
24 - <%= render :file => 'blocks/profile_info_actions/' + block.owner.class.name.underscore %>  
25 -</div> 19 +<div class="profile-info-options" id="profile-info-options-<%= block.id %>"></div>
26 20
27 </div><!-- end class="vcard" --> 21 </div><!-- end class="vcard" -->
  22 +<script type="text/javascript">
  23 + <%= remote_function :url => { :controller => 'profile', :action => 'profile_info', :block_id => block.id } %>
  24 +</script>
app/views/blocks/profile_info.rhtml
@@ -14,15 +14,13 @@ @@ -14,15 +14,13 @@
14 </div> 14 </div>
15 </div> 15 </div>
16 16
17 -<ul class="profile-info-data"> 17 +<ul class="profile-info-data" id="profile-info-data-<%= block.id %>">
18 <li><%= link_to __('Homepage'), block.owner.url, :class => 'url' %></li> 18 <li><%= link_to __('Homepage'), block.owner.url, :class => 'url' %></li>
19 <li><%= link_to _('View profile'), block.owner.public_profile_url %></li> 19 <li><%= link_to _('View profile'), block.owner.public_profile_url %></li>
20 <% if block.owner.enterprise? && !block.owner.environment.enabled?('disable_products_for_enterprises') %> 20 <% if block.owner.enterprise? && !block.owner.environment.enabled?('disable_products_for_enterprises') %>
21 <li><%= link_to(_('Products/Services'), :controller => 'catalog', :profile => block.owner.identifier) %></li> 21 <li><%= link_to(_('Products/Services'), :controller => 'catalog', :profile => block.owner.identifier) %></li>
22 <% end %> 22 <% end %>
23 - <% if !user.nil? and user.has_permission?('edit_profile', profile) %>  
24 - <li><%= link_to _('Control panel'), block.owner.admin_url %></li>  
25 - <% end %> 23 + <li id="profile-admin-url-<%= block.id %>"></li>
26 <% if profile.person? %> 24 <% if profile.person? %>
27 <li><%= _('Since %{year}/%{month}') % { :year => block.owner.created_at.year, :month => block.owner.created_at.month } %></li> 25 <li><%= _('Since %{year}/%{month}') % { :year => block.owner.created_at.year, :month => block.owner.created_at.month } %></li>
28 <% end %> 26 <% end %>
@@ -39,8 +37,9 @@ @@ -39,8 +37,9 @@
39 </div> 37 </div>
40 <% end %> 38 <% end %>
41 39
42 -<div class="profile-info-options">  
43 - <%= render :file => 'blocks/profile_info_actions/' + block.owner.class.name.underscore %>  
44 -</div> 40 +<div class="profile-info-options" id="profile-info-options-<%= block.id %>"></div>
45 41
46 </div><!-- end class="vcard" --> 42 </div><!-- end class="vcard" -->
  43 +<script type="text/javascript">
  44 + <%= remote_function :url => { :controller => 'profile', :action => 'profile_info', :block_id => block.id } %>
  45 +</script>
app/views/content_viewer/_article_toolbar.rhtml 0 → 100644
@@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
  1 +<div<%= " class='logged-in'" if user %>>
  2 + <% if @page.allow_post_content?(user) || @page.allow_publish_content?(user) %>
  3 + <div id="article-actions">
  4 + <% if @page.allow_post_content?(user) %>
  5 + <%= link_to content_tag( 'span', label_for_edit_article(@page) ),
  6 + profile.admin_url.merge({ :controller => 'cms', :action => 'edit', :id => @page.id }),
  7 + :class => 'button with-text icon-edit' %>
  8 + <% if !(profile.kind_of?(Enterprise) && environment.enabled?('disable_cms')) %>
  9 + <% if @page != profile.home_page && !@page.has_posts? %>
  10 + <%= link_to content_tag( 'span', _('Delete') ),
  11 + profile.admin_url.merge({ :controller => 'cms', :action => 'destroy', :id => @page }),
  12 + :class => 'button with-text icon-delete' %>
  13 + <% end %>
  14 + <% if !environment.enabled?('disable_cms') && !@page.folder? %>
  15 + <% if profile.kind_of?(Person) %>
  16 + <%= link_to content_tag( 'span', _('Spread this') ),
  17 + profile.admin_url.merge({ :controller => 'cms', :action => 'publish', :id => @page }),
  18 + :class => 'button with-text icon-spread' %>
  19 + <% elsif profile.kind_of?(Community) && environment.portal_community %>
  20 + <%= link_to content_tag( 'span', _('Spread this') ),
  21 + profile.admin_url.merge({ :controller => 'cms', :action => 'publish_on_portal_community', :id => @page }),
  22 + :class => 'button with-text icon-spread' %>
  23 + <% end %>
  24 + <% end %>
  25 + <% end %>
  26 + <% end %>
  27 + <% if !(profile.kind_of?(Enterprise) && environment.enabled?('disable_cms')) %>
  28 + <% if !@page.gallery? %>
  29 + <%= link_to _('Add translation'),
  30 + profile.admin_url.merge(:controller => 'cms', :action => 'new',
  31 + :parent_id => (@page.folder? ? @page : (@page.parent.nil? ? nil : @page.parent)),
  32 + :type => @page.type, :article => { :translation_of_id => @page.native_translation.id }),
  33 + :class => 'button with-text icon-locale' if @page.translatable? && !@page.native_translation.language.blank? %>
  34 + <%= lightbox_remote_button(:new, label_for_new_article(@page), profile.admin_url.merge(:controller => 'cms', :action => 'new', :parent_id => (@page.folder? ? @page : (@page.parent.nil? ? nil : @page.parent)))) %>
  35 + <% end %>
  36 + <% if (@page.folder? && !@page.has_posts?) || (@page.parent && @page.parent.folder? && !@page.parent.has_posts?) %>
  37 + <%= button('upload-file', _('Upload files'), profile.admin_url.merge(:controller => 'cms', :action => 'upload_files', :parent_id => (@page.folder? ? @page : @page.parent))) %>
  38 + <% end %>
  39 + <% end %>
  40 + <% if profile.kind_of?(Enterprise) && @page.gallery? %>
  41 + <%= button('upload-file', _('Upload files'), :controller => 'cms', :action => 'upload_files', :parent_id => (@page.folder? ? @page : @page.parent)) %>
  42 + <% end %>
  43 + </div>
  44 + <% elsif profile.community? && (@page.blog? || @page.parent && @page.parent.blog?) %>
  45 + <div id="article-actions">
  46 + <%= link_to content_tag( 'span', _('Suggest an article') ), profile.admin_url.merge({ :controller => 'cms', :action => 'suggest_an_article'}), :id => 'suggest-article-link', :class => 'button with-text icon-new' %>
  47 + </div>
  48 + <% end %>
  49 + <div id="article-header">
  50 + <%= link_to(image_tag('icons-mime/rss-feed.png'), @page.feed.url, :class => 'blog-feed-link') if @page.has_posts? && @page.feed %>
  51 + <%= article_title(@page, :no_link => true) %>
  52 + <%= article_translations(@page) %>
  53 + </div>
  54 +</div>
app/views/content_viewer/view_page.rhtml
@@ -6,62 +6,11 @@ @@ -6,62 +6,11 @@
6 6
7 <div id="article" class="<%= @page.css_class_name %>"> 7 <div id="article" class="<%= @page.css_class_name %>">
8 8
  9 +<div id="article-toolbar"></div>
9 10
10 -<div<%= " class='logged-in'" if user %>>  
11 - <% if @page.allow_post_content?(user) || @page.allow_publish_content?(user) %>  
12 - <div id="article-actions">  
13 - <% if @page.allow_post_content?(user) %>  
14 - <%= link_to content_tag( 'span', label_for_edit_article(@page) ),  
15 - profile.admin_url.merge({ :controller => 'cms', :action => 'edit', :id => @page.id }),  
16 - :class => 'button with-text icon-edit' %>  
17 - <% if !(profile.kind_of?(Enterprise) && environment.enabled?('disable_cms')) %>  
18 - <% if @page != profile.home_page && !@page.has_posts? %>  
19 - <%= link_to content_tag( 'span', _('Delete') ),  
20 - profile.admin_url.merge({ :controller => 'cms', :action => 'destroy', :id => @page }),  
21 - :class => 'button with-text icon-delete' %>  
22 - <% end %>  
23 - <% if !environment.enabled?('disable_cms') && !@page.folder? %>  
24 - <% if profile.kind_of?(Person) %>  
25 - <%= link_to content_tag( 'span', _('Spread this') ),  
26 - profile.admin_url.merge({ :controller => 'cms', :action => 'publish', :id => @page }),  
27 - :class => 'button with-text icon-spread' %>  
28 - <% elsif profile.kind_of?(Community) && environment.portal_community %>  
29 - <%= link_to content_tag( 'span', _('Spread this') ),  
30 - profile.admin_url.merge({ :controller => 'cms', :action => 'publish_on_portal_community', :id => @page }),  
31 - :class => 'button with-text icon-spread' %>  
32 - <% end %>  
33 - <% end %>  
34 - <% end %>  
35 - <% end %>  
36 - <% if !(profile.kind_of?(Enterprise) && environment.enabled?('disable_cms')) %>  
37 - <% if !@page.gallery? %>  
38 - <%= link_to _('Add translation'),  
39 - profile.admin_url.merge(:controller => 'cms', :action => 'new',  
40 - :parent_id => (@page.folder? ? @page : (@page.parent.nil? ? nil : @page.parent)),  
41 - :type => @page.type, :article => { :translation_of_id => @page.native_translation.id }),  
42 - :class => 'button with-text icon-locale' if @page.translatable? && !@page.native_translation.language.blank? %>  
43 - <%= lightbox_button(:new, label_for_new_article(@page), profile.admin_url.merge(:controller => 'cms', :action => 'new', :parent_id => (@page.folder? ? @page : (@page.parent.nil? ? nil : @page.parent)))) %>  
44 - <% end %>  
45 - <% if (@page.folder? && !@page.has_posts?) || (@page.parent && @page.parent.folder? && !@page.parent.has_posts?) %>  
46 - <%= button('upload-file', _('Upload files'), profile.admin_url.merge(:controller => 'cms', :action => 'upload_files', :parent_id => (@page.folder? ? @page : @page.parent))) %>  
47 - <% end %>  
48 - <% end %>  
49 - <% if profile.kind_of?(Enterprise) && @page.gallery? %>  
50 - <%= button('upload-file', _('Upload files'), :controller => 'cms', :action => 'upload_files', :parent_id => (@page.folder? ? @page : @page.parent)) %>  
51 - <% end %>  
52 - </div>  
53 - <% elsif profile.community? && (@page.blog? || @page.parent && @page.parent.blog?) %>  
54 - <div id="article-actions">  
55 - <%= link_to content_tag( 'span', _('Suggest an article') ), profile.admin_url.merge({ :controller => 'cms', :action => 'suggest_an_article'}), :id => 'suggest-article-link', :class => 'button with-text icon-new' %>  
56 - </div>  
57 - <% end %>  
58 - <div id="article-header">  
59 - <%= link_to(image_tag('icons-mime/rss-feed.png'), @page.feed.url, :class => 'blog-feed-link') if @page.has_posts? && @page.feed %>  
60 - <%= article_title(@page, :no_link => true) %>  
61 - <%= article_translations(@page) %>  
62 - </div>  
63 -</div>  
64 - 11 +<script type="text/javascript">
  12 + <%= remote_function :update => "article-toolbar", :url => @page.url.merge({ :toolbar => true, :only_path => true }), :complete => "$$('#article-toolbar .remote-lbOn').each(function(link) { new lightbox(link); }); jQuery('#article-toolbar .simplemenu-trigger').click(function(e) { e.stopPropagation(); })" %>
  13 +</script>
65 14
66 <% if !@page.tags.empty? %> 15 <% if !@page.tags.empty? %>
67 <div id="article-tags"> 16 <div id="article-tags">
app/views/profile/profile_info.rjs 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +if !user.nil? and user.has_permission?('edit_profile', profile)
  2 + page.replace_html "profile-admin-url-#{@block.id}", link_to(_('Control panel'), @block.owner.admin_url)
  3 +else
  4 + page.hide "profile-admin-url-#{@block.id}"
  5 +end
  6 +page.replace_html "profile-info-options-#{@block.id}", :file => 'blocks/profile_info_actions/' + @block.owner.class.name.underscore
features/activate_enterprise.feature
@@ -7,10 +7,10 @@ Feature: activate enterprise @@ -7,10 +7,10 @@ Feature: activate enterprise
7 Given the following users 7 Given the following users
8 | login | name | 8 | login | name |
9 | joaosilva | Joao Silva | 9 | joaosilva | Joao Silva |
  10 + And I am logged in as "joaosilva"
10 11
11 Scenario: added an unexistent code 12 Scenario: added an unexistent code
12 Given feature "enterprise_activation" is enabled on environment 13 Given feature "enterprise_activation" is enabled on environment
13 - And I am logged in as "joaosilva"  
14 And I am on Joao Silva's control panel 14 And I am on Joao Silva's control panel
15 And I fill in "Enterprise activation code" with "abcde" 15 And I fill in "Enterprise activation code" with "abcde"
16 When I press "Activate" 16 When I press "Activate"
@@ -21,7 +21,6 @@ Feature: activate enterprise @@ -21,7 +21,6 @@ Feature: activate enterprise
21 And the following enterprises 21 And the following enterprises
22 | identifier | name | enabled | 22 | identifier | name | enabled |
23 | products-factory | Products Factory | false | 23 | products-factory | Products Factory | false |
24 - And I am logged in as "joaosilva"  
25 And I am on Joao Silva's control panel 24 And I am on Joao Silva's control panel
26 And enterprise "Products Factory" is enabled 25 And enterprise "Products Factory" is enabled
27 And I fill in "Enterprise activation code" with code of "Products Factory" 26 And I fill in "Enterprise activation code" with code of "Products Factory"
@@ -33,7 +32,6 @@ Feature: activate enterprise @@ -33,7 +32,6 @@ Feature: activate enterprise
33 And the following enterprises 32 And the following enterprises
34 | identifier | name | enabled | 33 | identifier | name | enabled |
35 | products-factory | Products Factory | false | 34 | products-factory | Products Factory | false |
36 - And I am logged in as "joaosilva"  
37 And I am on Joao Silva's control panel 35 And I am on Joao Silva's control panel
38 And I fill in "Enterprise activation code" with code of "Products Factory" 36 And I fill in "Enterprise activation code" with code of "Products Factory"
39 When I press "Activate" 37 When I press "Activate"
@@ -45,7 +43,6 @@ Feature: activate enterprise @@ -45,7 +43,6 @@ Feature: activate enterprise
45 And the following enterprises 43 And the following enterprises
46 | identifier | name | enabled | foundation_year | 44 | identifier | name | enabled | foundation_year |
47 | services-provider | Services Provider | false | 2000 | 45 | services-provider | Services Provider | false | 2000 |
48 - And I am logged in as "joaosilva"  
49 And I am on Joao Silva's control panel 46 And I am on Joao Silva's control panel
50 And I fill in "Enterprise activation code" with code of "Services Provider" 47 And I fill in "Enterprise activation code" with code of "Services Provider"
51 And I press "Activate" 48 And I press "Activate"
@@ -59,7 +56,6 @@ Feature: activate enterprise @@ -59,7 +56,6 @@ Feature: activate enterprise
59 And the following enterprises 56 And the following enterprises
60 | identifier | name | enabled | cnpj | 57 | identifier | name | enabled | cnpj |
61 | services-provider | Services Provider | false | 00000000000000 | 58 | services-provider | Services Provider | false | 00000000000000 |
62 - And I am logged in as "joaosilva"  
63 And I am on Joao Silva's control panel 59 And I am on Joao Silva's control panel
64 And I fill in "Enterprise activation code" with code of "Services Provider" 60 And I fill in "Enterprise activation code" with code of "Services Provider"
65 And I press "Activate" 61 And I press "Activate"
@@ -74,11 +70,10 @@ Feature: activate enterprise @@ -74,11 +70,10 @@ Feature: activate enterprise
74 And the following enterprises 70 And the following enterprises
75 | identifier | name | enabled | foundation_year | 71 | identifier | name | enabled | foundation_year |
76 | services-provider | Services Provider | false | 2000 | 72 | services-provider | Services Provider | false | 2000 |
77 - And I am logged in as "joaosilva"  
78 - And I am on Joao Silva's control panel 73 + And I visit "Joao Silva's control panel" and wait
79 And I fill in "Enterprise activation code" with code of "Services Provider" 74 And I fill in "Enterprise activation code" with code of "Services Provider"
80 - And I press "Activate"  
81 - And I fill in "enterprise-activation-answer" with "2000" 75 + And I press "Activate" and wait
  76 + And I fill in "What year your enterprise was founded? It must have 4 digits, eg 1990." with "2000"
82 And I press "Continue" 77 And I press "Continue"
83 And I check "I read the terms of use and accepted them" 78 And I check "I read the terms of use and accepted them"
84 When I press "Continue" 79 When I press "Continue"
@@ -92,22 +87,21 @@ Feature: activate enterprise @@ -92,22 +87,21 @@ Feature: activate enterprise
92 And feature "enterprise_activation" is enabled on environment 87 And feature "enterprise_activation" is enabled on environment
93 And the following enterprises 88 And the following enterprises
94 | identifier | name | enabled | foundation_year | 89 | identifier | name | enabled | foundation_year |
95 - | services-provider | Services Provider | false | 2000 | 90 + | services-provider-2 | Services Provider 2 | false | 2000 |
96 | active-template | Active Template | false | 2000 | 91 | active-template | Active Template | false | 2000 |
97 And "Active Template" is the active enterprise template 92 And "Active Template" is the active enterprise template
98 - And "Services Provider" doesnt have "Active Template" as template  
99 - And I am logged in as "joaosilva"  
100 - And I am on Joao Silva's control panel  
101 - And I fill in "Enterprise activation code" with code of "Services Provider"  
102 - And I press "Activate"  
103 - And I fill in "enterprise-activation-answer" with "2000" 93 + And "Services Provider 2" doesnt have "Active Template" as template
  94 + And I visit "Joao Silva's control panel" and wait
  95 + And I fill in "Enterprise activation code" with code of "Services Provider 2"
  96 + And I press "Activate" and wait
  97 + And I fill in "What year your enterprise was founded? It must have 4 digits, eg 1990." with "2000"
104 And I press "Continue" 98 And I press "Continue"
105 And I check "I read the terms of use and accepted them" 99 And I check "I read the terms of use and accepted them"
106 When I press "Continue" 100 When I press "Continue"
107 - Then I should see "Services Provider was successfuly activated. Now you may go to your control panel or to the control panel of your enterprise"  
108 - And enterprise "Services Provider" should be enabled  
109 - And "Joao Silva" is admin of "Services Provider"  
110 - And "Services Provider" has "Active Template" as template 101 + Then I should see "Services Provider 2 was successfuly activated. Now you may go to your control panel or to the control panel of your enterprise"
  102 + And enterprise "Services Provider 2" should be enabled
  103 + And "Joao Silva" is admin of "Services Provider 2"
  104 + And "Services Provider 2" has "Active Template" as template
111 105
112 @selenium 106 @selenium
113 Scenario: not replace template after enable an enterprise 107 Scenario: not replace template after enable an enterprise
@@ -115,20 +109,18 @@ Feature: activate enterprise @@ -115,20 +109,18 @@ Feature: activate enterprise
115 And feature "enterprise_activation" is enabled on environment 109 And feature "enterprise_activation" is enabled on environment
116 And the following enterprises 110 And the following enterprises
117 | identifier | name | enabled | foundation_year | 111 | identifier | name | enabled | foundation_year |
118 - | services-provider | Services Provider | false | 2000 | 112 + | services-provider-3 | Services Provider 3 | false | 2000 |
119 | active-template | Active Template | false | 2000 | 113 | active-template | Active Template | false | 2000 |
120 And "Active Template" is the active enterprise template 114 And "Active Template" is the active enterprise template
121 - And "Services Provider" doesnt have "Active Template" as template  
122 - And I am logged in as "joaosilva"  
123 - And I am on Joao Silva's control panel  
124 - And I fill in "Enterprise activation code" with code of "Services Provider"  
125 - And I press "Activate"  
126 - And I fill in "enterprise-activation-answer" with "2000" 115 + And "Services Provider 3" doesnt have "Active Template" as template
  116 + When I visit "Joao Silva's control panel" and wait
  117 + And I fill in "Enterprise activation code" with code of "Services Provider 3"
  118 + And I press "Activate" and wait
  119 + And I fill in "What year your enterprise was founded? It must have 4 digits, eg 1990." with "2000"
127 And I press "Continue" 120 And I press "Continue"
128 And I check "I read the terms of use and accepted them" 121 And I check "I read the terms of use and accepted them"
129 When I press "Continue" 122 When I press "Continue"
130 - Then I should see "Services Provider was successfuly activated. Now you may go to your control panel or to the control panel of your enterprise"  
131 - And enterprise "Services Provider" should be enabled  
132 - And "Joao Silva" is admin of "Services Provider"  
133 - And "Services Provider" doesnt have "Active Template" as template  
134 - 123 + Then I should see "Services Provider 3 was successfuly activated. Now you may go to your control panel or to the control panel of your enterprise"
  124 + And enterprise "Services Provider 3" should be enabled
  125 + And "Joao Silva" is admin of "Services Provider 3"
  126 + And "Services Provider 3" doesnt have "Active Template" as template
features/admin_categories.feature
@@ -14,10 +14,15 @@ Feature: manage categories @@ -14,10 +14,15 @@ Feature: manage categories
14 Given I am logged in as admin 14 Given I am logged in as admin
15 15
16 @selenium 16 @selenium
17 - Scenario: admin user could create a category 17 + Scenario: admin user could access new category
18 Given I follow "Administration" 18 Given I follow "Administration"
19 - And I follow "Manage Categories"  
20 - And I follow "New category" 19 + When I follow "Manage Categories"
  20 + And I follow "New category" and wait
  21 + Then I should be on /admin/categories/new
  22 +
  23 + @selenium
  24 + Scenario: admin user could create a category
  25 + Given I visit "/admin/categories/new" and wait
21 When I fill in "Name" with "Category 1" 26 When I fill in "Name" with "Category 1"
22 And I press "Save" 27 And I press "Save"
23 Then I should see "Categories" 28 Then I should see "Categories"
@@ -47,7 +52,8 @@ Feature: manage categories @@ -47,7 +52,8 @@ Feature: manage categories
47 Given the following category 52 Given the following category
48 | parent | name | display_in_menu | 53 | parent | name | display_in_menu |
49 | Steak | Pig | true | 54 | Steak | Pig | true |
50 - And I follow "Administration" 55 + And I am on the homepage
  56 + When I follow "Administration"
51 And I follow "Manage Categories" 57 And I follow "Manage Categories"
52 Then I should see "Food Show" 58 Then I should see "Food Show"
53 When I follow "Show" 59 When I follow "Show"
features/approve_article.feature
@@ -18,18 +18,19 @@ Feature: approve article @@ -18,18 +18,19 @@ Feature: approve article
18 And "Maria Silva" is a member of "Sample Community" 18 And "Maria Silva" is a member of "Sample Community"
19 And "Joao Silva" is admin of "Sample Community" 19 And "Joao Silva" is admin of "Sample Community"
20 20
  21 + @selenium
21 Scenario: edit an article before approval 22 Scenario: edit an article before approval
22 Given I am logged in as "mariasilva" 23 Given I am logged in as "mariasilva"
23 And I am on Maria Silva's homepage 24 And I am on Maria Silva's homepage
24 - And I follow "Spread" 25 + When I follow "Spread" and wait
25 And I check "Sample Community" 26 And I check "Sample Community"
26 And I press "Spread this" 27 And I press "Spread this"
27 - When I am logged in as "joaosilva" 28 + And I am logged in as "joaosilva"
28 And I go to Sample Community's control panel 29 And I go to Sample Community's control panel
29 - And I follow "Process requests" 30 + And I follow "Process requests" and wait
30 And I fill in "Text" with "This is an article edited" 31 And I fill in "Text" with "This is an article edited"
31 And I choose "Accept" 32 And I choose "Accept"
32 And I press "Apply!" 33 And I press "Apply!"
33 And I go to Sample Community's sitemap 34 And I go to Sample Community's sitemap
34 - When I follow "Sample Article" 35 + And I follow "Sample Article"
35 Then I should see "This is an article edited" 36 Then I should see "This is an article edited"
features/balloon.feature
@@ -2,22 +2,18 @@ Feature: balloon @@ -2,22 +2,18 @@ Feature: balloon
2 I want to view a balloon when mouse clicks on profile trigger 2 I want to view a balloon when mouse clicks on profile trigger
3 3
4 Background: 4 Background:
5 - Given I am on the homepage  
6 Given the following users 5 Given the following users
7 - | login | name | 6 + | login | name |
8 | joaosilva | Joao Silva | 7 | joaosilva | Joao Silva |
9 And the following communities 8 And the following communities
10 - | identifier | name |  
11 - | sample | Sample | 9 + | identifier | name |
  10 + | sample | Sample |
12 11
13 @selenium 12 @selenium
14 Scenario: I should not see trigger if not enabled 13 Scenario: I should not see trigger if not enabled
15 - Given the following blocks  
16 - | owner | type |  
17 - | environment | PeopleBlock |  
18 - And feature "show_balloon_with_profile_links_when_clicked" is disabled on environment  
19 - And I go to the homepage  
20 - Then I should not see "Friends" 14 + Given feature "show_balloon_with_profile_links_when_clicked" is disabled on environment
  15 + When I go to /browse/people
  16 + Then I should not see "Profile links"
21 17
22 @selenium 18 @selenium
23 Scenario: I should not see trigger by default 19 Scenario: I should not see trigger by default
@@ -25,7 +21,7 @@ Feature: balloon @@ -25,7 +21,7 @@ Feature: balloon
25 | owner | type | 21 | owner | type |
26 | environment | PeopleBlock | 22 | environment | PeopleBlock |
27 And feature "show_balloon_with_profile_links_when_clicked" is enabled on environment 23 And feature "show_balloon_with_profile_links_when_clicked" is enabled on environment
28 - And I go to the homepage 24 + When I go to the homepage
29 Then I should not see "Friends" 25 Then I should not see "Friends"
30 26
31 @selenium 27 @selenium
@@ -34,39 +30,33 @@ Feature: balloon @@ -34,39 +30,33 @@ Feature: balloon
34 | owner | type | 30 | owner | type |
35 | environment | PeopleBlock | 31 | environment | PeopleBlock |
36 And feature "show_balloon_with_profile_links_when_clicked" is enabled on environment 32 And feature "show_balloon_with_profile_links_when_clicked" is enabled on environment
37 - And I go to the homepage  
38 - When I click ".menu-submenu-trigger"  
39 - Then I should see "Profile"  
40 - And I should see "Friends" 33 + When I go to the homepage
  34 + And I follow "Profile links"
  35 + Then I should see "Friends"
41 36
42 @selenium 37 @selenium
43 Scenario: I should see balloon when clicked on community block trigger 38 Scenario: I should see balloon when clicked on community block trigger
44 - Given the following blocks  
45 - | owner | type |  
46 - | environment | CommunitiesBlock |  
47 - And feature "show_balloon_with_profile_links_when_clicked" is enabled on environment  
48 - And I go to the homepage  
49 - When I click ".menu-submenu-trigger"  
50 - Then I should see "Profile"  
51 - And I should see "Members"  
52 - And I should see "Agenda" 39 + 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"
  42 + Then I should see "Members"
53 43
54 @selenium 44 @selenium
55 Scenario: I should not see trigger if not enabled on page 45 Scenario: I should not see trigger if not enabled on page
56 Given feature "show_balloon_with_profile_links_when_clicked" is disabled on environment 46 Given feature "show_balloon_with_profile_links_when_clicked" is disabled on environment
57 - And I go to /assets/communities  
58 - Then I should not see "Members" 47 + When I go to /assets/people
  48 + Then I should not see "Profile links"
59 49
60 @selenium 50 @selenium
61 Scenario: I should not see trigger by default on page 51 Scenario: I should not see trigger by default on page
62 Given feature "show_balloon_with_profile_links_when_clicked" is enabled on environment 52 Given feature "show_balloon_with_profile_links_when_clicked" is enabled on environment
63 - And I go to /assets/communities 53 + When I go to /assets/communities
64 Then I should not see "Members" 54 Then I should not see "Members"
65 55
66 @selenium 56 @selenium
67 Scenario: I should see balloon when clicked on page trigger 57 Scenario: I should see balloon when clicked on page trigger
68 Given feature "show_balloon_with_profile_links_when_clicked" is enabled on environment 58 Given feature "show_balloon_with_profile_links_when_clicked" is enabled on environment
69 - And I go to /assets/communities  
70 - When I click ".menu-submenu-trigger" 59 + When I go to /assets/communities
  60 + And I follow "Profile links"
71 Then I should see "Members" 61 Then I should see "Members"
72 And I should see "Agenda" 62 And I should see "Agenda"
features/blog.feature
@@ -83,12 +83,13 @@ Feature: blog @@ -83,12 +83,13 @@ Feature: blog
83 When I follow "Configure blog" 83 When I follow "Configure blog"
84 Then I should be on edit "Blog One" by joaosilva 84 Then I should be on edit "Blog One" by joaosilva
85 85
  86 + @selenium
86 Scenario: configure blog when viewing it 87 Scenario: configure blog when viewing it
87 Given the following blogs 88 Given the following blogs
88 | owner | name | 89 | owner | name |
89 | joaosilva | Blog One | 90 | joaosilva | Blog One |
90 And I go to /joaosilva/blog-one 91 And I go to /joaosilva/blog-one
91 - When I follow "Configure blog" 92 + When I follow "Configure blog" and wait
92 Then I should be on edit "Blog One" by joaosilva 93 Then I should be on edit "Blog One" by joaosilva
93 94
94 Scenario: change address of blog 95 Scenario: change address of blog
features/browse.feature
@@ -39,10 +39,9 @@ Feature: browse @@ -39,10 +39,9 @@ Feature: browse
39 And I should see "Invite friends" 39 And I should see "Invite friends"
40 And I should see "My friends" 40 And I should see "My friends"
41 41
42 - @selenium  
43 Scenario: Browse people by query 42 Scenario: Browse people by query
44 Given I go to /browse/people 43 Given I go to /browse/people
45 - When I fill in "query" with "Silva" 44 + When I fill in "Silva" for "query"
46 And I press "Search" 45 And I press "Search"
47 Then I should see "Joao Silva" 46 Then I should see "Joao Silva"
48 And I should see "Pedro Silva" 47 And I should see "Pedro Silva"
@@ -53,8 +52,8 @@ Feature: browse @@ -53,8 +52,8 @@ Feature: browse
53 @selenium 52 @selenium
54 Scenario: Communities browse menu should add logged information 53 Scenario: Communities browse menu should add logged information
55 Given I am logged in as "joaosilva" 54 Given I am logged in as "joaosilva"
56 - And I am on the homepage  
57 - And I should not see "More Recent" 55 + When I go to /joaosilva
  56 + Then I should not see "More Recent"
58 And I should not see "More Active" 57 And I should not see "More Active"
59 And I should not see "More Popular" 58 And I should not see "More Popular"
60 And I should not see "My communities" 59 And I should not see "My communities"
@@ -76,14 +75,12 @@ Feature: browse @@ -76,14 +75,12 @@ Feature: browse
76 And I should see "More Active" 75 And I should see "More Active"
77 And I should see "More Popular" 76 And I should see "More Popular"
78 77
79 - @selenium  
80 Scenario: Browse communities by query 78 Scenario: Browse communities by query
81 - Given I go to /browse/communities  
82 - When I fill in "query" with "Silva" 79 + When I go to /browse/communities
  80 + And I fill in "Silva" for "query"
83 And I press "Search" 81 And I press "Search"
84 Then I should see "Community Silva" 82 Then I should see "Community Silva"
85 And I should not see "Joao Silva" 83 And I should not see "Joao Silva"
86 And I should not see "Pedro Silva" 84 And I should not see "Pedro Silva"
87 And I should not see "Paulo Neto" 85 And I should not see "Paulo Neto"
88 And I should not see "Community Neto" 86 And I should not see "Community Neto"
89 -  
features/categories_block.feature
@@ -61,12 +61,10 @@ Feature: categories_block @@ -61,12 +61,10 @@ Feature: categories_block
61 And I follow "Edit" within ".categories-block" 61 And I follow "Edit" within ".categories-block"
62 And I check "Product" 62 And I check "Product"
63 And I press "Save" 63 And I press "Save"
64 - Then I should see "Food"  
65 - And I should not see "Vegetarian"  
66 - And I should not see "Steak" 64 + Then I should see "Book"
  65 + And I should not see "Literature"
67 When I click ".category-link-expand category-root" 66 When I click ".category-link-expand category-root"
68 - Then I should see "Vegetarian"  
69 - And I should see "Steak" 67 + Then I should see "Literature"
70 68
71 @selenium 69 @selenium
72 Scenario: List just general categories 70 Scenario: List just general categories
features/chat.feature
@@ -43,6 +43,7 @@ Feature: chat @@ -43,6 +43,7 @@ Feature: chat
43 Given I am on Tame's homepage 43 Given I am on Tame's homepage
44 Then I should not see "Open chat" link 44 Then I should not see "Open chat" link
45 45
  46 + @selenium
46 Scenario: not provide the chat online users list when environment not support that 47 Scenario: not provide the chat online users list when environment not support that
47 Given I am logged in as "tame" 48 Given I am logged in as "tame"
48 Then I should not see "Online friends " 49 Then I should not see "Online friends "
@@ -98,6 +99,7 @@ Feature: chat @@ -98,6 +99,7 @@ Feature: chat
98 And the "#chat-busy" should be visible 99 And the "#chat-busy" should be visible
99 And the "#chat-disconnect" should be visible 100 And the "#chat-disconnect" should be visible
100 101
  102 + @selenium
101 Scenario: link to open chatroom of a community 103 Scenario: link to open chatroom of a community
102 Given the following communities 104 Given the following communities
103 | identifier | name | 105 | identifier | name |
@@ -108,6 +110,7 @@ Feature: chat @@ -108,6 +110,7 @@ Feature: chat
108 When I go to Autoramas's profile 110 When I go to Autoramas's profile
109 Then I should see "Enter chat room" link 111 Then I should see "Enter chat room" link
110 112
  113 + @selenium
111 Scenario: not see link to open chatroom of a community if not a member 114 Scenario: not see link to open chatroom of a community if not a member
112 Given the following communities 115 Given the following communities
113 | identifier | name | 116 | identifier | name |
@@ -117,6 +120,7 @@ Feature: chat @@ -117,6 +120,7 @@ Feature: chat
117 When I go to Autoramas's profile 120 When I go to Autoramas's profile
118 Then I should not see "Enter chat room" link 121 Then I should not see "Enter chat room" link
119 122
  123 + @selenium
120 Scenario: not see link to open chatroom of a community if xmpp_chat disabled 124 Scenario: not see link to open chatroom of a community if xmpp_chat disabled
121 Given the following communities 125 Given the following communities
122 | identifier | name | 126 | identifier | name |
features/comment.feature
@@ -18,7 +18,7 @@ Feature: comment @@ -18,7 +18,7 @@ Feature: comment
18 Scenario: not post a comment without javascript 18 Scenario: not post a comment without javascript
19 Given I am on /booking/article-to-comment 19 Given I am on /booking/article-to-comment
20 And I fill in "Name" with "Joey Ramone" 20 And I fill in "Name" with "Joey Ramone"
21 - And I fill in "e-Mail" with "joey@ramones.com" 21 + And I fill in "e-mail" with "joey@ramones.com"
22 And I fill in "Title" with "Hey ho, let's go!" 22 And I fill in "Title" with "Hey ho, let's go!"
23 And I fill in "Enter your comment" with "Hey ho, let's go!" 23 And I fill in "Enter your comment" with "Hey ho, let's go!"
24 When I press "Post comment" 24 When I press "Post comment"
@@ -28,7 +28,7 @@ Feature: comment @@ -28,7 +28,7 @@ Feature: comment
28 Scenario: post a comment while not authenticated 28 Scenario: post a comment while not authenticated
29 Given I am on /booking/article-to-comment 29 Given I am on /booking/article-to-comment
30 And I fill in "Name" with "Joey Ramone" 30 And I fill in "Name" with "Joey Ramone"
31 - And I fill in "e-Mail" with "joey@ramones.com" 31 + And I fill in "e-mail" with "joey@ramones.com"
32 And I fill in "Title" with "Hey ho, let's go!" 32 And I fill in "Title" with "Hey ho, let's go!"
33 And I fill in "Enter your comment" with "Hey ho, let's go!" 33 And I fill in "Enter your comment" with "Hey ho, let's go!"
34 When I press "Post comment" 34 When I press "Post comment"
@@ -67,7 +67,7 @@ Feature: comment @@ -67,7 +67,7 @@ Feature: comment
67 Scenario: disable post comment button 67 Scenario: disable post comment button
68 Given I am on /booking/article-to-comment 68 Given I am on /booking/article-to-comment
69 And I fill in "Name" with "Joey Ramone" 69 And I fill in "Name" with "Joey Ramone"
70 - And I fill in "e-Mail" with "joey@ramones.com" 70 + And I fill in "e-mail" with "joey@ramones.com"
71 And I fill in "Title" with "Hey ho, let's go!" 71 And I fill in "Title" with "Hey ho, let's go!"
72 And I fill in "Enter your comment" with "Hey ho, let's go!" 72 And I fill in "Enter your comment" with "Hey ho, let's go!"
73 When I press "Post comment" 73 When I press "Post comment"
features/contact.feature
@@ -12,16 +12,18 @@ In order to ask questions and solve problems @@ -12,16 +12,18 @@ In order to ask questions and solve problems
12 | sample-community | Sample Community | 12 | sample-community | Sample Community |
13 And I am logged in as "joaosilva" 13 And I am logged in as "joaosilva"
14 14
  15 + @selenium
15 Scenario: without states 16 Scenario: without states
16 Given I am on Sample Community's homepage 17 Given I am on Sample Community's homepage
17 - When I follow "Send an e-mail" 18 + When I follow "Send an e-mail" and wait
18 Then I should not see "City and state" 19 Then I should not see "City and state"
19 20
  21 + @selenium
20 Scenario: with states 22 Scenario: with states
21 Given the following states 23 Given the following states
22 | name | 24 | name |
23 | Bahia | 25 | Bahia |
24 And I am on Sample Community's homepage 26 And I am on Sample Community's homepage
25 - When I follow "Send an e-mail" 27 + When I follow "Send an e-mail" and wait
26 Then I should see "City and state" 28 Then I should see "City and state"
27 29
features/edit_article.feature
@@ -77,52 +77,57 @@ Feature: edit article @@ -77,52 +77,57 @@ Feature: edit article
77 Then I should see "My Article" 77 Then I should see "My Article"
78 And I should be on /joaosilva/my-article 78 And I should be on /joaosilva/my-article
79 79
  80 + @selenium
80 Scenario: edit an article 81 Scenario: edit an article
81 Given I am on Joao Silva's sitemap 82 Given I am on Joao Silva's sitemap
82 - And I follow "Save the whales"  
83 - And I follow "Edit" 83 + When I follow "Save the whales" and wait
  84 + And I follow "Edit" and wait
84 And I fill in "Title" with "My Article edited" 85 And I fill in "Title" with "My Article edited"
85 - When I press "Save" 86 + And I press "Save" and wait
86 Then I should be on /joaosilva/my-article-edited 87 Then I should be on /joaosilva/my-article-edited
87 88
  89 + @selenium
88 Scenario: cancel button back to article when edit 90 Scenario: cancel button back to article when edit
89 Given I am on Joao Silva's sitemap 91 Given I am on Joao Silva's sitemap
90 - And I follow "Save the whales"  
91 - And I follow "Edit"  
92 - When I follow "Cancel" within ".main-block" 92 + When I follow "Save the whales" and wait
  93 + And I follow "Edit" and wait
  94 + And I follow "Cancel" within ".main-block" and wait
93 Then I should be on /joaosilva/save-the-whales 95 Then I should be on /joaosilva/save-the-whales
94 96
  97 + @selenium
95 Scenario: create an article inside a folder 98 Scenario: create an article inside a folder
96 Given I am on Joao Silva's control panel 99 Given I am on Joao Silva's control panel
97 - And I follow "Manage Content" 100 + When I follow "Manage Content"
98 And I follow "New content" 101 And I follow "New content"
99 - And I follow "Folder" 102 + And I follow "Folder" and wait
100 And I fill in "Title" with "My Folder" 103 And I fill in "Title" with "My Folder"
101 - And I press "Save" 104 + And I press "Save" and wait
102 Then I should be on /joaosilva/my-folder 105 Then I should be on /joaosilva/my-folder
103 When I follow "New article" 106 When I follow "New article"
104 - And I follow "Text article with visual editor" 107 + And I follow "Text article with visual editor" and wait
105 And I fill in "Title" with "My Article" 108 And I fill in "Title" with "My Article"
106 - And I press "Save" 109 + And I press "Save" and wait
107 Then I should see "My Article" 110 Then I should see "My Article"
108 And I should be on /joaosilva/my-folder/my-article 111 And I should be on /joaosilva/my-folder/my-article
109 112
  113 + @selenium
110 Scenario: cancel button back to folder after giving up creating 114 Scenario: cancel button back to folder after giving up creating
111 Given I am on Joao Silva's control panel 115 Given I am on Joao Silva's control panel
112 - And I follow "Manage Content" 116 + When I follow "Manage Content"
113 And I follow "New content" 117 And I follow "New content"
114 - And I follow "Folder" 118 + And I follow "Folder" and wait
115 And I fill in "Title" with "My Folder" 119 And I fill in "Title" with "My Folder"
116 - And I press "Save" 120 + And I press "Save" and wait
117 Then I should be on /joaosilva/my-folder 121 Then I should be on /joaosilva/my-folder
118 When I follow "New article" 122 When I follow "New article"
119 - And I follow "Text article with visual editor"  
120 - When I follow "Cancel" within ".no-boxes"  
121 - And I should be on /joaosilva/my-folder 123 + And I follow "Text article with visual editor" and wait
  124 + And I follow "Cancel" within ".no-boxes" and wait
  125 + Then I should be on /joaosilva/my-folder
122 126
  127 + @selenium
123 Scenario: save and continue 128 Scenario: save and continue
124 Given I am on /joaosilva/save-the-whales 129 Given I am on /joaosilva/save-the-whales
125 - And I follow "Edit" 130 + And I follow "Edit" and wait
126 When I fill in "Text" with "new text" 131 When I fill in "Text" with "new text"
127 And I press "Save and continue" 132 And I press "Save and continue"
128 Then the "Text" field should contain "new text" 133 Then the "Text" field should contain "new text"
@@ -140,31 +145,33 @@ Feature: edit article @@ -140,31 +145,33 @@ Feature: edit article
140 And the "Title" field should contain "My new article" 145 And the "Title" field should contain "My new article"
141 And the "Text" field should contain "text for the new article" 146 And the "Text" field should contain "text for the new article"
142 147
  148 + @selenium
143 Scenario: add a translation to an article 149 Scenario: add a translation to an article
144 Given I am on Joao Silva's sitemap 150 Given I am on Joao Silva's sitemap
145 And I follow "Save the whales" 151 And I follow "Save the whales"
146 Then I should not see "Add translation" 152 Then I should not see "Add translation"
147 - And I follow "Edit" 153 + And I follow "Edit" and wait
148 And I select "English" from "Language" 154 And I select "English" from "Language"
149 - Then I press "Save"  
150 - And I follow "Add translation" 155 + Then I press "Save" and wait
  156 + And I follow "Add translation" and wait
151 And I fill in "Title" with "Mi neuvo artículo" 157 And I fill in "Title" with "Mi neuvo artículo"
152 And I select "Español" from "Language" 158 And I select "Español" from "Language"
153 - When I press "Save" 159 + When I press "Save" and wait
154 Then I should be on /joaosilva/mi-neuvo-articulo 160 Then I should be on /joaosilva/mi-neuvo-articulo
155 And I should see "Translations" 161 And I should see "Translations"
156 162
  163 + @selenium
157 Scenario: not add a translation without a language 164 Scenario: not add a translation without a language
158 Given the following articles 165 Given the following articles
159 | owner | name | language | 166 | owner | name | language |
160 | joaosilva | Article in English | en | 167 | joaosilva | Article in English | en |
161 And I am on Joao Silva's sitemap 168 And I am on Joao Silva's sitemap
162 - And I follow "Article in English"  
163 - And I follow "Add translation" 169 + When I follow "Article in English" and wait
  170 + And I follow "Add translation" and wait
164 And I fill in "Title" with "Article in Portuguese" 171 And I fill in "Title" with "Article in Portuguese"
165 - When I press "Save" 172 + And I press "Save" and wait
166 Then I should see "Language must be choosen" 173 Then I should see "Language must be choosen"
167 - And I select "Português" from "Language"  
168 - When I press "Save" 174 + When I select "Português" from "Language"
  175 + And I press "Save" and wait
169 Then I should not see "Language must be choosen" 176 Then I should not see "Language must be choosen"
170 And I should be on /joaosilva/article-in-portuguese 177 And I should be on /joaosilva/article-in-portuguese
features/edit_block_of_links.feature
@@ -14,9 +14,9 @@ Feature: edit_block_of_links @@ -14,9 +14,9 @@ Feature: edit_block_of_links
14 14
15 @selenium 15 @selenium
16 Scenario: show the icon selector 16 Scenario: show the icon selector
17 - And I follow "Edit sideboxes"  
18 - Given I follow "Edit" within ".link-list-block"  
19 - And I follow "New link"  
20 - And the ".icon-selector" should not be visible 17 + Given I follow "Edit sideboxes"
  18 + And I follow "Edit" within ".link-list-block"
  19 + When I follow "New link"
  20 + Then the "css=div.icon-selector" should not be visible
21 When I click ".icon" 21 When I click ".icon"
22 - Then the ".icon-selector" should be visible 22 + Then the "css=div.icon-selector" should be visible
features/events.feature
@@ -175,15 +175,16 @@ Feature: events @@ -175,15 +175,16 @@ Feature: events
175 When I am on /assets/events 175 When I am on /assets/events
176 Then I should see "Colivre.net's events" 176 Then I should see "Colivre.net's events"
177 177
  178 + @selenium
178 Scenario: published events should be listed in the agenda too 179 Scenario: published events should be listed in the agenda too
179 Given the following community 180 Given the following community
180 | identifier | name | 181 | identifier | name |
181 | sample-community | Sample Community | 182 | sample-community | Sample Community |
182 And I am logged in as "josesilva" 183 And I am logged in as "josesilva"
183 And "josesilva" is a member of "Sample Community" 184 And "josesilva" is a member of "Sample Community"
184 - And I am on josesilva's control panel  
185 - And I follow "Manage content"  
186 - And I follow "Another Conference" 185 + And I go to josesilva's control panel
  186 + And I follow "Manage Content"
  187 + And I follow "Another Conference" and wait
187 And I follow "Spread" 188 And I follow "Spread"
188 And I check "Sample Community" 189 And I check "Sample Community"
189 And I press "Spread this" 190 And I press "Spread this"
@@ -212,19 +213,18 @@ Feature: events @@ -212,19 +213,18 @@ Feature: events
212 And I am on josesilva's Event creation 213 And I am on josesilva's Event creation
213 Then I should see "Lead" 214 Then I should see "Lead"
214 215
  216 + @selenium
215 Scenario: events lead should be shown on blogs with short format 217 Scenario: events lead should be shown on blogs with short format
216 Given I am logged in as "josesilva" 218 Given I am logged in as "josesilva"
217 And I am on josesilva's control panel 219 And I am on josesilva's control panel
218 - And I follow "Configure blog" 220 + And I follow "Configure blog" and wait
219 And I select "First paragraph" from "How to display posts:" 221 And I select "First paragraph" from "How to display posts:"
220 And I press "Save" 222 And I press "Save"
221 And I follow "New post" 223 And I follow "New post"
222 - And I follow "Event"  
223 - And I follow "Lead"  
224 - And I fill in the following:  
225 - | Title | Leaded event |  
226 - | Information about the event | This is the real text.|  
227 - | Lead | This is the abstract. | 224 + And I follow "A calendar event" and wait
  225 + And I fill in "Title" with "Leaded event"
  226 + And I type "This is the abstract." in TinyMCE field "article_abstract"
  227 + And I type "This is the real text." in TinyMCE field "article_body"
228 And I press "Save" 228 And I press "Save"
229 When I am on josesilva's blog 229 When I am on josesilva's blog
230 Then I should see "Leaded event" 230 Then I should see "Leaded event"
features/forum.feature
@@ -10,13 +10,14 @@ Feature: forum @@ -10,13 +10,14 @@ Feature: forum
10 And "joaosilva" has no articles 10 And "joaosilva" has no articles
11 And I am logged in as "joaosilva" 11 And I am logged in as "joaosilva"
12 12
  13 + @selenium
13 Scenario: create a forum 14 Scenario: create a forum
14 - Given I go to the Control panel 15 + Given I am on Joao Silva's control panel
15 And I follow "Manage Content" 16 And I follow "Manage Content"
16 And I follow "New content" 17 And I follow "New content"
17 - When I follow "Forum" 18 + When I follow "Forum" and wait
18 And I fill in "Title" with "My Forum" 19 And I fill in "Title" with "My Forum"
19 - And I press "Save" 20 + And I press "Save" and wait
20 Then I should see "Configure forum" 21 Then I should see "Configure forum"
21 22
22 Scenario: redirect to forum after create forum from cms 23 Scenario: redirect to forum after create forum from cms
@@ -60,12 +61,13 @@ Feature: forum @@ -60,12 +61,13 @@ Feature: forum
60 When I follow "Cancel" within ".main-block" 61 When I follow "Cancel" within ".main-block"
61 Then I should be on /myprofile/joaosilva/cms 62 Then I should be on /myprofile/joaosilva/cms
62 63
  64 + @selenium
63 Scenario: configure forum when viewing it 65 Scenario: configure forum when viewing it
64 Given the following forums 66 Given the following forums
65 - | owner | name | 67 + | owner | name |
66 | joaosilva | Forum One | 68 | joaosilva | Forum One |
67 - And I go to /joaosilva/forum-one  
68 - When I follow "Configure forum" 69 + And I visit "/joaosilva/forum-one" and wait
  70 + When I follow "Configure forum" and wait
69 Then I should be on edit "Forum One" by joaosilva 71 Then I should be on edit "Forum One" by joaosilva
70 72
71 Scenario: last topic update by unautenticated user should not link 73 Scenario: last topic update by unautenticated user should not link
features/gallery_navigation.feature
@@ -7,20 +7,23 @@ Feature: gallery_navigation @@ -7,20 +7,23 @@ Feature: gallery_navigation
7 | login | 7 | login |
8 | marciopunk | 8 | marciopunk |
9 And the following galleries 9 And the following galleries
10 - | owner | name |  
11 - | marciopunk | my-gallery | 10 + | owner | name |
  11 + | marciopunk | my-gallery |
  12 + | marciopunk | other-gallery |
12 And the following files 13 And the following files
13 - | owner | file | mime | parent |  
14 - | marciopunk | rails.png | image/png | my-gallery |  
15 - | marciopunk | other-pic.jpg | image/jpeg | my-gallery | 14 + | owner | file | mime | parent |
  15 + | marciopunk | rails.png | image/png | my-gallery |
  16 + | marciopunk | rails.png | image/png | other-gallery |
  17 + | marciopunk | other-pic.jpg | image/jpeg | my-gallery |
16 18
17 Scenario: provide link to go to next image 19 Scenario: provide link to go to next image
18 Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true 20 Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true
19 Then I should see "Next »" 21 Then I should see "Next »"
20 22
  23 + @selenium
21 Scenario: view next image when follow next link 24 Scenario: view next image when follow next link
22 Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true 25 Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true
23 - When I follow "Next »" 26 + When I follow "Next »" and wait
24 Then I should see "rails.png" within ".title" 27 Then I should see "rails.png" within ".title"
25 28
26 Scenario: not link to next when in last image 29 Scenario: not link to next when in last image
@@ -32,9 +35,10 @@ Feature: gallery_navigation @@ -32,9 +35,10 @@ Feature: gallery_navigation
32 Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true 35 Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true
33 Then I should see "« Previous" 36 Then I should see "« Previous"
34 37
  38 + @selenium
35 Scenario: view previous image when follow previous link 39 Scenario: view previous image when follow previous link
36 Given I am on /marciopunk/my-gallery/rails.png?view=true 40 Given I am on /marciopunk/my-gallery/rails.png?view=true
37 - When I follow "« Previous" 41 + When I follow "« Previous" and wait
38 Then I should see "other-pic.jpg" within ".title" 42 Then I should see "other-pic.jpg" within ".title"
39 43
40 Scenario: not link to previous when in first image 44 Scenario: not link to previous when in first image
@@ -64,11 +68,11 @@ Feature: gallery_navigation @@ -64,11 +68,11 @@ Feature: gallery_navigation
64 When I follow "Go back to my-gallery" 68 When I follow "Go back to my-gallery"
65 Then I should be on /marciopunk/my-gallery 69 Then I should be on /marciopunk/my-gallery
66 70
  71 + @selenium
67 Scenario: image title in window title 72 Scenario: image title in window title
68 Given I am logged in as "marciopunk" 73 Given I am logged in as "marciopunk"
69 - And I go to /marciopunk/my-gallery/rails.png?view=true  
70 - When I follow "Edit" 74 + When I visit "/marciopunk/other-gallery/rails.png?view=true" and wait
  75 + And I follow "Edit" and wait
71 And I fill in "Title" with "Rails is cool" 76 And I fill in "Title" with "Rails is cool"
72 - And I press "Save"  
73 - And I go to /marciopunk/my-gallery/rails.png?view=true  
74 - And The page title should contain "Rails is cool" 77 + And I press "Save" and wait
  78 + Then The page title should contain "Rails is cool"
features/manage_inputs.feature
@@ -57,8 +57,8 @@ Feature: manage inputs @@ -57,8 +57,8 @@ Feature: manage inputs
57 Given I am logged in as "joaosilva" 57 Given I am logged in as "joaosilva"
58 When I go to Rede Moinho's page of product Abbey Road 58 When I go to Rede Moinho's page of product Abbey Road
59 And I follow "Inputs" 59 And I follow "Inputs"
60 - And I follow "Add the inputs or raw material used by this product"  
61 - When I follow "Cancel" 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"
62 Then I should see "Abbey Road" 62 Then I should see "Abbey Road"
63 And I should see "Add the inputs or raw material used by this product" 63 And I should see "Add the inputs or raw material used by this product"
64 64
@@ -182,12 +182,12 @@ Feature: manage inputs @@ -182,12 +182,12 @@ Feature: manage inputs
182 And I am logged in as "joaosilva" 182 And I am logged in as "joaosilva"
183 When I go to Rede Moinho's page of product Abbey Road 183 When I go to Rede Moinho's page of product Abbey Road
184 And I follow "Inputs" 184 And I follow "Inputs"
185 - And I follow "Click here to add price and the amount used" 185 + And I follow "Click here to add price and the amount used" and wait until ".input-details-form" is present
186 Then I should see "Cancel" 186 Then I should see "Cancel"
187 And I should see "Amount used" 187 And I should see "Amount used"
188 And I should see "Price" 188 And I should see "Price"
189 And I should see "This input or raw material inpact on the final price of the product?" 189 And I should see "This input or raw material inpact on the final price of the product?"
190 - When I follow "Cancel" 190 + When I click "css=a.cancel-edit-input"
191 Then I should see "Click here to add price and the amount used" 191 Then I should see "Click here to add price and the amount used"
192 192
193 @selenium 193 @selenium
@@ -215,6 +215,7 @@ Feature: manage inputs @@ -215,6 +215,7 @@ Feature: manage inputs
215 Then I should see "Rock" 215 Then I should see "Rock"
216 And I should not see "Add the inputs or raw material used by this product" 216 And I should not see "Add the inputs or raw material used by this product"
217 When I follow "Remove" 217 When I follow "Remove"
  218 + And I confirm
218 Then I should see "Add the inputs or raw material used by this product" 219 Then I should see "Add the inputs or raw material used by this product"
219 220
220 @selenium 221 @selenium
features/manage_products.feature
@@ -133,7 +133,7 @@ Feature: manage products @@ -133,7 +133,7 @@ Feature: manage products
133 And I am on Rede Moinho's control panel 133 And I am on Rede Moinho's control panel
134 And I follow "Manage Products and Services" 134 And I follow "Manage Products and Services"
135 When I follow "New product or service" 135 When I follow "New product or service"
136 - And I select "Toplevel Product ... »" and wait for jquery 136 + And I select "Toplevel Product Categories »" and wait for jquery
137 And I select "Category Level 1" and wait for jquery 137 And I select "Category Level 1" and wait for jquery
138 Then I should see "Toplevel Product Categories" link 138 Then I should see "Toplevel Product Categories" link
139 And I should not see "Category Level 1" link 139 And I should not see "Category Level 1" link
@@ -149,14 +149,14 @@ Feature: manage products @@ -149,14 +149,14 @@ Feature: manage products
149 149
150 @selenium 150 @selenium
151 Scenario: enable save button when select one category 151 Scenario: enable save button when select one category
152 - Given the following product_category 152 + Given I am logged in as "joaosilva"
  153 + And the following product_category
153 | name | 154 | name |
154 | Browsers (accept categories) | 155 | Browsers (accept categories) |
155 - Given I am logged in as "joaosilva"  
156 And I am on Rede Moinho's control panel 156 And I am on Rede Moinho's control panel
157 And I follow "Manage Products and Services" 157 And I follow "Manage Products and Services"
158 When I follow "New product or service" 158 When I follow "New product or service"
159 - And I select "Browsers (accept ..." and wait for jquery 159 + And I select "Browsers (accept categories)" and wait for jquery
160 Then the "Save and continue" button should be enabled 160 Then the "Save and continue" button should be enabled
161 161
162 @selenium 162 @selenium
@@ -290,7 +290,7 @@ Feature: manage products @@ -290,7 +290,7 @@ Feature: manage products
290 And I am logged in as "joaosilva" 290 And I am logged in as "joaosilva"
291 When I go to Rede Moinho's page of product Bike 291 When I go to Rede Moinho's page of product Bike
292 And I follow "Edit name" 292 And I follow "Edit name"
293 - And I fill in "product_name" with "Red bicycle" 293 + And I fill in "Red bicycle" for "product_name"
294 And I press "Save" 294 And I press "Save"
295 Then I should see "Red bicycle" 295 Then I should see "Red bicycle"
296 And I should be on Rede Moinho's page of product Red bicycle 296 And I should be on Rede Moinho's page of product Red bicycle
@@ -453,7 +453,7 @@ Feature: manage products @@ -453,7 +453,7 @@ Feature: manage products
453 | Nanonote nanotech with long long name | 453 | Nanonote nanotech with long long name |
454 And the following product_category 454 And the following product_category
455 | name | parent | 455 | name | parent |
456 - | Netbook Quantum | Super Quantum Computers | 456 + | Netbook Quantum | Super Quantum Computers with teraflops |
457 And I am logged in as "joaosilva" 457 And I am logged in as "joaosilva"
458 When I go to Rede Moinho's new product page 458 When I go to Rede Moinho's new product page
459 Then I should see "Nanonote nanotech with long lo..." 459 Then I should see "Nanonote nanotech with long lo..."
@@ -473,7 +473,7 @@ Feature: manage products @@ -473,7 +473,7 @@ Feature: manage products
473 And I am logged in as "joaosilva" 473 And I am logged in as "joaosilva"
474 When I go to Rede Moinho's page of product Bike 474 When I go to Rede Moinho's page of product Bike
475 And I follow "Edit name and unit" 475 And I follow "Edit name and unit"
476 - And I fill in "product_name" with "Red bicycle" 476 + And I fill in "Red bicycle" for "product_name"
477 And I select "Kilo" 477 And I select "Kilo"
478 And I press "Save" 478 And I press "Save"
479 Then I should see "Red bicycle - kilo" 479 Then I should see "Red bicycle - kilo"
@@ -489,7 +489,7 @@ Feature: manage products @@ -489,7 +489,7 @@ Feature: manage products
489 And I am logged in as "joaosilva" 489 And I am logged in as "joaosilva"
490 When I go to Rede Moinho's page of product Bike 490 When I go to Rede Moinho's page of product Bike
491 And I follow "Add price and other basic information" 491 And I follow "Add price and other basic information"
492 - And I fill in "product_price" with "10" 492 + And I fill in "10" for "product_price"
493 And I choose "No" 493 And I choose "No"
494 And I press "Save" 494 And I press "Save"
495 Then I should see "Product not available!" 495 Then I should see "Product not available!"
features/my_network_block.feature
@@ -13,30 +13,32 @@ Feature: my_network_block @@ -13,30 +13,32 @@ Feature: my_network_block
13 | identifier | name | public_profile | 13 | identifier | name | public_profile |
14 | public-community | Public Community | true | 14 | public-community | Public Community | true |
15 15
  16 + @selenium
16 Scenario: display how many public/private communities I am member 17 Scenario: display how many public/private communities I am member
17 - Given the following communities 18 + Given I am logged in as "joaosilva"
  19 + And the following communities
18 | identifier | name | owner | public_profile | 20 | identifier | name | owner | public_profile |
19 | other-public-community | Other Public Community | joaosilva | true | 21 | other-public-community | Other Public Community | joaosilva | true |
20 | private-community | Private Community | joaosilva | false | 22 | private-community | Private Community | joaosilva | false |
21 - And I am logged in as "joaosilva"  
22 And I am on Joao Silva's homepage 23 And I am on Joao Silva's homepage
23 - Then I should see "2 communities" 24 + And I should see "2 communities"
24 When I go to Public Community's homepage 25 When I go to Public Community's homepage
25 And I follow "Join" 26 And I follow "Join"
26 - When I go to Joao Silva's homepage 27 + And I go to Joao Silva's homepage
27 Then I should see "3 communities" 28 Then I should see "3 communities"
28 29
  30 + @selenium
29 Scenario: not display how many invisible communities I am member 31 Scenario: not display how many invisible communities I am member
30 - Given the following communities 32 + Given I am logged in as "joaosilva"
  33 + And the following communities
31 | identifier | name | owner | visible | 34 | identifier | name | owner | visible |
32 | visible-community | Visible Community | joaosilva | true | 35 | visible-community | Visible Community | joaosilva | true |
33 | not-visible-community | Not Visible Community | joaosilva | false | 36 | not-visible-community | Not Visible Community | joaosilva | false |
34 - And I am logged in as "joaosilva"  
35 And I am on Joao Silva's homepage 37 And I am on Joao Silva's homepage
36 - Then I should see "One community" 38 + And I should see "One community"
37 When I go to Public Community's homepage 39 When I go to Public Community's homepage
38 And I follow "Join" 40 And I follow "Join"
39 - When I go to Joao Silva's homepage 41 + And I go to Joao Silva's homepage
40 Then I should see "2 communities" 42 Then I should see "2 communities"
41 43
42 Scenario: display how many public/private friends I have 44 Scenario: display how many public/private friends I have
features/publish_article.feature
@@ -42,11 +42,12 @@ Feature: publish article @@ -42,11 +42,12 @@ Feature: publish article
42 Then I should see "Another name" 42 Then I should see "Another name"
43 And I should not see "Sample Article" 43 And I should not see "Sample Article"
44 44
  45 + @selenium
45 Scenario: getting an error message when publishing article with same name 46 Scenario: getting an error message when publishing article with same name
46 Given I am logged in as "joaosilva" 47 Given I am logged in as "joaosilva"
47 And "Joao Silva" is a member of "Sample Community" 48 And "Joao Silva" is a member of "Sample Community"
48 And I am on Joao Silva's control panel 49 And I am on Joao Silva's control panel
49 - And I follow "Manage Content" 50 + And I follow "Manage Content" and wait
50 And I follow "Spread" 51 And I follow "Spread"
51 And I check "Sample Community" 52 And I check "Sample Community"
52 And I press "Spread this" 53 And I press "Spread this"
@@ -56,11 +57,11 @@ Feature: publish article @@ -56,11 +57,11 @@ Feature: publish article
56 And I am on Maria Silva's control panel 57 And I am on Maria Silva's control panel
57 And I follow "Manage Content" 58 And I follow "Manage Content"
58 And I follow "New content" 59 And I follow "New content"
59 - And I follow "Text article with Textile markup language" 60 + And I follow "Text article with Textile markup language" and wait
60 And I fill in the following: 61 And I fill in the following:
61 | Title | Sample Article | 62 | Title | Sample Article |
62 | Text | this is Maria's first published article | 63 | Text | this is Maria's first published article |
63 - And I press "Save" 64 + And I press "Save" and wait
64 And I follow "Spread" 65 And I follow "Spread"
65 And I check "Sample Community" 66 And I check "Sample Community"
66 When I press "Spread this" 67 When I press "Spread this"
features/step_definitions/custom_webrat_steps.rb
1 When /^I should see "([^\"]+)" link$/ do |text| 1 When /^I should see "([^\"]+)" link$/ do |text|
2 - response.should have_selector("a:contains('#{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
3 end 7 end
4 8
5 When /^I should not see "([^\"]+)" link$/ do |text| 9 When /^I should not see "([^\"]+)" link$/ do |text|
features/step_definitions/noosfero_steps.rb
@@ -294,7 +294,11 @@ Given /^(.+) is disabled$/ do |enterprise_name| @@ -294,7 +294,11 @@ Given /^(.+) is disabled$/ do |enterprise_name|
294 end 294 end
295 295
296 Then /^The page title should contain "(.*)"$/ do |text| 296 Then /^The page title should contain "(.*)"$/ do |text|
297 - response.should have_selector("title:contains('#{text}')") 297 + if response.class.to_s == 'Webrat::SeleniumResponse'
  298 + response.selenium.text('css=title').should include(text)
  299 + else
  300 + response.should have_selector("title:contains('#{text}')")
  301 + end
298 end 302 end
299 303
300 Given /^the mailbox is empty$/ do 304 Given /^the mailbox is empty$/ do
features/step_definitions/selenium_steps.rb
@@ -85,6 +85,24 @@ Then /^&quot;([^\&quot;]*)&quot; should be (left|right) aligned$/ do |element_class, align| @@ -85,6 +85,24 @@ Then /^&quot;([^\&quot;]*)&quot; should be (left|right) aligned$/ do |element_class, align|
85 response.selenium.get_xpath_count("//*[contains(@class,'#{element_class}') and contains(@style,'float: #{align}')]").to_i.should be(1) 85 response.selenium.get_xpath_count("//*[contains(@class,'#{element_class}') and contains(@style,'float: #{align}')]").to_i.should be(1)
86 end 86 end
87 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 answer the captcha$/ do
  97 + question = response.selenium.get_text("//label[@for='task_captcha_solution']").match(/What is the result of '(.+) = \?'/)[1]
  98 + answer = eval(question)
  99 + response.selenium.type("id=task_captcha_solution", answer)
  100 +end
  101 +
  102 +When /^I refresh the page$/ do
  103 + response.selenium.refresh
  104 +end
  105 +
88 #### Noosfero specific steps #### 106 #### Noosfero specific steps ####
89 107
90 Then /^the select for category "([^\"]*)" should be visible$/ do |name| 108 Then /^the select for category "([^\"]*)" should be visible$/ do |name|
features/step_definitions/webrat_steps.rb
@@ -16,20 +16,49 @@ When /^I go to (.+)$/ do |page_name| @@ -16,20 +16,49 @@ When /^I go to (.+)$/ do |page_name|
16 visit path_to(page_name) 16 visit path_to(page_name)
17 end 17 end
18 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 +end
  23 +
19 When /^I press "([^\"]*)"$/ do |button| 24 When /^I press "([^\"]*)"$/ do |button|
20 click_button(button) 25 click_button(button)
21 end 26 end
22 27
  28 +When /^I press "([^\"]*)" and wait$/ do |button|
  29 + click_button(button)
  30 + selenium.wait_for_page_to_load(10000)
  31 +end
  32 +
23 When /^I follow "([^\"]*)"$/ do |link| 33 When /^I follow "([^\"]*)"$/ do |link|
24 click_link(link) 34 click_link(link)
25 end 35 end
26 36
  37 +When /^I follow "([^\"]*)" and wait$/ do |link|
  38 + click_link(link)
  39 + selenium.wait_for_page_to_load(10000)
  40 +end
  41 +
  42 +When /^I follow "([^\"]*)" and wait until "([^\"]*)" is present$/ do |link, element|
  43 + click_link(link)
  44 + selenium.wait_for_element(string_to_element_locator(element))
  45 +end
  46 +
27 When /^I follow "([^\"]*)" within "([^\"]*)"$/ do |link, parent| 47 When /^I follow "([^\"]*)" within "([^\"]*)"$/ do |link, parent|
28 click_link_within(parent, link) 48 click_link_within(parent, link)
29 end 49 end
30 50
  51 +When /^I follow "([^\"]*)" within "([^\"]*)" and wait$/ do |link, parent|
  52 + click_link_within(parent, link)
  53 + selenium.wait_for_page_to_load(10000)
  54 +end
  55 +
31 When /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value| 56 When /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value|
32 - fill_in(field, :with => value) 57 + if response.class.to_s == 'Webrat::SeleniumResponse'
  58 + response.selenium.type("//*[@id=//label[contains(., '#{field}')]/@for]", value)
  59 + else
  60 + fill_in(field, :with => value)
  61 + end
33 end 62 end
34 63
35 When /^I fill in "([^\"]*)" for "([^\"]*)"$/ do |value, field| 64 When /^I fill in "([^\"]*)" for "([^\"]*)"$/ do |value, field|
@@ -54,7 +83,11 @@ When /^I fill in the following:$/ do |fields| @@ -54,7 +83,11 @@ When /^I fill in the following:$/ do |fields|
54 end 83 end
55 84
56 When /^I select "([^\"]*)" from "([^\"]*)"$/ do |value, field| 85 When /^I select "([^\"]*)" from "([^\"]*)"$/ do |value, field|
57 - select(value, :from => field) 86 + if response.class.to_s == 'Webrat::SeleniumResponse'
  87 + response.selenium.select("//*[@id=//label[contains(., '#{field}')]/@for]", value)
  88 + else
  89 + select(value, :from => field)
  90 + end
58 end 91 end
59 92
60 # Use this step in conjunction with Rail's datetime_select helper. For example: 93 # Use this step in conjunction with Rail's datetime_select helper. For example:
@@ -173,7 +206,11 @@ Then /^I should not see \/([^\/]*)\/ within &quot;([^\&quot;]*)&quot;$/ do |regexp, selector| @@ -173,7 +206,11 @@ Then /^I should not see \/([^\/]*)\/ within &quot;([^\&quot;]*)&quot;$/ do |regexp, selector|
173 end 206 end
174 207
175 Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value| 208 Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value|
176 - field_labeled(field).value.should =~ /#{value}/ 209 + if response.class.to_s == 'Webrat::SeleniumResponse'
  210 + response.selenium.get_value("//*[@id=//label[contains(., '#{field}')]/@for]").should match(value)
  211 + else
  212 + field_labeled(field).value.should =~ /#{value}/
  213 + end
177 end 214 end
178 215
179 Then /^the "([^\"]*)" field should not contain "([^\"]*)"$/ do |field, value| 216 Then /^the "([^\"]*)" field should not contain "([^\"]*)"$/ do |field, value|
@@ -189,7 +226,11 @@ Then /^the &quot;([^\&quot;]*)&quot; checkbox should not be checked$/ do |label| @@ -189,7 +226,11 @@ Then /^the &quot;([^\&quot;]*)&quot; checkbox should not be checked$/ do |label|
189 end 226 end
190 227
191 Then /^I should be on (.+)$/ do |page_name| 228 Then /^I should be on (.+)$/ do |page_name|
192 - URI.parse(current_url).path.should == path_to(page_name) 229 + if response.class.to_s == 'Webrat::SeleniumResponse'
  230 + URI.parse(response.selenium.get_location).path.should == path_to(page_name)
  231 + else
  232 + URI.parse(current_url).path.should == path_to(page_name)
  233 + end
193 end 234 end
194 235
195 Then /^show me the page$/ do 236 Then /^show me the page$/ do
features/suggest_article.feature
@@ -22,23 +22,25 @@ Feature: suggest article @@ -22,23 +22,25 @@ Feature: suggest article
22 And I should see "suggested the publication of the article" 22 And I should see "suggested the publication of the article"
23 Then I should see "Highlight this article" within ".task_box" 23 Then I should see "Highlight this article" within ".task_box"
24 24
  25 + @selenium
25 Scenario: an article is suggested and the admin approve it 26 Scenario: an article is suggested and the admin approve it
26 Given I am on Sample Community's blog 27 Given I am on Sample Community's blog
27 - And I follow "Suggest an article"  
28 - And I fill in the following:  
29 - | Title | Suggestion |  
30 - | Your name | Some Guy |  
31 - | Email | someguy@somewhere.com |  
32 - | Lead | This is my suggestion's lead |  
33 - | Text | I like free software | 28 + And I follow "Suggest an article" and wait
  29 + And I fill in "Title" with "Suggestion"
  30 + And I fill in "Your name" with "Some Guy"
  31 + And I fill in "Email" with "someguy@somewhere.com"
  32 + And I type "This is my suggestion's lead" in TinyMCE field "task_article_abstract"
  33 + And I type "I like free software" in TinyMCE field "task_article_body"
  34 + And I answer the captcha
34 And I press "Save" 35 And I press "Save"
35 And I am logged in as "joaosilva" 36 And I am logged in as "joaosilva"
36 And I go to Sample Community's control panel 37 And I go to Sample Community's control panel
37 - When I follow "Process requests" 38 + When I follow "Process requests" and wait
38 Then I should see "suggested the publication of the article: Suggestion." 39 Then I should see "suggested the publication of the article: Suggestion."
39 When I choose "Accept" 40 When I choose "Accept"
40 And I select "sample-community/Blog" from "Select the folder where the article must be published" 41 And I select "sample-community/Blog" from "Select the folder where the article must be published"
41 And I press "Apply!" 42 And I press "Apply!"
42 And I go to Sample Community's blog 43 And I go to Sample Community's blog
  44 + And I refresh the page
43 Then I should see "Suggestion" 45 Then I should see "Suggestion"
44 Then I should see "I like free software" 46 Then I should see "I like free software"
features/support/selenium.rb
1 Webrat.configure do |config| 1 Webrat.configure do |config|
2 config.mode = :selenium 2 config.mode = :selenium
  3 + config.application_environment = :cucumber
  4 + config.selenium_browser_startup_timeout = 30000
3 end 5 end
4 6
5 Cucumber::Rails::World.use_transactional_fixtures = false 7 Cucumber::Rails::World.use_transactional_fixtures = false
lib/noosfero.rb
@@ -66,7 +66,7 @@ module Noosfero @@ -66,7 +66,7 @@ module Noosfero
66 if ENV['RAILS_ENV'] == 'development' 66 if ENV['RAILS_ENV'] == 'development'
67 development_url_options 67 development_url_options
68 elsif ENV['RAILS_ENV'] == 'cucumber' 68 elsif ENV['RAILS_ENV'] == 'cucumber'
69 - {:host => ''} 69 + Webrat.configuration.mode == :rails ? { :host => '' } : { :port => Webrat.configuration.application_port }
70 else 70 else
71 {} 71 {}
72 end 72 end
@@ -76,7 +76,6 @@ module Noosfero @@ -76,7 +76,6 @@ module Noosfero
76 @development_url_options || {} 76 @development_url_options || {}
77 end 77 end
78 78
79 -  
80 end 79 end
81 80
82 require 'noosfero/constants' 81 require 'noosfero/constants'
test/functional/content_viewer_controller_test.rb
@@ -358,42 +358,42 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -358,42 +358,42 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
358 assert_equal profile, assigns(:profile) 358 assert_equal profile, assigns(:profile)
359 end 359 end
360 360
361 - should 'give link to edit the article for owner ' do 361 + should 'give link to edit the article for owner' do
362 login_as('testinguser') 362 login_as('testinguser')
363 - get :view_page, :profile => 'testinguser', :page => []  
364 - assert_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/edit/#{@profile.home_page.id}" } } 363 + xhr :get, :view_page, :profile => 'testinguser', :page => [], :toolbar => true
  364 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/edit/#{@profile.home_page.id}" } }
365 end 365 end
366 should 'not give link to edit the article for non-logged-in people' do 366 should 'not give link to edit the article for non-logged-in people' do
367 - get :view_page, :profile => 'testinguser', :page => []  
368 - assert_no_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/edit/#{@profile.home_page.id}" } } 367 + xhr :get, :view_page, :profile => 'testinguser', :page => [], :toolbar => true
  368 + assert_no_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/edit/#{@profile.home_page.id}" } }
369 end 369 end
370 should 'not give link to edit article for other people' do 370 should 'not give link to edit article for other people' do
371 login_as(create_user('anotheruser').login) 371 login_as(create_user('anotheruser').login)
372 372
373 - get :view_page, :profile => 'testinguser', :page => []  
374 - assert_no_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/edit/#{@profile.home_page.id}" } } 373 + xhr :get, :view_page, :profile => 'testinguser', :page => [], :toolbar => true
  374 + assert_no_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/edit/#{@profile.home_page.id}" } }
375 end 375 end
376 376
377 should 'give link to create new article' do 377 should 'give link to create new article' do
378 login_as('testinguser') 378 login_as('testinguser')
379 - get :view_page, :profile => 'testinguser', :page => []  
380 - assert_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/new" } } 379 + xhr :get, :view_page, :profile => 'testinguser', :page => [], :toolbar => true
  380 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/new" } }
381 end 381 end
382 should 'give no link to create new article for non-logged in people ' do 382 should 'give no link to create new article for non-logged in people ' do
383 - get :view_page, :profile => 'testinguser', :page => []  
384 - assert_no_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/new" } } 383 + xhr :get, :view_page, :profile => 'testinguser', :page => [], :toolbar => true
  384 + assert_no_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/new" } }
385 end 385 end
386 should 'give no link to create new article for other people' do 386 should 'give no link to create new article for other people' do
387 login_as(create_user('anotheruser').login) 387 login_as(create_user('anotheruser').login)
388 - get :view_page, :profile => 'testinguser', :page => []  
389 - assert_no_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/new" } } 388 + xhr :get, :view_page, :profile => 'testinguser', :page => [], :toolbar => true
  389 + assert_no_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/new" } }
390 end 390 end
391 391
392 should 'give link to create new article inside folder' do 392 should 'give link to create new article inside folder' do
393 login_as('testinguser') 393 login_as('testinguser')
394 folder = Folder.create!(:name => 'myfolder', :profile => @profile) 394 folder = Folder.create!(:name => 'myfolder', :profile => @profile)
395 - get :view_page, :profile => 'testinguser', :page => [ 'myfolder' ]  
396 - assert_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/new?parent_id=#{folder.id}" } } 395 + xhr :get, :view_page, :profile => 'testinguser', :page => [ 'myfolder' ], :toolbar => true
  396 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/new?parent_id=#{folder.id}" } }
397 end 397 end
398 398
399 should 'not give access to private articles if logged off' do 399 should 'not give access to private articles if logged off' do
@@ -468,7 +468,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -468,7 +468,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
468 page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') 468 page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text')
469 login_as(profile.identifier) 469 login_as(profile.identifier)
470 470
471 - get :view_page, :profile => profile.identifier, :page => ['myarticle'] 471 + xhr :get, :view_page, :profile => profile.identifier, :page => ['myarticle'], :toolbar => true
472 472
473 assert_tag :tag => 'a', :attributes => {:href => ('/myprofile/' + profile.identifier + '/cms/publish/' + page.id.to_s)} 473 assert_tag :tag => 'a', :attributes => {:href => ('/myprofile/' + profile.identifier + '/cms/publish/' + page.id.to_s)}
474 end 474 end
@@ -501,7 +501,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -501,7 +501,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
501 prof.affiliate(profile, Profile::Roles.all_roles(prof.environment.id)) 501 prof.affiliate(profile, Profile::Roles.all_roles(prof.environment.id))
502 login_as(profile.identifier) 502 login_as(profile.identifier)
503 503
504 - get :view_page, :profile => prof.identifier, :page => ['myarticle'] 504 + xhr :get, :view_page, :profile => prof.identifier, :page => ['myarticle'], :toolbar => true
505 505
506 assert_no_tag :tag => 'a', :attributes => {:href => ('/myprofile/' + prof.identifier + '/cms/publish/' + page.id.to_s)} 506 assert_no_tag :tag => 'a', :attributes => {:href => ('/myprofile/' + prof.identifier + '/cms/publish/' + page.id.to_s)}
507 end 507 end
@@ -662,15 +662,15 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -662,15 +662,15 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
662 login_as('testinguser') 662 login_as('testinguser')
663 folder = Folder.create!(:name => 'myfolder', :profile => @profile) 663 folder = Folder.create!(:name => 'myfolder', :profile => @profile)
664 folder.children << TextileArticle.new(:name => 'children-article', :profile => @profile) 664 folder.children << TextileArticle.new(:name => 'children-article', :profile => @profile)
665 - get :view_page, :profile => 'testinguser', :page => [ 'myfolder', 'children-article' ]  
666 - assert_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/new?parent_id=#{folder.id}" } } 665 + xhr :get, :view_page, :profile => 'testinguser', :page => [ 'myfolder', 'children-article' ], :toolbar => true
  666 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/new?parent_id=#{folder.id}" } }
667 end 667 end
668 668
669 should "display 'New article' when create children of folder" do 669 should "display 'New article' when create children of folder" do
670 login_as(profile.identifier) 670 login_as(profile.identifier)
671 a = Folder.new(:name => 'article folder'); profile.articles << a; a.save! 671 a = Folder.new(:name => 'article folder'); profile.articles << a; a.save!
672 Article.stubs(:short_description).returns('bli') 672 Article.stubs(:short_description).returns('bli')
673 - get :view_page, :profile => profile.identifier, :page => [a.path] 673 + xhr :get, :view_page, :profile => profile.identifier, :page => [a.path], :toolbar => true
674 assert_tag :tag => 'a', :content => 'New article' 674 assert_tag :tag => 'a', :content => 'New article'
675 end 675 end
676 676
@@ -678,7 +678,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -678,7 +678,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
678 login_as(profile.identifier) 678 login_as(profile.identifier)
679 a = Blog.create!(:name => 'article folder', :profile => profile) 679 a = Blog.create!(:name => 'article folder', :profile => profile)
680 Article.stubs(:short_description).returns('bli') 680 Article.stubs(:short_description).returns('bli')
681 - get :view_page, :profile => profile.identifier, :page => [a.path] 681 + xhr :get, :view_page, :profile => profile.identifier, :page => [a.path], :toolbar => true
682 assert_tag :tag => 'a', :content => 'New post' 682 assert_tag :tag => 'a', :content => 'New post'
683 end 683 end
684 684
@@ -687,21 +687,21 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -687,21 +687,21 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
687 a = Blog.create!(:name => 'article folder', :profile => profile) 687 a = Blog.create!(:name => 'article folder', :profile => profile)
688 Article.stubs(:short_description).returns('bli') 688 Article.stubs(:short_description).returns('bli')
689 t = TextileArticle.create!(:name => 'first post', :parent => a, :profile => profile) 689 t = TextileArticle.create!(:name => 'first post', :parent => a, :profile => profile)
690 - get :view_page, :profile => profile.identifier, :page => [t.path] 690 + xhr :get, :view_page, :profile => profile.identifier, :page => [t.path], :toolbar => true
691 assert_tag :tag => 'a', :content => 'New post' 691 assert_tag :tag => 'a', :content => 'New post'
692 end 692 end
693 693
694 should 'display button to remove article' do 694 should 'display button to remove article' do
695 login_as(profile.identifier) 695 login_as(profile.identifier)
696 t = TextileArticle.create!(:name => 'article to destroy', :profile => profile) 696 t = TextileArticle.create!(:name => 'article to destroy', :profile => profile)
697 - get :view_page, :profile => profile.identifier, :page => [t.path] 697 + xhr :get, :view_page, :profile => profile.identifier, :page => [t.path], :toolbar => true
698 assert_tag :tag => 'a', :content => 'Delete', :attributes => {:href => "/myprofile/#{profile.identifier}/cms/destroy/#{t.id}"} 698 assert_tag :tag => 'a', :content => 'Delete', :attributes => {:href => "/myprofile/#{profile.identifier}/cms/destroy/#{t.id}"}
699 end 699 end
700 700
701 should 'not display delete button for homepage' do 701 should 'not display delete button for homepage' do
702 login_as(profile.identifier) 702 login_as(profile.identifier)
703 page = profile.home_page 703 page = profile.home_page
704 - get :view_page, :profile => profile.identifier, :page => page.explode_path 704 + xhr :get, :view_page, :profile => profile.identifier, :page => page.explode_path, :toolbar => true
705 assert_no_tag :tag => 'a', :content => 'Delete', :attributes => { :href => "/myprofile/#{profile.identifier}/cms/destroy/#{page.id}" } 705 assert_no_tag :tag => 'a', :content => 'Delete', :attributes => { :href => "/myprofile/#{profile.identifier}/cms/destroy/#{page.id}" }
706 end 706 end
707 707
@@ -746,7 +746,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -746,7 +746,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
746 should "display 'Upload files' when create children of image gallery" do 746 should "display 'Upload files' when create children of image gallery" do
747 login_as(profile.identifier) 747 login_as(profile.identifier)
748 f = Gallery.create!(:name => 'gallery', :profile => profile) 748 f = Gallery.create!(:name => 'gallery', :profile => profile)
749 - get :view_page, :profile => profile.identifier, :page => f.explode_path 749 + xhr :get, :view_page, :profile => profile.identifier, :page => f.explode_path, :toolbar => true
750 assert_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{f.id}/} 750 assert_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{f.id}/}
751 end 751 end
752 752
@@ -755,7 +755,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -755,7 +755,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
755 folder1 = Gallery.create!(:name => 'gallery1', :profile => profile) 755 folder1 = Gallery.create!(:name => 'gallery1', :profile => profile)
756 folder1.children << folder2 = Folder.new(:name => 'gallery2', :profile => profile) 756 folder1.children << folder2 = Folder.new(:name => 'gallery2', :profile => profile)
757 757
758 - get :view_page, :profile => profile.identifier, :page => folder2.explode_path 758 + xhr :get, :view_page, :profile => profile.identifier, :page => folder2.explode_path, :toolbar => true
759 assert_tag :tag => 'a', :content => 'New article', :attributes => {:href =>/parent_id=#{folder2.id}/} 759 assert_tag :tag => 'a', :content => 'New article', :attributes => {:href =>/parent_id=#{folder2.id}/}
760 end 760 end
761 761
@@ -763,7 +763,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -763,7 +763,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
763 login_as(profile.identifier) 763 login_as(profile.identifier)
764 folder = Gallery.create!(:name => 'gallery', :profile => profile) 764 folder = Gallery.create!(:name => 'gallery', :profile => profile)
765 file = UploadedFile.create!(:profile => profile, :parent => folder, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) 765 file = UploadedFile.create!(:profile => profile, :parent => folder, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'))
766 - get :view_page, :profile => profile.identifier, :page => file.explode_path, :view => true 766 + xhr :get, :view_page, :profile => profile.identifier, :page => file.explode_path, :view => true, :toolbar => true
767 767
768 assert_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{folder.id}/} 768 assert_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{folder.id}/}
769 end 769 end
@@ -863,7 +863,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -863,7 +863,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
863 should "not display 'Upload files' when viewing blog" do 863 should "not display 'Upload files' when viewing blog" do
864 login_as(profile.identifier) 864 login_as(profile.identifier)
865 b = Blog.create!(:name => 'article folder', :profile => profile) 865 b = Blog.create!(:name => 'article folder', :profile => profile)
866 - get :view_page, :profile => profile.identifier, :page => b.explode_path 866 + xhr :get, :view_page, :profile => profile.identifier, :page => b.explode_path, :toolbar => true
867 assert_no_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{b.id}/} 867 assert_no_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{b.id}/}
868 end 868 end
869 869
@@ -871,7 +871,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -871,7 +871,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
871 login_as(profile.identifier) 871 login_as(profile.identifier)
872 b = Blog.create!(:name => 'article folder', :profile => profile) 872 b = Blog.create!(:name => 'article folder', :profile => profile)
873 blog_post = TextileArticle.create!(:name => 'children-article', :profile => profile, :parent => b) 873 blog_post = TextileArticle.create!(:name => 'children-article', :profile => profile, :parent => b)
874 - get :view_page, :profile => profile.identifier, :page => blog_post.explode_path 874 + xhr :get, :view_page, :profile => profile.identifier, :page => blog_post.explode_path, :toolbar => true
875 assert_no_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{b.id}/} 875 assert_no_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{b.id}/}
876 end 876 end
877 877
@@ -913,7 +913,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -913,7 +913,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
913 login_as u.identifier 913 login_as u.identifier
914 a = c.articles.create!(:name => 'test-article', :last_changed_by => profile, :published => true) 914 a = c.articles.create!(:name => 'test-article', :last_changed_by => profile, :published => true)
915 915
916 - get :view_page, :profile => c.identifier, :page => a.explode_path 916 + xhr :get, :view_page, :profile => c.identifier, :page => a.explode_path, :toolbar => true
917 917
918 assert_tag :tag => 'a', :content => 'New article' 918 assert_tag :tag => 'a', :content => 'New article'
919 end 919 end
@@ -963,8 +963,8 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -963,8 +963,8 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
963 should 'display link to edit blog for allowed' do 963 should 'display link to edit blog for allowed' do
964 blog = fast_create(Blog, :profile_id => profile.id, :path => 'blog') 964 blog = fast_create(Blog, :profile_id => profile.id, :path => 'blog')
965 login_as(profile.identifier) 965 login_as(profile.identifier)
966 - get :view_page, :profile => profile.identifier, :page => blog.explode_path  
967 - assert_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/edit/#{blog.id}" }, :content => 'Configure blog' } 966 + xhr :get, :view_page, :profile => profile.identifier, :page => blog.explode_path, :toolbar => true
  967 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/edit/#{blog.id}" }, :content => 'Configure blog' }
968 end 968 end
969 969
970 # Forum 970 # Forum
@@ -1054,7 +1054,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -1054,7 +1054,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
1054 login_as(profile.identifier) 1054 login_as(profile.identifier)
1055 a = Forum.create!(:name => 'article folder', :profile => profile) 1055 a = Forum.create!(:name => 'article folder', :profile => profile)
1056 Article.stubs(:short_description).returns('bli') 1056 Article.stubs(:short_description).returns('bli')
1057 - get :view_page, :profile => profile.identifier, :page => [a.path] 1057 + xhr :get, :view_page, :profile => profile.identifier, :page => [a.path], :toolbar => true
1058 assert_tag :tag => 'a', :content => 'New discussion topic' 1058 assert_tag :tag => 'a', :content => 'New discussion topic'
1059 end 1059 end
1060 1060
@@ -1063,7 +1063,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -1063,7 +1063,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
1063 a = Forum.create!(:name => 'article folder', :profile => profile) 1063 a = Forum.create!(:name => 'article folder', :profile => profile)
1064 Article.stubs(:short_description).returns('bli') 1064 Article.stubs(:short_description).returns('bli')
1065 t = TextileArticle.create!(:name => 'first post', :parent => a, :profile => profile) 1065 t = TextileArticle.create!(:name => 'first post', :parent => a, :profile => profile)
1066 - get :view_page, :profile => profile.identifier, :page => [t.path] 1066 + xhr :get, :view_page, :profile => profile.identifier, :page => [t.path], :toolbar => true
1067 assert_tag :tag => 'a', :content => 'New discussion topic' 1067 assert_tag :tag => 'a', :content => 'New discussion topic'
1068 end 1068 end
1069 1069
@@ -1085,7 +1085,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -1085,7 +1085,7 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
1085 should "not display 'Upload files' when viewing forum" do 1085 should "not display 'Upload files' when viewing forum" do
1086 login_as(profile.identifier) 1086 login_as(profile.identifier)
1087 b = Forum.create!(:name => 'article folder', :profile => profile) 1087 b = Forum.create!(:name => 'article folder', :profile => profile)
1088 - get :view_page, :profile => profile.identifier, :page => b.explode_path 1088 + xhr :get, :view_page, :profile => profile.identifier, :page => b.explode_path, :toolbar => true
1089 assert_no_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{b.id}/} 1089 assert_no_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{b.id}/}
1090 end 1090 end
1091 1091
@@ -1093,43 +1093,43 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -1093,43 +1093,43 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
1093 login_as(profile.identifier) 1093 login_as(profile.identifier)
1094 b = Forum.create!(:name => 'article folder', :profile => profile) 1094 b = Forum.create!(:name => 'article folder', :profile => profile)
1095 forum_post = TextileArticle.create!(:name => 'children-article', :profile => profile, :parent => b) 1095 forum_post = TextileArticle.create!(:name => 'children-article', :profile => profile, :parent => b)
1096 - get :view_page, :profile => profile.identifier, :page => forum_post.explode_path 1096 + xhr :get, :view_page, :profile => profile.identifier, :page => forum_post.explode_path, :toolbar => true
1097 assert_no_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{b.id}/} 1097 assert_no_tag :tag => 'a', :content => 'Upload files', :attributes => {:href => /parent_id=#{b.id}/}
1098 end 1098 end
1099 1099
1100 should 'display link to edit forum for allowed' do 1100 should 'display link to edit forum for allowed' do
1101 forum = fast_create(Forum, :profile_id => profile.id, :path => 'forum') 1101 forum = fast_create(Forum, :profile_id => profile.id, :path => 'forum')
1102 login_as(profile.identifier) 1102 login_as(profile.identifier)
1103 - get :view_page, :profile => profile.identifier, :page => forum.explode_path  
1104 - assert_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/edit/#{forum.id}" }, :content => 'Configure forum' } 1103 + xhr :get, :view_page, :profile => profile.identifier, :page => forum.explode_path, :toolbar => true
  1104 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/myprofile/testinguser/cms/edit/#{forum.id}" }, :content => 'Configure forum' }
1105 end 1105 end
1106 1106
1107 should 'display add translation link if article is translatable' do 1107 should 'display add translation link if article is translatable' do
1108 login_as @profile.identifier 1108 login_as @profile.identifier
1109 textile = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'textile', :language => 'en') 1109 textile = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'textile', :language => 'en')
1110 - get :view_page, :profile => @profile.identifier, :page => textile.explode_path 1110 + xhr :get, :view_page, :profile => @profile.identifier, :page => textile.explode_path, :toolbar => true
1111 assert_tag :a, :attributes => { :href => "/myprofile/#{profile.identifier}/cms/new?article%5Btranslation_of_id%5D=#{textile.id}&amp;type=#{TextileArticle}" } 1111 assert_tag :a, :attributes => { :href => "/myprofile/#{profile.identifier}/cms/new?article%5Btranslation_of_id%5D=#{textile.id}&amp;type=#{TextileArticle}" }
1112 end 1112 end
1113 1113
1114 should 'not display add translation link if article is not translatable' do 1114 should 'not display add translation link if article is not translatable' do
1115 login_as @profile.identifier 1115 login_as @profile.identifier
1116 blog = fast_create(Blog, :profile_id => @profile.id, :path => 'blog') 1116 blog = fast_create(Blog, :profile_id => @profile.id, :path => 'blog')
1117 - get :view_page, :profile => @profile.identifier, :page => blog.explode_path 1117 + xhr :get, :view_page, :profile => @profile.identifier, :page => blog.explode_path, :toolbar => true
1118 assert_no_tag :a, :attributes => { :content => 'Add translation', :class => /icon-locale/ } 1118 assert_no_tag :a, :attributes => { :content => 'Add translation', :class => /icon-locale/ }
1119 end 1119 end
1120 1120
1121 should 'not display add translation link if article hasnt a language defined' do 1121 should 'not display add translation link if article hasnt a language defined' do
1122 login_as @profile.identifier 1122 login_as @profile.identifier
1123 textile = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'textile') 1123 textile = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'textile')
1124 - get :view_page, :profile => @profile.identifier, :page => textile.explode_path 1124 + xhr :get, :view_page, :profile => @profile.identifier, :page => textile.explode_path, :toolbar => true
1125 assert_no_tag :a, :attributes => { :content => 'Add translation', :class => /icon-locale/ } 1125 assert_no_tag :a, :attributes => { :content => 'Add translation', :class => /icon-locale/ }
1126 end 1126 end
1127 1127
1128 - should 'diplay translations link if article has translations' do 1128 + should 'display translations link if article has translations' do
1129 login_as @profile.identifier 1129 login_as @profile.identifier
1130 textile = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'textile', :language => 'en') 1130 textile = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'textile', :language => 'en')
1131 translation = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'translation', :language => 'es', :translation_of_id => textile) 1131 translation = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'translation', :language => 'es', :translation_of_id => textile)
1132 - get :view_page, :profile => @profile.identifier, :page => textile.explode_path 1132 + xhr :get, :view_page, :profile => @profile.identifier, :page => textile.explode_path, :toolbar => true
1133 assert_tag :a, :attributes => { :class => /article-translations-menu/, :onclick => /toggleSubmenu/ } 1133 assert_tag :a, :attributes => { :class => /article-translations-menu/, :onclick => /toggleSubmenu/ }
1134 end 1134 end
1135 1135
@@ -1377,9 +1377,15 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -1377,9 +1377,15 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
1377 should 'suggest article link displayed into article-actions div' do 1377 should 'suggest article link displayed into article-actions div' do
1378 community = fast_create(Community) 1378 community = fast_create(Community)
1379 blog = fast_create(Blog, :profile_id => community.id, :path => 'blog') 1379 blog = fast_create(Blog, :profile_id => community.id, :path => 'blog')
1380 - get :view_page, :profile => community.identifier, :page => [ 'blog' ]  
1381 - assert_tag :tag => 'div', :attributes => {:id => 'article-actions'},  
1382 - :descendant => {:tag => 'a', :attributes => {:id => 'suggest-article-link'}} 1380 + xhr :get, :view_page, :profile => community.identifier, :page => [ 'blog' ], :toolbar => true
  1381 + assert_tag :tag => 'a', :attributes => { :id => 'suggest-article-link' }
  1382 + end
  1383 +
  1384 + should 'render toolbar when it is an ajax request' do
  1385 + community = fast_create(Community)
  1386 + blog = fast_create(Blog, :profile_id => community.id, :path => 'blog')
  1387 + xhr :get, :view_page, :profile => community.identifier, :page => ['blog'], :toolbar => true
  1388 + assert_tag :tag => 'div', :attributes => { :id => 'article-header' }
1383 end 1389 end
1384 1390
1385 end 1391 end
test/functional/profile_controller_test.rb
@@ -174,8 +174,9 @@ class ProfileControllerTest &lt; Test::Unit::TestCase @@ -174,8 +174,9 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
174 174
175 should 'not show Leave This Community button for non-registered users' do 175 should 'not show Leave This Community button for non-registered users' do
176 community = Community.create!(:name => 'my test community') 176 community = Community.create!(:name => 'my test community')
177 - get :index, :profile => community.identifier  
178 - assert_no_tag :tag => 'a', :attributes => { :href => "/profile/#{@profile.identifier}/leave" } 177 + community.boxes.first.blocks << block = ProfileInfoBlock.create!
  178 + get :profile_info, :profile => community.identifier, :block_id => block.id
  179 + assert_no_match /\/profile\/#{@profile.identifier}\/leave/, @response.body
179 end 180 end
180 181
181 should 'check access before displaying profile' do 182 should 'check access before displaying profile' do
@@ -190,26 +191,29 @@ class ProfileControllerTest &lt; Test::Unit::TestCase @@ -190,26 +191,29 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
190 should 'display add friend button' do 191 should 'display add friend button' do
191 login_as(@profile.identifier) 192 login_as(@profile.identifier)
192 friend = create_user_full('friendtestuser').person 193 friend = create_user_full('friendtestuser').person
193 - get :index, :profile => friend.identifier  
194 - assert_tag :tag => 'a', :content => 'Add friend' 194 + friend.boxes.first.blocks << block = ProfileInfoBlock.create!
  195 + get :profile_info, :profile => friend.identifier, :block_id => block.id
  196 + assert_match /Add friend/, @response.body
195 end 197 end
196 198
197 should 'not display add friend button if user already request friendship' do 199 should 'not display add friend button if user already request friendship' do
198 login_as(@profile.identifier) 200 login_as(@profile.identifier)
199 friend = create_user_full('friendtestuser').person 201 friend = create_user_full('friendtestuser').person
  202 + friend.boxes.first.blocks << block = ProfileInfoBlock.create!
200 AddFriend.create!(:person => @profile, :friend => friend) 203 AddFriend.create!(:person => @profile, :friend => friend)
201 - get :index, :profile => friend.identifier  
202 - assert_no_tag :tag => 'a', :content => 'Add friend' 204 + get :profile_info, :profile => friend.identifier, :block_id => block.id
  205 + assert_no_match /Add friend/, @response.body
203 end 206 end
204 207
205 should 'not display add friend button if user already friend' do 208 should 'not display add friend button if user already friend' do
206 login_as(@profile.identifier) 209 login_as(@profile.identifier)
207 friend = create_user_full('friendtestuser').person 210 friend = create_user_full('friendtestuser').person
  211 + friend.boxes.first.blocks << block = ProfileInfoBlock.create!
208 @profile.add_friend(friend) 212 @profile.add_friend(friend)
209 @profile.friends.reload 213 @profile.friends.reload
210 assert @profile.is_a_friend?(friend) 214 assert @profile.is_a_friend?(friend)
211 - get :index, :profile => friend.identifier  
212 - assert_no_tag :tag => 'a', :content => 'Add friend' 215 + get :profile_info, :profile => friend.identifier, :block_id => block.id
  216 + assert_no_match /Add friend/, @response.body
213 end 217 end
214 218
215 should 'show message for disabled enterprise' do 219 should 'show message for disabled enterprise' do
@@ -293,82 +297,91 @@ class ProfileControllerTest &lt; Test::Unit::TestCase @@ -293,82 +297,91 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
293 297
294 should 'display contact us for enterprises' do 298 should 'display contact us for enterprises' do
295 ent = Enterprise.create!(:name => 'my test enterprise', :identifier => 'my-test-enterprise') 299 ent = Enterprise.create!(:name => 'my test enterprise', :identifier => 'my-test-enterprise')
296 - get :index, :profile => 'my-test-enterprise'  
297 - assert_tag :tag => 'a', :attributes => { :href => "/contact/my-test-enterprise/new" }, :content => /Send/ 300 + ent.boxes.first.blocks << block = ProfileInfoBlock.create!
  301 + get :profile_info, :profile => 'my-test-enterprise', :block_id => block.id
  302 + assert_match /\/contact\/my-test-enterprise\/new/, @response.body
298 end 303 end
299 304
300 should 'not display contact us for non-enterprises' do 305 should 'not display contact us for non-enterprises' do
301 - get :index, :profile => @profile.identifier  
302 - assert_no_tag :tag => 'a', :attributes => { :href => "/contact/#{@profile.identifier}/new" }, :content => /Send/ 306 + @profile.boxes.first.blocks << block = ProfileInfoBlock.create!
  307 + get :profile_info, :profile => @profile, :block_id => block.id
  308 + assert_no_match /\/contact\/#{@profile.identifier}\/new/, @response.body
303 end 309 end
304 310
305 should 'display contact us only if enabled' do 311 should 'display contact us only if enabled' do
306 - ent = fast_create(Enterprise, :name => 'my test enterprise', :identifier => 'my-test-enterprise') 312 + ent = Enterprise.create! :name => 'my test enterprise', :identifier => 'my-test-enterprise'
  313 + ent.boxes.first.blocks << block = ProfileInfoBlock.create!
307 ent.update_attribute(:enable_contact_us, false) 314 ent.update_attribute(:enable_contact_us, false)
308 - get :index, :profile => 'my-test-enterprise'  
309 - assert_no_tag :tag => 'a', :attributes => { :href => "/contact/my-test-enterprise/new" }, :content => /Send/ 315 + get :profile_info, :profile => 'my-test-enterprise', :block_id => block.id
  316 + assert_no_match /\/contact\/my-test-enterprise\/new/, @response.body
310 end 317 end
311 318
312 should 'display contact button only if friends' do 319 should 'display contact button only if friends' do
313 friend = create_user_full('friend_user').person 320 friend = create_user_full('friend_user').person
  321 + friend.boxes.first.blocks << block = ProfileInfoBlock.create!
314 @profile.add_friend(friend) 322 @profile.add_friend(friend)
315 env = Environment.default 323 env = Environment.default
316 env.disable('disable_contact_person') 324 env.disable('disable_contact_person')
317 env.save! 325 env.save!
318 login_as(@profile.identifier) 326 login_as(@profile.identifier)
319 - get :index, :profile => friend.identifier  
320 - assert_tag :tag => 'a', :attributes => { :href => "/contact/#{friend.identifier}/new" } 327 + get :profile_info, :profile => friend.identifier, :block_id => block.id
  328 + assert_match /\/contact\/#{friend.identifier}\/new/, @response.body
321 end 329 end
322 330
323 should 'not display contact button if no friends' do 331 should 'not display contact button if no friends' do
324 nofriend = create_user_full('no_friend').person 332 nofriend = create_user_full('no_friend').person
  333 + nofriend.boxes.first.blocks << block = ProfileInfoBlock.create!
325 login_as(@profile.identifier) 334 login_as(@profile.identifier)
326 - get :index, :profile => nofriend.identifier  
327 - assert_no_tag :tag => 'a', :attributes => { :href => "/contact/#{nofriend.identifier}/new" } 335 + get :profile_info, :profile => nofriend.identifier, :block_id => block.id
  336 + assert_no_match /\/contact\/#{nofriend.identifier}\/new/, @response.body
328 end 337 end
329 338
330 should 'display contact button only if friends and its enable in environment' do 339 should 'display contact button only if friends and its enable in environment' do
331 friend = create_user_full('friend_user').person 340 friend = create_user_full('friend_user').person
  341 + friend.boxes.first.blocks << block = ProfileInfoBlock.create!
332 env = Environment.default 342 env = Environment.default
333 env.disable('disable_contact_person') 343 env.disable('disable_contact_person')
334 env.save! 344 env.save!
335 @profile.add_friend(friend) 345 @profile.add_friend(friend)
336 login_as(@profile.identifier) 346 login_as(@profile.identifier)
337 - get :index, :profile => friend.identifier  
338 - assert_tag :tag => 'a', :attributes => { :href => "/contact/#{friend.identifier}/new" } 347 + get :profile_info, :profile => friend.identifier, :block_id => block.id
  348 + assert_match /\/contact\/#{friend.identifier}\/new/, @response.body
339 end 349 end
340 350
341 should 'not display contact button if friends and its disable in environment' do 351 should 'not display contact button if friends and its disable in environment' do
342 friend = create_user_full('friend_user').person 352 friend = create_user_full('friend_user').person
  353 + friend.boxes.first.blocks << block = ProfileInfoBlock.create!
343 env = Environment.default 354 env = Environment.default
344 env.enable('disable_contact_person') 355 env.enable('disable_contact_person')
345 env.save! 356 env.save!
346 @profile.add_friend(friend) 357 @profile.add_friend(friend)
347 login_as(@profile.identifier) 358 login_as(@profile.identifier)
348 - get :index, :profile => friend.identifier  
349 - assert_no_tag :tag => 'a', :attributes => { :href => "/contact/#{friend.identifier}/new" } 359 + get :profile_info, :profile => friend.identifier, :block_id => block.id
  360 + assert_no_match /\/contact\/#{friend.identifier}\/new/, @response.body
350 end 361 end
351 362
352 should 'display contact button for community if its enable in environment' do 363 should 'display contact button for community if its enable in environment' do
353 env = Environment.default 364 env = Environment.default
354 community = Community.create!(:name => 'my test community', :environment => env) 365 community = Community.create!(:name => 'my test community', :environment => env)
  366 + community.boxes.first.blocks << block = ProfileInfoBlock.create!
355 env.disable('disable_contact_community') 367 env.disable('disable_contact_community')
356 env.save! 368 env.save!
357 community.add_member(@profile) 369 community.add_member(@profile)
358 login_as(@profile.identifier) 370 login_as(@profile.identifier)
359 - get :index, :profile => community.identifier  
360 - assert_tag :tag => 'a', :attributes => { :href => "/contact/#{community.identifier}/new" } 371 + get :profile_info, :profile => community.identifier, :block_id => block.id
  372 + assert_match /\/contact\/#{community.identifier}\/new/, @response.body
361 end 373 end
362 374
363 should 'not display contact button for community if its disable in environment' do 375 should 'not display contact button for community if its disable in environment' do
364 env = Environment.default 376 env = Environment.default
365 community = Community.create!(:name => 'my test community', :environment => env) 377 community = Community.create!(:name => 'my test community', :environment => env)
  378 + community.boxes.first.blocks << block = ProfileInfoBlock.create!
366 env.enable('disable_contact_community') 379 env.enable('disable_contact_community')
367 env.save! 380 env.save!
368 community.add_member(@profile) 381 community.add_member(@profile)
369 login_as(@profile.identifier) 382 login_as(@profile.identifier)
370 - get :index, :profile => community.identifier  
371 - assert_no_tag :tag => 'a', :attributes => { :href => "/contact/#{community.identifier}/new" } 383 + get :profile_info, :profile => community.identifier, :block_id => block.id
  384 + assert_no_match /\/contact\/#{community.identifier}\/new/, @response.body
372 end 385 end
373 386
374 should 'actually join profile' do 387 should 'actually join profile' do
test/functional/themes_controller_test.rb
@@ -145,7 +145,7 @@ class ThemesControllerTest &lt; Test::Unit::TestCase @@ -145,7 +145,7 @@ class ThemesControllerTest &lt; Test::Unit::TestCase
145 145
146 should 'display dialog for creating new CSS' do 146 should 'display dialog for creating new CSS' do
147 theme = Theme.create('mytheme', :owner => profile) 147 theme = Theme.create('mytheme', :owner => profile)
148 - @request.expects(:xhr?).returns(true) 148 + @request.stubs(:xhr?).returns(true)
149 get :add_css, :profile => 'testinguser', :id => 'mytheme' 149 get :add_css, :profile => 'testinguser', :id => 'mytheme'
150 150
151 assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/themes/add_css/mytheme', :method => /post/i} 151 assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/themes/add_css/mytheme', :method => /post/i}
@@ -204,7 +204,7 @@ class ThemesControllerTest &lt; Test::Unit::TestCase @@ -204,7 +204,7 @@ class ThemesControllerTest &lt; Test::Unit::TestCase
204 204
205 should 'display the "add image" dialog' do 205 should 'display the "add image" dialog' do
206 theme = Theme.create('mytheme', :owner => profile) 206 theme = Theme.create('mytheme', :owner => profile)
207 - @request.expects(:xhr?).returns(true) 207 + @request.stubs(:xhr?).returns(true)
208 208
209 get :add_image, :profile => 'testinguser', :id => 'mytheme' 209 get :add_image, :profile => 'testinguser', :id => 'mytheme'
210 assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/themes/add_image/mytheme', :method => /post/i, :enctype => 'multipart/form-data' }, :descendant => { :tag => 'input', :attributes => { :name => 'image', :type => 'file' } } 210 assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/themes/add_image/mytheme', :method => /post/i, :enctype => 'multipart/form-data' }, :descendant => { :tag => 'input', :attributes => { :name => 'image', :type => 'file' } }
@@ -212,7 +212,7 @@ class ThemesControllerTest &lt; Test::Unit::TestCase @@ -212,7 +212,7 @@ class ThemesControllerTest &lt; Test::Unit::TestCase
212 212
213 should 'be able to add new image to theme' do 213 should 'be able to add new image to theme' do
214 theme = Theme.create('mytheme', :owner => profile) 214 theme = Theme.create('mytheme', :owner => profile)
215 - @request.expects(:xhr?).returns(false) 215 + @request.stubs(:xhr?).returns(false)
216 216
217 post :add_image, :profile => 'testinguser', :id => 'mytheme', :image => fixture_file_upload('/files/rails.png', 'image/png', :binary) 217 post :add_image, :profile => 'testinguser', :id => 'mytheme', :image => fixture_file_upload('/files/rails.png', 'image/png', :binary)
218 assert_redirected_to :action => "edit", :id => 'mytheme' 218 assert_redirected_to :action => "edit", :id => 'mytheme'
test/unit/lightbox_helper_test.rb
@@ -56,4 +56,10 @@ class LightboxHelperTest &lt; Test::Unit::TestCase @@ -56,4 +56,10 @@ class LightboxHelperTest &lt; Test::Unit::TestCase
56 assert lightbox? 56 assert lightbox?
57 end 57 end
58 58
  59 + should 'provide lightbox_remote_button' do
  60 + expects(:button).with('type', 'label', { :action => 'popup'}, has_entries({ :class => 'remote-lbOn' })).returns('[button]')
  61 +
  62 + assert_equal '[button]', lightbox_remote_button('type', 'label', { :action => 'popup'})
  63 + end
  64 +
59 end 65 end
vendor/plugins/noosfero_caching/init.rb
@@ -17,7 +17,7 @@ module NoosferoHttpCaching @@ -17,7 +17,7 @@ module NoosferoHttpCaching
17 if request.path == '/' 17 if request.path == '/'
18 n = environment.home_cache_in_minutes 18 n = environment.home_cache_in_minutes
19 else 19 else
20 - if params[:controller] != 'account' && request.path !~ /^\/admin/ 20 + if params[:controller] != 'account' && !request.xhr? && request.path !~ /^\/admin/
21 n = environment.general_cache_in_minutes 21 n = environment.general_cache_in_minutes
22 end 22 end
23 end 23 end
@@ -28,7 +28,7 @@ module NoosferoHttpCaching @@ -28,7 +28,7 @@ module NoosferoHttpCaching
28 end 28 end
29 29
30 def noosfero_session_check_before 30 def noosfero_session_check_before
31 - return if params[:controller] == 'account' 31 + return if params[:controller] == 'account' || request.xhr?
32 headers["X-Noosfero-Auth"] = (session[:user] != nil).to_s 32 headers["X-Noosfero-Auth"] = (session[:user] != nil).to_s
33 end 33 end
34 34