Skip to content
Snippets Groups Projects
Select Git revision
  • update-gradle-ui
  • development default protected
  • master protected
  • prep-release-2.5.0
  • 260-auto-api-docs
  • api-doc-update
  • optional-plugin-dir
  • version-to-2.3.1
  • asm-optional-disp
  • devops-master-include-version
  • version-to-2.3.0
  • better-assembly-analysis-redux
  • worker-logs
  • better-assembly-analysis
  • devops
  • 237-submission-identity-filter
  • sso
  • suppressions-deep-search
  • v2.5.1
  • v2.5.0
  • v2.4.0
  • v2.3.4
  • v2.3.3
  • 1.3.0
24 results

Dockerfile

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    lock_test.rb 2.96 KiB
    require 'test_helper'
    
    class PostsControllerTest < ActionController::TestCase
      include Devise::Test::ControllerHelpers
    
      test 'can lock post' do
        sign_in users(:deleter)
        post :lock, params: { id: posts(:question_one).id, format: :json }
        assert_response 200
        assert_not_nil assigns(:post)
        assert assigns(:post).locked_until <= 7.days.from_now
        assert assigns(:post).locked_until >= 7.days.from_now - 1.minute
        assert_nothing_raised do
          JSON.parse(response.body)
        end
        assert_equal 'success', JSON.parse(response.body)['status']
      end
    
      test 'lock requires authentication' do
        post :lock, params: { id: posts(:question_one).id }
        assert_response 302
        assert_redirected_to new_user_session_path
      end
    
      test 'unprivileged user cannot lock' do
        sign_in users(:standard_user)
        post :lock, params: { id: posts(:question_one).id, format: :json }
        assert_response 404
        assert_nothing_raised do
          JSON.parse(response.body)
        end
        assert_equal 'failed', JSON.parse(response.body)['status']
      end
    
      test 'cannot lock locked post' do
        sign_in users(:deleter)
        post :lock, params: { id: posts(:locked).id, format: :json }
        assert_response 404
        assert_nothing_raised do
          JSON.parse(response.body)
        end
        assert_equal 'failed', JSON.parse(response.body)['status']
      end
    
      test 'cannot lock longer than 30 days' do
        sign_in users(:deleter)
        post :lock, params: { id: posts(:question_one).id, length: 60, format: :json }
        assert_response 200
        assert_not_nil assigns(:post)
        assert assigns(:post).locked_until <= 30.days.from_now
        assert assigns(:post).locked_until >= 30.days.from_now - 1.minute
        assert_nothing_raised do
          JSON.parse(response.body)
        end
        assert_equal 'success', JSON.parse(response.body)['status']
      end
    
      test 'moderator can lock longer than 30 days' do
        sign_in users(:moderator)
        post :lock, params: { id: posts(:question_one).id, length: 60, format: :json }
        assert_response 200
        assert_not_nil assigns(:post)
        assert assigns(:post).locked_until <= 60.days.from_now
        assert assigns(:post).locked_until >= 60.days.from_now - 1.minute
        assert_nothing_raised do
          JSON.parse(response.body)
        end
        assert_equal 'success', JSON.parse(response.body)['status']
      end
    
      test 'moderator can lock indefinitely' do
        sign_in users(:moderator)
        post :lock, params: { id: posts(:question_one).id, format: :json }
        assert_response 200
        assert_not_nil assigns(:post)
        assert_nil assigns(:post).locked_until
        assert_nothing_raised do
          JSON.parse(response.body)
        end
        assert_equal 'success', JSON.parse(response.body)['status']
      end
    
      test 'Locks on posts expire' do
        sign_in users(:moderator)
        post :lock, params: { id: posts(:question_one).id, length: 1, format: :json }
        assert_response 200
    
        # Change the locked_until to have already passed
        assigns(:post).update(locked_until: 1.second.ago)
    
        assert_not assigns(:post).locked?
      end
    end