class TestDraftFormView(AdminTestCase): def setUp(self): super(TestDraftFormView, self).setUp() self.user = AuthUserFactory() self.dr1 = DraftRegistrationFactory( initiator=self.user, registration_schema=utils.draft_reg_util(), registration_metadata=utils.SCHEMA_DATA ) self.dr1.submit_for_review(self.user, {}, save=True) self.dr1.flags # sets flags if there aren't any yet. self.request = RequestFactory().get('/fake_path') self.view = DraftFormView() self.view = setup_view(self.view, self.request, draft_pk=self.dr1._id) self.post = RequestFactory().post('/fake_path') self.post.user = UserFactory() self.post_view = DraftFormView() self.form_data = { 'notes': 'Far between', 'proof_of_publication': 'approved', } def test_dispatch_raise_404(self): view = setup_view(DraftFormView(), self.request, draft_pk='wrong') with nt.assert_raises(Http404): view.dispatch(self.request) def test_get_initial(self): self.view.draft = self.dr1 self.view.get_initial() res = self.view.initial nt.assert_is_instance(res, dict) nt.assert_equal(res['notes'], self.dr1.notes) nt.assert_equal(res['assignee'], self.dr1.flags['assignee']) nt.assert_equal(res['payment_sent'], self.dr1.flags['payment_sent']) nt.assert_equal(res['proof_of_publication'], self.dr1.flags['proof_of_publication']) def test_get_context_data(self): self.view.draft = self.dr1 res = self.view.get_context_data() nt.assert_is_instance(res, dict) nt.assert_in('draft', res) nt.assert_is_instance(res['draft'], dict) nt.assert_in('IMMEDIATE', res) def test_form_valid_notes(self): form = DraftRegistrationForm(data=self.form_data) nt.assert_true(form.is_valid()) view = setup_form_view(self.post_view, self.post, form, draft_pk=self.dr1._id) view.draft = self.dr1 count = OSFLogEntry.objects.count() with transaction.atomic(): view.form_valid(form) nt.assert_equal(count, OSFLogEntry.objects.count()) self.dr1.reload() nt.assert_equal(self.dr1.notes, self.form_data['notes']) @mock.patch('admin.pre_reg.views.DraftRegistration.approve') def test_form_valid_approve(self, mock_approve): self.form_data.update(approve_reject='approve') form = DraftRegistrationForm(data=self.form_data) nt.assert_true(form.is_valid()) view = setup_form_view(self.post_view, self.post, form, draft_pk=self.dr1._id) view.draft = self.dr1 count = OSFLogEntry.objects.count() with transaction.atomic(): view.form_valid(form) nt.assert_true(mock_approve.called) nt.assert_equal(count + 1, OSFLogEntry.objects.count()) @mock.patch('admin.pre_reg.views.DraftRegistration.reject') def test_form_valid_reject(self, mock_reject): self.form_data.update(approve_reject='reject') form = DraftRegistrationForm(data=self.form_data) nt.assert_true(form.is_valid()) view = setup_form_view(self.post_view, self.post, form, draft_pk=self.dr1._id) view.draft = self.dr1 count = OSFLogEntry.objects.count() with transaction.atomic(): view.form_valid(form) nt.assert_true(mock_reject.called) nt.assert_equal(count + 1, OSFLogEntry.objects.count())
class TestMigrateRegistrationExtra(OsfTestCase): def _get_test_file(self): version = models.FileVersion(identifier='1', provider='osfstorage', metadata={'sha256': '2413fb3709b05939f04cf2e92f7d0897fc2596f9ad0b8a9ea855c7bfebaae892'}) version.save() ret = models.FileNode( _id='5723787136b74e1a953d9612', name='file.txt', node=self.node, provider='osfstorage', path='/test/file.txt', materialized_path='/test/file.txt', versions=[version] ) ret.save() return ret def setUp(self): super(TestMigrateRegistrationExtra, self).setUp() self.user = UserFactory() self.node = ProjectFactory(creator=self.user) self.file = self._get_test_file() MetaSchema.remove() self.file_ans = { 'file': { 'data':{ 'kind':'file', 'extra':{ 'checkout': None, 'hashes':{ 'sha256':'1fffe6116ecfa778f9938060d5caab923ba4b8db60bd2dd57f16a72e5ef06292' }, 'downloads':0, 'version':1 }, 'modified':'2016-04-15T18:10:48', 'name':'file.txt', 'provider':'osfstorage', } } } self.complex_metadata = { 'q1': { 'value': 'Answer 1', 'extra': [] }, 'q2': { 'value': 'Answer 2', 'extra': {} }, 'q3': { 'value': 'Answer 3', 'extra': self.file_ans }, 'q4': { 'value': { 'question': { 'value': 'Answer 4', 'extra': {} }, 'uploader': { 'value': '', 'extra': {} } }, }, 'q5': { 'value': 'Answer 5', 'extra': [ { 'viewUrl': '/project/abcdef/files/osfstorage/5723787136b74e1a953d9612/', 'hasSelectedFile': True, 'selectedFileName': 'file.txt' } ] } } self.simple_metadata = { 'Summary': 'Some airy' } self.schema = get_prereg_schema() self.draft1 = DraftRegistrationFactory( registration_metadata=self.complex_metadata, registration_schema=self.schema, approval=None, registered_node=None ) self.draft2 = DraftRegistrationFactory( registration_metadata=self.simple_metadata ) def test_migrate_registration_extra(self): assert_equal(type(self.draft1.registration_metadata['q1']['extra']), list) assert_equal(type(self.draft1.registration_metadata['q2']['extra']), dict) assert_equal(type(self.draft1.registration_metadata['q2']['extra']), dict) assert_equal(type(self.draft1.registration_metadata['q4']['value']['question']['extra']), dict) assert_equal(self.draft2.registration_metadata, self.simple_metadata) main(dry=False) self.draft1.reload() self.draft2.reload() assert_equal(type(self.draft1.registration_metadata['q1']['extra']), list) assert_equal(type(self.draft1.registration_metadata['q2']['extra']), list) assert_equal(type(self.draft1.registration_metadata['q3']['extra']), list) assert_equal(self.draft1.registration_metadata['q3']['extra'][0], self.file_ans) assert_equal(type(self.draft1.registration_metadata['q4']['value']['question']['extra']), list) assert_true(self.draft1.registration_metadata['q5']['extra'][0].get('data', False)) assert_equal(type(self.draft1.registration_metadata['q5']['extra'][0]['data']), dict) assert_equal(self.draft1.registration_metadata['q5']['extra'][0]['data']['name'], 'file.txt') assert_equal(self.draft1.registration_metadata['q5']['extra'][0]['data']['sha256'], '2413fb3709b05939f04cf2e92f7d0897fc2596f9ad0b8a9ea855c7bfebaae892') assert_equal(self.draft2.registration_metadata, self.simple_metadata)
class TestDraftFormView(AdminTestCase): def setUp(self): super(TestDraftFormView, self).setUp() self.user = AuthUserFactory() self.dr1 = DraftRegistrationFactory( initiator=self.user, registration_schema=utils.draft_reg_util(), registration_metadata=utils.SCHEMA_DATA) self.dr1.submit_for_review(self.user, {}, save=True) self.dr1.flags # sets flags if there aren't any yet. self.request = RequestFactory().get('/fake_path') self.view = DraftFormView() self.view = setup_view(self.view, self.request, draft_pk=self.dr1._id) self.post = RequestFactory().post('/fake_path') self.post.user = UserFactory() self.post_view = DraftFormView() self.form_data = { 'notes': 'Far between', 'proof_of_publication': 'approved', } def test_dispatch_raise_404(self): view = setup_view(DraftFormView(), self.request, draft_pk='wrong') with nt.assert_raises(Http404): view.dispatch(self.request) def test_get_initial(self): self.view.draft = self.dr1 self.view.get_initial() res = self.view.initial nt.assert_is_instance(res, dict) nt.assert_equal(res['notes'], self.dr1.notes) nt.assert_equal(res['assignee'], self.dr1.flags['assignee']) nt.assert_equal(res['payment_sent'], self.dr1.flags['payment_sent']) nt.assert_equal(res['proof_of_publication'], self.dr1.flags['proof_of_publication']) def test_get_context_data(self): self.view.draft = self.dr1 res = self.view.get_context_data() nt.assert_is_instance(res, dict) nt.assert_in('draft', res) nt.assert_is_instance(res['draft'], dict) nt.assert_in('IMMEDIATE', res) def test_form_valid_notes(self): form = DraftRegistrationForm(data=self.form_data) nt.assert_true(form.is_valid()) view = setup_form_view(self.post_view, self.post, form, draft_pk=self.dr1._id) view.draft = self.dr1 count = OSFLogEntry.objects.count() with transaction.atomic(): view.form_valid(form) nt.assert_equal(count, OSFLogEntry.objects.count()) self.dr1.reload() nt.assert_equal(self.dr1.notes, self.form_data['notes']) @mock.patch('admin.pre_reg.views.DraftRegistration.approve') def test_form_valid_approve(self, mock_approve): self.form_data.update(approve_reject='approve') form = DraftRegistrationForm(data=self.form_data) nt.assert_true(form.is_valid()) view = setup_form_view(self.post_view, self.post, form, draft_pk=self.dr1._id) view.draft = self.dr1 count = OSFLogEntry.objects.count() with transaction.atomic(): view.form_valid(form) nt.assert_true(mock_approve.called) nt.assert_equal(count + 1, OSFLogEntry.objects.count()) @mock.patch('admin.pre_reg.views.DraftRegistration.reject') def test_form_valid_reject(self, mock_reject): self.form_data.update(approve_reject='reject') form = DraftRegistrationForm(data=self.form_data) nt.assert_true(form.is_valid()) view = setup_form_view(self.post_view, self.post, form, draft_pk=self.dr1._id) view.draft = self.dr1 count = OSFLogEntry.objects.count() with transaction.atomic(): view.form_valid(form) nt.assert_true(mock_reject.called) nt.assert_equal(count + 1, OSFLogEntry.objects.count())