Merge branch 'master' into 9998-unsigned_manifest
[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     slow_test
8     rails_env_was = Rails.env
9     begin
10       Rails.env = 'production'
11       Rails.application.reload_routes!
12       post '/database/reset', {}, auth(:admin)
13       assert_response 404
14     ensure
15       Rails.env = rails_env_was
16       Rails.application.reload_routes!
17     end
18   end
19
20   test "reset fails with non-admin token" do
21     post '/database/reset', {}, auth(:active)
22     assert_response 403
23   end
24
25   test "database reset doesn't break basic CRUD operations" do
26     slow_test
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   test "roll back database change" do
53     slow_test
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', {}, admin_auth
60     assert_response :success
61
62     delete '/arvados/v1/specimens/' + old_uuid, {}, active_auth
63     assert_response :success
64     post '/arvados/v1/specimens', {specimen: '{}'}, active_auth
65     assert_response :success
66     new_uuid = json_response['uuid']
67
68     # Reset to fixtures.
69     post '/database/reset', {}, admin_auth
70     assert_response :success
71
72     # New specimen should disappear. Old specimen should reappear.
73     get '/arvados/v1/specimens/'+new_uuid, {}, active_auth
74     assert_response 404
75     get '/arvados/v1/specimens/'+old_uuid, {}, active_auth
76     assert_response :success
77   end
78 end