X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3bbb988777079718338e3e6cb9c6c9b5399be800..1a4282c6d30b209a882c255e0d5777851ff6f034:/services/api/test/functional/arvados/v1/groups_controller_test.rb diff --git a/services/api/test/functional/arvados/v1/groups_controller_test.rb b/services/api/test/functional/arvados/v1/groups_controller_test.rb index f83bf53c63..c974076c6f 100644 --- a/services/api/test/functional/arvados/v1/groups_controller_test.rb +++ b/services/api/test/functional/arvados/v1/groups_controller_test.rb @@ -141,15 +141,34 @@ class Arvados::V1::GroupsControllerTest < ActionController::TestCase filters: [['uuid', 'is_a', "arvados#collection"]], order: "collections.name #{order}" } - sorted_entries = json_response['items'].collect { |item| item["name"] } + sorted_names = json_response['items'].collect { |item| item["name"] } + # Here we avoid assuming too much about the database + # collation. Both "alice"<"Bob" and "alice">"Bob" can be + # correct. Hopefully it _is_ safe to assume that if "a" comes + # before "b" in the ascii alphabet, "aX">"bY" is never true for + # any strings X and Y. + reliably_sortable_names = sorted_names.select do |name| + name[0] >= 'a' and name[0] <= 'z' + end.uniq do |name| + name[0] + end + # Preserve order of sorted_names. But do not use &=. If + # sorted_names has out-of-order duplicates, we want to preserve + # them here, so we can detect them and fail the test below. + sorted_names.select! do |name| + reliably_sortable_names.include? name + end + actually_checked_anything = false previous = nil - sorted_entries.each do |entry| + sorted_names.each do |entry| if previous assert_operator(previous, operator, entry, - "Entries sorted incorrectly. Perhaps the application and database have mismatched locale settings?") + "Entries sorted incorrectly.") + actually_checked_anything = true end previous = entry end + assert actually_checked_anything, "Didn't even find two names to compare." end end