3354: Merge branch 'master' into 3354-render-textile
[arvados.git] / apps / workbench / test / integration / search_box_test.rb
1 require 'integration_helper'
2 require 'selenium-webdriver'
3 require 'headless'
4
5 class SearchBoxTest < ActionDispatch::IntegrationTest
6   setup do
7     headless = Headless.new
8     headless.start
9     Capybara.current_driver = :selenium
10   end
11
12   # test the search box
13   def verify_search_box user
14     if user && user['is_active']
15       # let's search for a valid uuid
16       within('.navbar-fixed-top') do
17         page.has_field?('search')
18         page.find_field('search').set user['uuid']
19         page.find('.glyphicon-search').click
20       end
21
22       # we should now be in the user's home project as a result of search
23       assert_selector "#Data_collections[data-object-uuid='#{user['uuid']}']", "Expected to be in user page after search click"
24
25       # let's search again for an invalid valid uuid
26       within('.navbar-fixed-top') do
27         search_for = String.new user['uuid']
28         search_for[0]='1'
29         page.find_field('search').set search_for
30         page.find('.glyphicon-search').click
31       end
32
33       # we should see 'not found' error page
34       assert page.has_text?('Not Found'), 'No text - Not Found'
35       assert page.has_link?('Report problem'), 'No text - Report problem'
36       click_link 'Report problem'
37       within '.modal-content' do
38         assert page.has_text?('Report a problem'), 'No text - Report a problem'
39         assert page.has_no_text?('Version / debugging info'), 'No text - Version / debugging info'
40         assert page.has_text?('Describe the problem'), 'No text - Describe the problem'
41         assert page.has_button?('Send problem report'), 'No button - Send problem report'
42         assert page.has_button?('Cancel'), 'No button - Cancel'
43
44         # enter a report text and click on report
45         page.find_field('report_issue_text').set 'my test report text'
46         click_button 'Send problem report'
47
48         # ajax success updated button texts and added footer message
49         assert page.has_no_button?('Send problem report'), 'Found button - Send problem report'
50         assert page.has_no_button?('Cancel'), 'Found button - Cancel'
51         assert page.has_text?('Report sent'), 'No text - Report sent'
52         assert page.has_button?('Close'), 'No text - Close'
53         assert page.has_text?('Thanks for reporting this issue'), 'No text - Thanks for reporting this issue'
54
55         click_button 'Close'
56       end
57
58       # let's search for the anonymously accessible project
59       publicly_accessible_project = api_fixture('groups')['anonymously_accessible_project']
60
61       within('.navbar-fixed-top') do
62         # search again for the anonymously accessible project
63         page.find_field('search').set publicly_accessible_project['name'][0,10]
64         page.find('.glyphicon-search').click
65       end
66
67       within '.modal-content' do
68         assert page.has_text?('All projects'), 'No text - All projects'
69         assert page.has_text?('Search'), 'No text - Search'
70         assert page.has_text?('Cancel'), 'No text - Cancel'
71         assert_selector('div', text: publicly_accessible_project['name'])
72         find(:xpath, '//div[./span[contains(.,publicly_accessible_project["uuid"])]]').click
73
74         click_button 'Show'
75       end
76
77       # seeing "Unrestricted public data" now
78       assert page.has_text?(publicly_accessible_project['name']), 'No text - publicly accessible project name'
79       assert page.has_text?(publicly_accessible_project['description']), 'No text - publicly accessible project description'
80     else
81       within('.navbar-fixed-top') do
82         page.has_no_field?('search')
83       end
84     end
85   end
86
87   [
88     [nil, nil],
89     ['inactive', api_fixture('users')['inactive']],
90     ['inactive_uninvited', api_fixture('users')['inactive_uninvited']],
91     ['active', api_fixture('users')['active']],
92     ['admin', api_fixture('users')['admin']],
93   ].each do |token, user|
94
95     test "test search box for user #{token}" do
96       visit page_with_token(token)
97
98       verify_search_box user
99     end
100
101   end
102
103 end