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