Merge branch 'main' from workbench2.git
[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', params: {}, headers: 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', params: {}, headers: 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', params: {}, headers: admin_auth
32     assert_response :success
33
34     post '/arvados/v1/specimens', params: {specimen: '{}'}, headers: active_auth
35     assert_response :success
36     new_uuid = json_response['uuid']
37
38     get '/arvados/v1/specimens/'+new_uuid, params: {}, headers: active_auth
39     assert_response :success
40
41     put('/arvados/v1/specimens/'+new_uuid,
42       params: {specimen: '{"properties":{}}'},
43       headers: active_auth)
44     assert_response :success
45
46     delete '/arvados/v1/specimens/'+new_uuid, params: {}, headers: active_auth
47     assert_response :success
48
49     get '/arvados/v1/specimens/'+new_uuid, params: {}, headers: active_auth
50     assert_response 404
51   end
52
53   slow_test "roll back database change" do
54     active_auth = auth(:active)
55     admin_auth = auth(:admin)
56
57     old_uuid = specimens(:owned_by_active_user).uuid
58     authorize_with :admin
59     post '/database/reset', params: {}, headers: admin_auth
60     assert_response :success
61
62     delete '/arvados/v1/specimens/' + old_uuid, params: {}, headers: active_auth
63     assert_response :success
64     post '/arvados/v1/specimens', params: {specimen: '{}'}, headers: active_auth
65     assert_response :success
66     new_uuid = json_response['uuid']
67
68     # Reset to fixtures.
69     post '/database/reset', params: {}, headers: admin_auth
70     assert_response :success
71
72     # New specimen should disappear. Old specimen should reappear.
73     get '/arvados/v1/specimens/'+new_uuid, params: {}, headers: active_auth
74     assert_response 404
75     get '/arvados/v1/specimens/'+old_uuid, params: {}, headers: active_auth
76     assert_response :success
77   end
78 end