3296: split profile config into two parameters: one for fields and one for message.
[arvados.git] / apps / workbench / test / integration / application_layout_test.rb
index f4a56a213ada37fd0d617bbc974096ff138d3317..bef907d4b26eeb2467ab108075326a73ac59a9c6 100644 (file)
@@ -136,10 +136,10 @@ class ApplicationLayoutTest < ActionDispatch::IntegrationTest
     end
 
     # now in manage account page
-    assert page.has_link? 'Virtual Machines'
-    assert page.has_link? 'Repositories'
-    assert page.has_link? 'SSH Keys'
-    assert page.has_link? 'Current Token'
+    assert page.has_text? 'Virtual Machines'
+    assert page.has_text? 'Repositories'
+    assert page.has_text? 'SSH Keys'
+    assert page.has_text? 'Current Token'
 
     assert page.has_text? 'The Arvados API token is a secret key that enables the Arvados SDKs to access Arvados'
 
@@ -170,7 +170,7 @@ class ApplicationLayoutTest < ActionDispatch::IntegrationTest
     assert page.has_text? 'added_in_test'
   end
 
-  # check manage profile page and add missing profile to the user
+  # Check manage profile page and add missing profile to the user
   def add_profile user
     assert page.has_no_text? 'My projects'
     assert page.has_no_text? 'Projects shared with me'
@@ -182,28 +182,35 @@ class ApplicationLayoutTest < ActionDispatch::IntegrationTest
     assert page.has_text? 'Email'
     assert page.has_text? user['email']
 
-    # using the default profile which has message and one required field
-    profile_config = Rails.configuration.user_profile_form_fields
-    profile_message = ''
+    # Using the default profile which has message and one required field
+
+    # Save profile without filling in the required field. Expect to be back in this profile page again
+    click_button "Save profile"
+    assert page.has_text? 'Profile'
+    assert page.has_text? 'First name'
+    assert page.has_text? 'Last name'
+    assert page.has_text? 'Save profile'
+
+    # This time fill in required field and then save. Expect to go to requested page after that.
+    profile_message = Rails.configuration.user_profile_form_message
     required_field_title = ''
     required_field_key = ''
-    profile_config.andand.each do |entry| 
-      if entry['message']
-        profile_message = entry['message']
-      else
-        if entry['required']
-          required_field_key = entry['key']
-          required_field_title = entry['form_field_title']
-        end
+    profile_config = Rails.configuration.user_profile_form_fields
+    profile_config.andand.each do |entry|
+      if entry['required']
+        required_field_key = entry['key']
+        required_field_title = entry['form_field_title']
       end
     end
 
     assert page.has_text? profile_message
     assert page.has_text? required_field_title
-
-    page.find_field(required_field_key).set 'value to fill required field'
+    page.find_field('user[prefs][:profile][:'+required_field_key+']').set 'value to fill required field'
 
     click_button "Save profile"
+    # profile saved and in profile page now with success
+    assert page.has_text? 'Thank you for filling in your profile'
+    click_button 'Take me to my page'
 
     # profile saved and in home page now
     assert page.has_text? 'My projects'
@@ -213,16 +220,30 @@ class ApplicationLayoutTest < ActionDispatch::IntegrationTest
   # test the search box
   def check_search_box user
     if user
-      # let's search for the anonymously accessible project
-      publicly_accessible_project = api_fixture('groups')['anonymously_accessible_project']
-
+      # let's search for a valid uuid
       within('.navbar-fixed-top') do
         page.find_field('search').set user['uuid']
         page.find('.glyphicon-search').click
-        
-        # we should now be in the user's page as a result of search
-        assert page.has_text? user['email']
+      end
+
+      # we should now be in the user's page as a result of search
+      assert page.has_text? user['first_name']
+
+      # let's search again for an invalid valid uuid
+      within('.navbar-fixed-top') do
+        search_for = String.new user['uuid']
+        search_for[0]='1'
+        page.find_field('search').set search_for
+        page.find('.glyphicon-search').click
+      end
+
+      # we should see 'not found' error page
+      assert page.has_text? 'Not Found'
+
+      # let's search for the anonymously accessible project
+      publicly_accessible_project = api_fixture('groups')['anonymously_accessible_project']
 
+      within('.navbar-fixed-top') do
         # search again for the anonymously accessible project
         page.find_field('search').set publicly_accessible_project['name'][0,10]
         page.find('.glyphicon-search').click
@@ -245,11 +266,11 @@ class ApplicationLayoutTest < ActionDispatch::IntegrationTest
   end
 
   [
-#    [nil, nil, false, false],
-#    ['inactive', api_fixture('users')['inactive'], true, false],
-#    ['inactive_uninvited', api_fixture('users')['inactive_uninvited'], false, false],
-#    ['active', api_fixture('users')['active'], true, true],
-#    ['admin', api_fixture('users')['admin'], true, true],
+    [nil, nil, false, false],
+    ['inactive', api_fixture('users')['inactive'], true, false],
+    ['inactive_uninvited', api_fixture('users')['inactive_uninvited'], false, false],
+    ['active', api_fixture('users')['active'], true, true],
+    ['admin', api_fixture('users')['admin'], true, true],
     ['active_no_prefs', api_fixture('users')['active_no_prefs'], true, false],
   ].each do |token, user, invited, has_profile|
       test "visit home page when profile is configured for user #{token}" do
@@ -263,7 +284,7 @@ class ApplicationLayoutTest < ActionDispatch::IntegrationTest
       verify_homepage_with_profile user, invited, has_profile
     end
   end
-=begin
+
   [
     [nil, nil, false, false],
     ['inactive', api_fixture('users')['inactive'], true, false],
@@ -284,5 +305,5 @@ class ApplicationLayoutTest < ActionDispatch::IntegrationTest
       verify_homepage_with_profile user, invited, has_profile
     end
   end
-=end
+
 end