def test_save_settings(self): savedsettings = {} def save_settings(status, settings): savedsettings['status'] = status savedsettings['settings'] = settings qualifiesforexam_plugins.add( id = 'devilry_qualifiesforexam.test.plugin', url = '/some/url', title = 'Test', description = 'A test', uses_settings=True, post_statussave = save_settings ) self.client.login(username='******', password='******') session = self.client.session session[create_settings_sessionkey('tst')] = {'test': 'settings'} session.save() content, response = self._postas('periodadmin', { 'period': self.testhelper.sub_p1.id, 'status': 'ready', 'plugin': 'devilry_qualifiesforexam.test.plugin', 'pluginsessionid': 'tst', 'passing_relatedstudentids': [] }) self.assertEqual(response.status_code, 201) self.assertEqual(len(savedsettings), 2) self.assertEqual(savedsettings['settings'], {'test': 'settings'}) self.assertIsInstance(savedsettings['status'], Status)
def _invoke_post_statussave(self, status): pluginsessionid = self.CONTENT['pluginsessionid'] settings = None if qualifiesforexam_plugins.uses_settings(status.plugin): try: settings = self.request.session.pop(create_settings_sessionkey(pluginsessionid)) except KeyError: msg = 'The "{0}"-plugin requires settings - no settings found in the session.'.format(status.plugin) raise ErrorResponse(statuscodes.HTTP_400_BAD_REQUEST, {'detail': msg}) try: qualifiesforexam_plugins.post_statussave(status, settings) except PluginResultsFailedVerification as e: raise ErrorResponse(statuscodes.HTTP_400_BAD_REQUEST, {'detail': str(e)})