Skip to content
Snippets Groups Projects
Select Git revision
  • 170-presentation-mode-for-queue-list
  • development default protected
  • more_forwarding_to_staff
  • main protected
  • 389-queue-2-0-modules-page-pagination
  • 739-add-pdf-support-for-presentation-slides
  • 454-selection-for-student-groups-with-multiple-students
  • ask-why-student-requeued
  • 571-allowed-assignments-for-multiple-roles
  • 552-trying-to-create-a-lab-without-specifying-any-request-type-leads-to-oops-screen
  • 628-add-a-button-for-tas-to-redirect-a-request-to-a-head-ta-and-or-lecturer
  • 729-re-think-lab-create-page
  • busy-lab-notification
  • 732-allow-lab-creation-based-on-mytimetable-schedule
  • accountability
  • 691-notification-for-staff-about-busy-lab
  • profile
  • 695-refactor-methods-in-requesttableservice
  • 99-allow-adding-students-staff-using-email-student-number-name
  • flag-feedback
  • fix-mysql-tests
  • 2425.0.1-release protected
  • 2425.0.0-release protected
  • 2.3.2-release protected
  • 2.3.0-release protected
  • 2.2.2-release protected
  • 2.2.1-release protected
  • 2.2.0-release protected
  • 2.1.4-release protected
  • 2.1.3-release protected
  • 2.1.2-release protected
  • 2.1.1-release protected
  • 2.1.0-release protected
  • 1.0.1-release protected
  • 1.0.0-release protected
35 results

LICENSE.header.java

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    This project is licensed under the GNU Affero General Public License v3.0. 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