X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0b102fac0e8d2a7d46d088b1bd8f7b27b325dd2a..0f361d9a0748e2b470ed5bc73351cb2eaf3e02e3:/services/api/test/functional/arvados/v1/filters_test.rb diff --git a/services/api/test/functional/arvados/v1/filters_test.rb b/services/api/test/functional/arvados/v1/filters_test.rb index 604f421481..2b1b675323 100644 --- a/services/api/test/functional/arvados/v1/filters_test.rb +++ b/services/api/test/functional/arvados/v1/filters_test.rb @@ -32,7 +32,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase filters: [['uuid', '@@', 'abcdef']], } assert_response 422 - assert_match /not supported/, json_response['errors'].join(' ') + assert_match(/not supported/, json_response['errors'].join(' ')) end test 'difficult characters in full text search' do @@ -52,6 +52,47 @@ class Arvados::V1::FiltersTest < ActionController::TestCase filters: [['any', '@@', ['abc', 'def']]], } assert_response 422 - assert_match /not supported/, json_response['errors'].join(' ') + assert_match(/not supported/, json_response['errors'].join(' ')) + end + + test 'api responses provide timestamps with nanoseconds' do + @controller = Arvados::V1::CollectionsController.new + authorize_with :active + get :index + assert_response :success + assert_not_empty json_response['items'] + json_response['items'].each do |item| + %w(created_at modified_at).each do |attr| + # Pass fixtures with null timestamps. + next if item[attr].nil? + assert_match(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d.\d{9}Z$/, item[attr]) + end + end + end + + %w(< > <= >= =).each do |operator| + test "timestamp #{operator} filters work with nanosecond precision" do + # Python clients like Node Manager rely on this exact format. + # If you must change this format for some reason, make sure you + # coordinate the change with them. + expect_match = !!operator.index('=') + mine = act_as_user users(:active) do + Collection.create!(manifest_text: '') + end + timestamp = mine.modified_at.strftime('%Y-%m-%dT%H:%M:%S.%NZ') + @controller = Arvados::V1::CollectionsController.new + authorize_with :active + get :index, { + filters: [['modified_at', operator, timestamp], + ['uuid', '=', mine.uuid]], + } + assert_response :success + uuids = json_response['items'].map { |item| item['uuid'] } + if expect_match + assert_includes uuids, mine.uuid + else + assert_not_includes uuids, mine.uuid + end + end end end