+ within "#collection_files" do
+ click_link "foo"
+ assert_equal("foo\nfile\n", page.html)
+ end
+ end
+
+ test "combine selected collections into new collection" do
+ foo_collection = api_fixture('collections')['foo_file']
+ bar_collection = api_fixture('collections')['bar_file']
+
+ visit page_with_token('active', "/collections")
+
+ assert(page.has_text?(foo_collection['uuid']), "Collection page did not include foo file")
+ assert(page.has_text?(bar_collection['uuid']), "Collection page did not include bar file")
+
+ within('tr', text: foo_collection['uuid']) do
+ find('input[type=checkbox]').click
+ end
+
+ within('tr', text: bar_collection['uuid']) do
+ find('input[type=checkbox]').click
+ end
+
+ click_button 'Selection...'
+ within('.selection-action-container') do
+ click_link 'Create new collection with selected collections'
+ end
+
+ # now in the newly created collection page
+ assert(page.has_text?('Copy to project'), "Copy to project text not found in new collection page")
+ assert(page.has_no_text?(foo_collection['name']), "Collection page did not include foo file")
+ assert(page.has_text?('foo'), "Collection page did not include foo file")
+ assert(page.has_no_text?(bar_collection['name']), "Collection page did not include foo file")
+ assert(page.has_text?('bar'), "Collection page did not include bar file")
+ assert(page.has_text?('Created new collection in your Home project'),
+ 'Not found flash message that new collection is created in Home project')
+ end
+
+ [
+ ['active', 'foo_file', false],
+ ['active', 'foo_collection_in_aproject', true],
+ ['project_viewer', 'foo_file', false],
+ ['project_viewer', 'foo_collection_in_aproject', false], #aproject not writable
+ ].each do |user, collection, expect_collection_in_aproject|
+ test "combine selected collection files into new collection #{user} #{collection} #{expect_collection_in_aproject}" do
+ my_collection = api_fixture('collections')[collection]
+
+ visit page_with_token(user, "/collections")
+
+ # choose file from foo collection
+ within('tr', text: my_collection['uuid']) do
+ click_link 'Show'
+ end
+
+ # now in collection page
+ find('input[type=checkbox]').click
+
+ click_button 'Selection...'
+ within('.selection-action-container') do
+ click_link 'Create new collection with selected files'
+ end
+
+ # now in the newly created collection page
+ assert(page.has_text?('Copy to project'), "Copy to project text not found in new collection page")
+ assert(page.has_no_text?(my_collection['name']), "Collection page did not include foo file")
+ assert(page.has_text?('foo'), "Collection page did not include foo file")
+ if expect_collection_in_aproject
+ aproject = api_fixture('groups')['aproject']
+ assert page.has_text?("Created new collection in the project #{aproject['name']}"),
+ 'Not found flash message that new collection is created in aproject'
+ else
+ assert page.has_text?("Created new collection in your Home project"),
+ 'Not found flash message that new collection is created in Home project'
+ end
+ end
+ end
+
+ test "combine selected collection files from collection subdirectory" do
+ visit page_with_token('user1_with_load', "/collections/zzzzz-4zz18-filesinsubdir00")
+
+ # now in collection page
+ input_files = page.all('input[type=checkbox]')
+ (0..input_files.count-1).each do |i|
+ input_files[i].click
+ end
+
+ click_button 'Selection...'
+ within('.selection-action-container') do
+ click_link 'Create new collection with selected files'
+ end
+
+ # now in the newly created collection page
+ assert(page.has_text?('file_in_subdir1'), 'file not found - file_in_subdir1')
+ assert(page.has_text?('file1_in_subdir3.txt'), 'file not found - file1_in_subdir3.txt')
+ assert(page.has_text?('file2_in_subdir3.txt'), 'file not found - file2_in_subdir3.txt')
+ assert(page.has_text?('file1_in_subdir4.txt'), 'file not found - file1_in_subdir4.txt')
+ assert(page.has_text?('file2_in_subdir4.txt'), 'file not found - file1_in_subdir4.txt')
+ end
+
+ test "Collection portable data hash with multiple matches with more than one page of results" do
+ pdh = api_fixture('collections')['baz_file']['portable_data_hash']
+ visit page_with_token('admin', "/collections/#{pdh}")
+
+ assert_selector 'a', text: 'Collection_1'
+
+ assert_text 'The following collections have this content:'
+ assert_text 'more results are not shown'
+ assert_no_text 'Activity'
+ assert_no_text 'Sharing and permissions'
+ end
+
+ test "Filtering collection files by regexp" do
+ col = api_fixture('collections', 'multilevel_collection_1')
+ visit page_with_token('active', "/collections/#{col['uuid']}")
+
+ # Filter file list to some but not all files in the collection
+ page.find_field('file_regex').set('file[12]')
+ assert page.has_text?("file1")
+ assert page.has_text?("file2")
+ assert page.has_no_text?("file3")
+
+ # Filter file list with a regex matching all files
+ page.find_field('file_regex').set('.*')
+ assert page.has_text?("file1")
+ assert page.has_text?("file2")
+ assert page.has_text?("file3")
+
+ # Filter file list to a regex matching no files
+ page.find_field('file_regex').set('file9')
+ assert page.has_no_text?("file1")
+ assert page.has_no_text?("file2")
+ assert page.has_no_text?("file3")
+ # make sure that we actually are looking at the collections
+ # page and not e.g. a fiddlesticks
+ assert page.has_text?("multilevel_collection_1")
+ assert page.has_text?(col["name"] || col["uuid"])
+
+ # Set filename filter to a syntactically invalid regex
+ # Page loads, but stops filtering after the last valid regex parse
+ page.find_field('file_regex').set('file[2')
+ assert page.has_text?("multilevel_collection_1")
+ assert page.has_text?(col["name"] || col["uuid"])
+ assert page.has_text?("file1")
+ assert page.has_text?("file2")
+ assert page.has_text?("file3")
+
+ # Test the "Select all" button
+
+ # Note: calling .set('') on a Selenium element is not sufficient
+ # to reset the field for this test, as it does not send any key
+ # events to the browser. To clear the field, we must instead send
+ # a backspace character.
+ # See https://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/Element.html#clear-instance_method
+ page.find_field('file_regex').set("\b") # backspace
+ find('button#select-all').click
+ assert_checkboxes_state('input[type=checkbox]', true, '"select all" should check all checkboxes')
+
+ # Test the "Unselect all" button
+ page.find_field('file_regex').set("\b") # backspace
+ find('button#unselect-all').click
+ assert_checkboxes_state('input[type=checkbox]', false, '"unselect all" should clear all checkboxes')
+
+ # Filter files, then "select all", then unfilter
+ page.find_field('file_regex').set("\b") # backspace
+ find('button#unselect-all').click
+ page.find_field('file_regex').set('file[12]')
+ find('button#select-all').click
+ page.find_field('file_regex').set("\b") # backspace
+
+ # all "file1" and "file2" checkboxes must be selected
+ # all "file3" checkboxes must be clear
+ assert_checkboxes_state('[value*="file1"]', true, 'checkboxes for file1 should be selected after filtering')
+ assert_checkboxes_state('[value*="file2"]', true, 'checkboxes for file2 should be selected after filtering')
+ assert_checkboxes_state('[value*="file3"]', false, 'checkboxes for file3 should be clear after filtering')
+
+ # Select all files, then filter, then "unselect all", then unfilter
+ page.find_field('file_regex').set("\b") # backspace
+ find('button#select-all').click
+ page.find_field('file_regex').set('file[12]')
+ find('button#unselect-all').click
+ page.find_field('file_regex').set("\b") # backspace
+
+ # all "file1" and "file2" checkboxes must be clear
+ # all "file3" checkboxes must be selected
+ assert_checkboxes_state('[value*="file1"]', false, 'checkboxes for file1 should be clear after filtering')
+ assert_checkboxes_state('[value*="file2"]', false, 'checkboxes for file2 should be clear after filtering')
+ assert_checkboxes_state('[value*="file3"]', true, 'checkboxes for file3 should be selected after filtering')