def test_staff_view(rf: RequestFactory, ChallengeSet, admin_user, mocker): # admin_user is a superuser, not a challenge admin creator = ChallengeSet.creator challenge = ChallengeSet.challenge participant = ChallengeSet.participant non_participant = ChallengeSet.non_participant # Messages need to be mocked when using request factory mock_messages = mocker.patch( "grandchallenge.core.permissions.mixins.messages" ).start() mock_messages.INFO = "INFO" assert_redirect( settings.LOGIN_URL, AnonymousUser(), StaffOnlyView, challenge, rf ) assert_status(403, participant, StaffOnlyView, challenge, rf) assert_status(403, non_participant, StaffOnlyView, challenge, rf) assert_status(403, creator, StaffOnlyView, challenge, rf) assert_status(200, admin_user, StaffOnlyView, challenge, rf) participant.is_staff = True participant.save() assert_status(200, participant, StaffOnlyView, challenge, rf)
def assertions(driver, task_id, sandbox_directory): logging.info('Statuses: {}'.format(driver.statuses)) self.assertEqual(2, len(driver.statuses)) actual_status_0 = driver.statuses[0] expected_status_0 = { 'task_id': { 'value': task_id }, 'state': cook.TASK_STARTING } assert_status(self, expected_status_0, actual_status_0) actual_status_1 = driver.statuses[1] expected_status_1 = { 'task_id': { 'value': task_id }, 'state': cook.TASK_ERROR } assert_status(self, expected_status_1, actual_status_1) logging.info('Messages: {}'.format(driver.messages)) self.assertEqual(1, len(driver.messages)) actual_encoded_message_0 = driver.messages[0] expected_message_0 = { 'sandbox-directory': sandbox_directory, 'task-id': task_id } assert_message(self, expected_message_0, actual_encoded_message_0)
def test_create_status_running(self): task_id = get_random_task_id() actual_status = ce.create_status(task_id, cook.TASK_RUNNING) expected_status = { 'task_id': { 'value': task_id }, 'state': cook.TASK_RUNNING } assert_status(self, expected_status, actual_status)
def test_update_status(self): driver = FakeMesosExecutorDriver() task_id = get_random_task_id() task_state = "TEST_TASK_STATE" ce.update_status(driver, task_id, task_state) self.assertEqual(1, len(driver.statuses)) actual_status = driver.statuses[0] expected_status = {'task_id': {'value': task_id}, 'state': task_state} assert_status(self, expected_status, actual_status)
def test_create_status_running(self): driver = tu.FakeMesosExecutorDriver() task_id = tu.get_random_task_id() status_updater = ce.StatusUpdater(driver, task_id) actual_status = status_updater.create_status(cook.TASK_RUNNING) expected_status = { 'task_id': { 'value': task_id }, 'state': cook.TASK_RUNNING } tu.assert_status(self, expected_status, actual_status)
def assertions(driver, task_id, sandbox_location): logging.info('Statuses: {}'.format(driver.statuses)) self.assertEqual(3, len(driver.statuses)) actual_status_0 = driver.statuses[0] expected_status_0 = {'task_id': {'value': task_id}, 'state': cook.TASK_STARTING} assert_status(self, expected_status_0, actual_status_0) actual_status_1 = driver.statuses[1] expected_status_1 = {'task_id': {'value': task_id}, 'state': cook.TASK_RUNNING} assert_status(self, expected_status_1, actual_status_1) actual_status_2 = driver.statuses[2] expected_status_2 = {'task_id': {'value': task_id}, 'state': cook.TASK_KILLED} assert_status(self, expected_status_2, actual_status_2) logging.info('Messages: {}'.format(driver.messages)) self.assertEqual(2, len(driver.messages)) actual_encoded_message_0 = driver.messages[0] expected_message_0 = {'sandbox-location': sandbox_location, 'task-id': task_id} assert_message(self, expected_message_0, actual_encoded_message_0) actual_encoded_message_1 = driver.messages[1] expected_message_1 = {'exit-code': -15, 'task-id': task_id} assert_message(self, expected_message_1, actual_encoded_message_1)
def assertions(driver, task_id, sandbox_location): logging.info('Statuses: {}'.format(driver.statuses)) self.assertEqual(3, len(driver.statuses)) actual_status_0 = driver.statuses[0] expected_status_0 = {'task_id': {'value': task_id}, 'state': cook.TASK_STARTING} assert_status(self, expected_status_0, actual_status_0) actual_status_1 = driver.statuses[1] expected_status_1 = {'task_id': {'value': task_id}, 'state': cook.TASK_RUNNING} assert_status(self, expected_status_1, actual_status_1) actual_status_2 = driver.statuses[2] expected_status_2 = {'task_id': {'value': task_id}, 'state': cook.TASK_FINISHED} assert_status(self, expected_status_2, actual_status_2) logging.info('Messages: {}'.format(driver.messages)) self.assertEqual(4, len(driver.messages)) actual_encoded_message_0 = driver.messages[0] expected_message_0 = {'sandbox-location': sandbox_location, 'task-id': task_id} assert_message(self, expected_message_0, actual_encoded_message_0) actual_encoded_message_1 = driver.messages[1] expected_message_1 = {'progress-message': 'Fifty percent', 'progress-percent': 50, 'task-id': task_id} assert_message(self, expected_message_1, actual_encoded_message_1) actual_encoded_message_2 = driver.messages[2] expected_message_2 = {'progress-message': 'Fifty-five percent', 'progress-percent': 55, 'task-id': task_id} assert_message(self, expected_message_2, actual_encoded_message_2) actual_encoded_message_3 = driver.messages[3] expected_message_3 = {'exit-code': 0, 'task-id': task_id} assert_message(self, expected_message_3, actual_encoded_message_3)
def assertions(driver, task_id, sandbox_directory): logging.info('Statuses: {}'.format(driver.statuses)) self.assertEqual(3, len(driver.statuses)) actual_status_0 = driver.statuses[0] expected_status_0 = { 'task_id': { 'value': task_id }, 'state': cook.TASK_STARTING } assert_status(self, expected_status_0, actual_status_0) actual_status_1 = driver.statuses[1] expected_status_1 = { 'task_id': { 'value': task_id }, 'state': cook.TASK_RUNNING } assert_status(self, expected_status_1, actual_status_1) actual_status_2 = driver.statuses[2] expected_status_2 = { 'task_id': { 'value': task_id }, 'state': cook.TASK_FINISHED } assert_status(self, expected_status_2, actual_status_2) logging.info('Messages: {}'.format(driver.messages)) self.assertEqual(3, len(driver.messages)) actual_encoded_message_0 = driver.messages[0] expected_message_0 = { 'sandbox-directory': sandbox_directory, 'task-id': task_id } assert_message(self, expected_message_0, actual_encoded_message_0) actual_encoded_message_1 = driver.messages[1] expected_message_1 = { 'progress-message': 'line count is 20', 'progress-percent': 90, 'task-id': task_id } assert_message(self, expected_message_1, actual_encoded_message_1) actual_encoded_message_2 = driver.messages[2] expected_message_2 = {'exit-code': 0, 'task-id': task_id} assert_message(self, expected_message_2, actual_encoded_message_2)
def test_permissions_mixin( rf: RequestFactory, admin_user, mocker, ChallengeSet ): # admin_user is a superuser, not a challenge admin creator = ChallengeSet.creator challenge = ChallengeSet.challenge participant = ChallengeSet.participant non_participant = ChallengeSet.non_participant # Messages need to be mocked when using request factory mock_messages = mocker.patch( "grandchallenge.core.permissions.mixins.messages" ).start() mock_messages.INFO = "INFO" assert_status(200, admin_user, AdminOnlyView, challenge, rf) assert_status(200, creator, AdminOnlyView, challenge, rf) assert_status(403, participant, AdminOnlyView, challenge, rf) assert_status(403, non_participant, AdminOnlyView, challenge, rf) assert_redirect( settings.LOGIN_URL, AnonymousUser(), AdminOnlyView, challenge, rf ) assert_status(200, admin_user, ParticipantOrAdminOnlyView, challenge, rf) assert_status(200, creator, ParticipantOrAdminOnlyView, challenge, rf) assert_status(200, participant, ParticipantOrAdminOnlyView, challenge, rf) assert_status( 403, non_participant, ParticipantOrAdminOnlyView, challenge, rf ) assert_redirect( settings.LOGIN_URL, AnonymousUser(), ParticipantOrAdminOnlyView, challenge, rf, ) # Make a 2nd challenge and make sure that the admins and participants # here cannot see the first creator2 = UserFactory() challenge2 = ChallengeFactory(creator=creator2) participant2 = UserFactory() challenge2.add_participant(participant2) assert_status(403, creator2, AdminOnlyView, challenge, rf) assert_status(403, participant2, AdminOnlyView, challenge, rf) assert_status(403, creator2, ParticipantOrAdminOnlyView, challenge, rf) assert_status(403, participant2, ParticipantOrAdminOnlyView, challenge, rf)
def test_permissions_after_challenge_rename( rf: RequestFactory, admin_user, mocker, ChallengeSet ): """ Check that we can rename challenges. Admin_user is superuser """ creator = ChallengeSet.creator challenge = ChallengeSet.challenge participant = ChallengeSet.participant non_participant = ChallengeSet.non_participant # Messages need to be mocked when using request factory mock_messages = mocker.patch( "grandchallenge.core.permissions.mixins.messages" ).start() mock_messages.INFO = "INFO" assert_status(200, admin_user, AdminOnlyView, challenge, rf) assert_status(200, creator, AdminOnlyView, challenge, rf) assert_status(403, participant, AdminOnlyView, challenge, rf) assert_status(403, non_participant, AdminOnlyView, challenge, rf) assert_redirect( settings.LOGIN_URL, AnonymousUser(), AdminOnlyView, challenge, rf ) assert_status(200, admin_user, ParticipantOrAdminOnlyView, challenge, rf) assert_status(200, creator, ParticipantOrAdminOnlyView, challenge, rf) assert_status(200, participant, ParticipantOrAdminOnlyView, challenge, rf) assert_status( 403, non_participant, ParticipantOrAdminOnlyView, challenge, rf ) assert_redirect( settings.LOGIN_URL, AnonymousUser(), ParticipantOrAdminOnlyView, challenge, rf, ) challenge.short_name += "appendedname" challenge.save() assert_status(200, admin_user, AdminOnlyView, challenge, rf) assert_status(200, creator, AdminOnlyView, challenge, rf) assert_status(403, participant, AdminOnlyView, challenge, rf) assert_status(403, non_participant, AdminOnlyView, challenge, rf) assert_redirect( settings.LOGIN_URL, AnonymousUser(), AdminOnlyView, challenge, rf ) assert_status(200, admin_user, ParticipantOrAdminOnlyView, challenge, rf) assert_status(200, creator, ParticipantOrAdminOnlyView, challenge, rf) assert_status(200, participant, ParticipantOrAdminOnlyView, challenge, rf) assert_status( 403, non_participant, ParticipantOrAdminOnlyView, challenge, rf ) assert_redirect( settings.LOGIN_URL, AnonymousUser(), ParticipantOrAdminOnlyView, challenge, rf, )