X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/943feeec776bb75c685cbdee9466f8db3cdf5da7..4077a9af0985d3c85f2f2de2bb7a0f6be581e71e:/services/api/test/unit/log_test.rb diff --git a/services/api/test/unit/log_test.rb b/services/api/test/unit/log_test.rb index be8498d4ba..22808c5ed6 100644 --- a/services/api/test/unit/log_test.rb +++ b/services/api/test/unit/log_test.rb @@ -65,13 +65,6 @@ class LogTest < ActiveSupport::TestCase end end - def set_user_from_auth(auth_name) - client_auth = api_client_authorizations(auth_name) - Thread.current[:api_client_authorization] = client_auth - Thread.current[:api_client] = client_auth.api_client - Thread.current[:user] = client_auth.user - end - test "creating a user makes a log" do set_user_from_auth :admin_trustedclient u = User.new(first_name: "Log", last_name: "Test") @@ -101,6 +94,20 @@ class LogTest < ActiveSupport::TestCase end end + test "old_attributes preserves values deep inside a hash" do + set_user_from_auth :active + it = specimens(:owned_by_active_user) + it.properties = {'foo' => {'bar' => ['baz', 'qux', {'quux' => 'bleat'}]}} + it.save! + @log_count += 1 + it.properties['foo']['bar'][2]['quux'] = 'blert' + it.save! + assert_logged it, :update do |props| + assert_equal 'bleat', props['old_attributes']['properties']['foo']['bar'][2]['quux'] + assert_equal 'blert', props['new_attributes']['properties']['foo']['bar'][2]['quux'] + end + end + test "destroying an authorization makes a log" do set_user_from_auth :admin_trustedclient auth = api_client_authorizations(:spectator) @@ -226,23 +233,40 @@ class LogTest < ActiveSupport::TestCase end test "use ownership and permission links to determine which logs a user can see" do + known_logs = [:noop, + :admin_changes_repository2, + :admin_changes_specimen, + :system_adds_foo_file, + :system_adds_baz, + :log_owned_by_active, + :crunchstat_for_running_job] + c = Log.readable_by(users(:admin)).order("id asc").each.to_a - assert_equal 5, c.size - assert_equal 1, c[0].id # no-op - assert_equal 2, c[1].id # admin changes repository foo, which is owned by active user - assert_equal 3, c[2].id # admin changes specimen owned_by_spectator - assert_equal 4, c[3].id # foo collection added, readable by active through link - assert_equal 5, c[4].id # baz collection added, readable by active and spectator through group 'all users' group membership + assert_log_result c, known_logs, known_logs c = Log.readable_by(users(:active)).order("id asc").each.to_a - assert_equal 3, c.size - assert_equal 2, c[0].id # admin changes repository foo, which is owned by active user - assert_equal 4, c[1].id # foo collection added, readable by active through link - assert_equal 5, c[2].id # baz collection added, readable by active and spectator through group 'all users' group membership + assert_log_result c, known_logs, [:admin_changes_repository2, # owned by active + :system_adds_foo_file, # readable via link + :system_adds_baz, # readable via 'all users' group + :log_owned_by_active, # log owned by active + :crunchstat_for_running_job] # log & job owned by active c = Log.readable_by(users(:spectator)).order("id asc").each.to_a - assert_equal 2, c.size - assert_equal 3, c[0].id # admin changes specimen owned_by_spectator - assert_equal 5, c[1].id # baz collection added, readable by active and spectator through group 'all users' group membership + assert_log_result c, known_logs, [:admin_changes_specimen, # owned by spectator + :system_adds_baz] # readable via 'all users' group + end + + def assert_log_result result, known_logs, expected_logs + # All of expected_logs must appear in result. Additional logs can + # appear too, but only if they are _not_ listed in known_logs + # (i.e., we do not make any assertions about logs not mentioned in + # either "known" or "expected".) + result_ids = result.collect &:id + expected_logs.each do |want| + assert_includes result_ids, logs(want).id + end + (known_logs - expected_logs).each do |notwant| + refute_includes result_ids, logs(notwant).id + end end end