4088: filter collection file view by regex
authorTim Pierce <twp@curoverse.com>
Tue, 28 Oct 2014 15:14:47 +0000 (11:14 -0400)
committerTim Pierce <twp@curoverse.com>
Tue, 28 Oct 2014 15:16:19 +0000 (11:16 -0400)
Added a "Filter" field for supplying a regular expression to filter
filenames. Updated integration tests.

apps/workbench/app/views/collections/_show_files.html.erb
apps/workbench/test/integration/collections_test.rb
services/api/test/fixtures/collections.yml

index 051fbf4f6244f8ee556ade7cc6dc18199ad1ea45..9b39b61d44240e44a81ef913487cd30ed768c4d7 100644 (file)
         </ul>
       </div>
     </div>
+    <div class="pull-right">
+      <%= form_tag collection_path(@object.uuid), {method: 'get'} do %>
+        <input class="form-control" id="file_regex" name="file_regex" value="<%= params[:file_regex] %>" type="text"/>
+        <button id="file_regex_submit" type="submit" class="btn btn-primary" autofocus>Filter</button>
+      <% end %>
+    </div>
   </div>
   <p/>
   <% end %>
 
+<%
+  file_regex = nil
+  if params[:file_regex]
+    begin
+      file_regex = Regexp.new(params[:file_regex])
+    rescue RegexpError
+      # If the pattern is not a valid regex, quote it
+      # (i.e. use it as a simple substring search)
+      file_regex = Regexp.new(Regexp.quote(params[:file_regex]))
+    end
+  end
+%>
+
 <% file_tree = @object.andand.files_tree %>
 <% if file_tree.nil? or file_tree.empty? %>
   <p>This collection is empty.</p>
@@ -40,6 +59,9 @@
       </div>
       <ul class="collection_files">
     <% else %>
+      <% if !file_regex.nil? and !file_regex.match(filename) %>
+        <% next %>
+      <% end %>
       <% link_params = {controller: 'collections', action: 'show_file',
                         uuid: @object.portable_data_hash, file: file_path, size: size} %>
        <div class="collection_files_row">
index 625e4819ecec55b46ad5cc2b113b9754d2f27e90..ea42052a3e068ebbb7583715f5d2ed0fff9dead1 100644 (file)
@@ -200,4 +200,38 @@ class CollectionsTest < ActionDispatch::IntegrationTest
     assert page.has_no_text?("Activity")
     assert page.has_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']}")
+
+    # Test when only some files match the regex
+    page.find_field('file_regex').set('file[12]')
+    find('button#file_regex_submit').click
+    assert page.has_text?("file1")
+    assert page.has_text?("file2")
+    assert page.has_no_text?("file3")
+
+    # Test all files matching the regex
+    page.find_field('file_regex').set('file[123]')
+    find('button#file_regex_submit').click
+    assert page.has_text?("file1")
+    assert page.has_text?("file2")
+    assert page.has_text?("file3")
+
+    # Test no files matching the regex
+    page.find_field('file_regex').set('file9')
+    find('button#file_regex_submit').click
+    assert page.has_no_text?("file1")
+    assert page.has_no_text?("file2")
+    assert page.has_no_text?("file3")
+
+    # Syntactically invalid regex
+    # Page loads, but does not match any files
+    page.find_field('file_regex').set('file[2')
+    find('button#file_regex_submit').click
+    assert page.has_no_text?("file1")
+    assert page.has_no_text?("file2")
+    assert page.has_no_text?("file3")
+  end
 end
index 045e1c71903aa121478001a7b4f79cd53ab6b221..777c1d319a5a5a09a1534ad71254bc36da53e801 100644 (file)
@@ -61,7 +61,7 @@ baz_file:
 multilevel_collection_1:
   uuid: zzzzz-4zz18-pyw8yp9g3pr7irn
   portable_data_hash: 1fd08fc162a5c6413070a8bd0bffc818+150
-  owner_uuid: qr1hi-tpzed-000000000000000
+  owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz
   created_at: 2014-02-03T17:22:54Z
   modified_by_client_uuid: zzzzz-ozdt8-brczlopd8u8d0jr
   modified_by_user_uuid: zzzzz-tpzed-d9tiejq69daie8f
@@ -74,7 +74,7 @@ multilevel_collection_2:
   uuid: zzzzz-4zz18-45xf9hw1sxkhl6q
   # All of this collection's files are deep in subdirectories.
   portable_data_hash: 80cf6dd2cf079dd13f272ec4245cb4a8+48
-  owner_uuid: qr1hi-tpzed-000000000000000
+  owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz
   created_at: 2014-02-03T17:22:54Z
   modified_by_client_uuid: zzzzz-ozdt8-brczlopd8u8d0jr
   modified_by_user_uuid: zzzzz-tpzed-d9tiejq69daie8f