Merge remote-tracking branch 'origin/master' into 14645-fuse-operations-reporting
[arvados.git] / services / api / test / integration / database_reset_test.rb
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 require 'test_helper'
6
7 class DatabaseResetTest < ActionDispatch::IntegrationTest
8   slow_test "reset fails when Rails.env != 'test'" do
9     rails_env_was = Rails.env
10     begin
11       Rails.env = 'production'
12       Rails.application.reload_routes!
13       post '/database/reset', {}, auth(:admin)
14       assert_response 404
15     ensure
16       Rails.env = rails_env_was
17       Rails.application.reload_routes!
18     end
19   end
20
21   test "reset fails with non-admin token" do
22     post '/database/reset', {}, auth(:active)
23     assert_response 403
24   end
25
26   slow_test "database reset doesn't break basic CRUD operations" do
27     active_auth = auth(:active)
28     admin_auth = auth(:admin)
29
30     authorize_with :admin
31     post '/database/reset', {}, admin_auth
32     assert_response :success
33
34     post '/arvados/v1/specimens', {specimen: '{}'}, active_auth
35     assert_response :success
36     new_uuid = json_response['uuid']
37
38     get '/arvados/v1/specimens/'+new_uuid, {}, active_auth
39     assert_response :success
40
41     put('/arvados/v1/specimens/'+new_uuid,
42         {specimen: '{"properties":{}}'}, active_auth)
43     assert_response :success
44
45     delete '/arvados/v1/specimens/'+new_uuid, {}, active_auth
46     assert_response :success
47
48     get '/arvados/v1/specimens/'+new_uuid, {}, active_auth
49     assert_response 404
50   end
51
52   slow_test "roll back database change" do
53     active_auth = auth(:active)
54     admin_auth = auth(:admin)
55
56     old_uuid = specimens(:owned_by_active_user).uuid
57     authorize_with :admin
58     post '/database/reset', {}, admin_auth
59     assert_response :success
60
61     delete '/arvados/v1/specimens/' + old_uuid, {}, active_auth
62     assert_response :success
63     post '/arvados/v1/specimens', {specimen: '{}'}, active_auth
64     assert_response :success
65     new_uuid = json_response['uuid']
66
67     # Reset to fixtures.
68     post '/database/reset', {}, admin_auth
69     assert_response :success
70
71     # New specimen should disappear. Old specimen should reappear.
72     get '/arvados/v1/specimens/'+new_uuid, {}, active_auth
73     assert_response 404
74     get '/arvados/v1/specimens/'+old_uuid, {}, active_auth
75     assert_response :success
76   end
77 end