def test_render_pagetitle(self): class CustomRoleSelectView(RoleSelectView): pagetitle = u'Test title' role1 = mock.MagicMock() role1.id = 1 role1.title = 'Role One' role2 = mock.MagicMock() role2.id = 2 role2.title = 'Role Two' cradmin_instance = self.__mock_cradmin_instance(roles=[role1, role2]) cradmin_instance_registry = mock.MagicMock() cradmin_instance_registry.get_current_instance.return_value = cradmin_instance with mock.patch( 'cradmin_legacy.views.roleselect.cradmin_instance_registry', cradmin_instance_registry): with mock.patch( 'cradmin_legacy.templatetags.cradmin_legacy_tags.cradmin_instance_registry', cradmin_instance_registry): request = self.factory.get('/roleselecttest') response = CustomRoleSelectView.as_view()(request) self.assertEqual(response.status_code, 200) response.render() selector = htmls.S(response.content) self.assertEqual( selector.one('h1').alltext_normalized, 'Test title')
def test_render_no_pagination(self): class CustomRoleSelectView(RoleSelectView): paginate_by = 3 roles = [] for index in range(CustomRoleSelectView.paginate_by): role = mock.MagicMock() role.id = index role.title = 'Role {}'.format(index) roles.append(role) cradmin_instance = self.__mock_cradmin_instance(roles=roles) cradmin_instance_registry = mock.MagicMock() cradmin_instance_registry.get_current_instance.return_value = cradmin_instance with mock.patch( 'cradmin_legacy.views.roleselect.cradmin_instance_registry', cradmin_instance_registry): with mock.patch( 'cradmin_legacy.templatetags.cradmin_legacy_tags.cradmin_instance_registry', cradmin_instance_registry): request = self.factory.get('/roleselecttest') response = CustomRoleSelectView.as_view()(request) self.assertEqual(response.status_code, 200) response.render() selector = htmls.S(response.content) # selector.one('#cradmin_legacy_roleselect').prettyprint() self.assertEqual( selector.count('.cradmin-legacy-roleselect-list li'), 3) self.assertFalse(selector.exists('.pager-container'))
def test_render(self): filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(), target_dom_id='testdomid') filterlist.append(MinimalFilterGroupChild()) filterlist.append(MinimalFilterGroupChild()) selector = htmls.S(filterlist.render(request=mock.MagicMock())) self.assertEqual(2, selector.count('li'))
def test_render_list_titles(self): role1 = mock.MagicMock() role1.id = 1 role1.title = 'Role One' role2 = mock.MagicMock() role2.id = 2 role2.title = 'Role Two' cradmin_instance = self.__mock_cradmin_instance(roles=[role1, role2]) cradmin_instance_registry = mock.MagicMock() cradmin_instance_registry.get_current_instance.return_value = cradmin_instance with mock.patch( 'cradmin_legacy.views.roleselect.cradmin_instance_registry', cradmin_instance_registry): with mock.patch( 'cradmin_legacy.templatetags.cradmin_legacy_tags.cradmin_instance_registry', cradmin_instance_registry): request = self.factory.get('/roleselecttest') response = RoleSelectView.as_view()(request) self.assertEqual(response.status_code, 200) response.render() selector = htmls.S(response.content) self.assertEqual( selector.count('.cradmin-legacy-roleselect-role-title'), 2) titletextlist = [ element.alltext_normalized for element in selector.list( '.cradmin-legacy-roleselect-role-title') ] self.assertEqual(titletextlist, ['Role One', 'Role Two'])
def get_object(self, queryset=None): obj = mock.MagicMock() if six.PY2: obj.__unicode__.return_value = 'Simple Test Item' else: obj.__str__.return_value = 'Simple Test Item' obj._meta = mock.MagicMock() obj._meta.verbose_name = 'TestModel' return obj
def test_200_on_multiple(self): cradmin_instance = mock.MagicMock() cradmin_instance.get_rolequeryset.return_value.count = mock.MagicMock( return_value=2) cradmin_instance_registry = mock.MagicMock() cradmin_instance_registry.get_current_instance.return_value = cradmin_instance with mock.patch( 'cradmin_legacy.views.roleselect.cradmin_instance_registry', cradmin_instance_registry): request = self.factory.get('/roleselecttest') response = RoleSelectView.as_view()(request) self.assertEqual(response.status_code, 200)
def test_render_pagination(self): class CustomRoleSelectView(RoleSelectView): paginate_by = 3 roles = [] for index in range(CustomRoleSelectView.paginate_by + 2): role = mock.MagicMock() role.id = index role.title = 'Role {}'.format(index) roles.append(role) cradmin_instance = self.__mock_cradmin_instance(roles=roles) cradmin_instance_registry = mock.MagicMock() cradmin_instance_registry.get_current_instance.return_value = cradmin_instance with mock.patch( 'cradmin_legacy.views.roleselect.cradmin_instance_registry', cradmin_instance_registry): with mock.patch( 'cradmin_legacy.templatetags.cradmin_legacy_tags.cradmin_instance_registry', cradmin_instance_registry): request_page1 = self.factory.get('/roleselecttest') response_page1 = CustomRoleSelectView.as_view()(request_page1) self.assertEqual(response_page1.status_code, 200) response_page1.render() selector_page1 = htmls.S(response_page1.content) request_page2 = self.factory.get('/roleselecttest', {'page': 2}) response_page2 = CustomRoleSelectView.as_view()(request_page2) self.assertEqual(response_page2.status_code, 200) response_page2.render() selector_page2 = htmls.S(response_page2.content) self.assertEqual( selector_page1.count('.cradmin-legacy-roleselect-list li'), 3) self.assertEqual( selector_page2.count('.cradmin-legacy-roleselect-list li'), 2) self.assertTrue(selector_page1.exists('.pager-container')) self.assertTrue( selector_page1.exists( '.pager-container li.previous.disabled')) self.assertFalse( selector_page1.exists('.pager-container li.next.disabled')) self.assertTrue(selector_page2.exists('.pager-container')) self.assertFalse( selector_page2.exists( '.pager-container li.previous.disabled')) self.assertTrue( selector_page2.exists('.pager-container li.next.disabled'))
def test_send(self): testtoken = mock.MagicMock() testtoken.token = 'test-token' testrequest = mock.MagicMock() testrequest.build_absolute_uri = lambda path: 'http://testserver{}'.format(path) with mock.patch.object(ActivationEmail, 'generate_token', lambda s: testtoken): with self.settings(CRADMIN_LEGACY_SITENAME='Testsite'): ActivationEmail(user=self.testuser, request=testrequest).send() self.assertEqual(len(mail.outbox), 1) self.assertEqual(mail.outbox[0].subject, 'Activate your Testsite account') self.assertIn('http://testserver/cradmin_activate_account/activate/test-token', mail.outbox[0].alternatives[0][0]) self.assertIn('Click the button below to activate your Testsite account, testuser.', mail.outbox[0].alternatives[0][0])
def __mock_cradmin_instance(self, roles): cradmin_instance = mock.MagicMock() cradmin_instance.get_rolequeryset.return_value.count = mock.MagicMock( return_value=len(roles)) cradmin_instance.get_rolequeryset.return_value.__len__.return_value = len( roles) cradmin_instance.get_titletext_for_role = lambda role: role.title cradmin_instance.get_descriptionhtml_for_role = lambda role: format_html( u'<p>{}<p>', role.description) cradmin_instance.get_roleid = lambda role: role.id cradmin_instance.rolefrontpage_url = lambda roleid: '/role/{}'.format( roleid) cradmin_instance.get_rolequeryset.return_value = QuerySetMock( None, *roles) return cradmin_instance
def test_uploadform_post_single_image(self): testuser = create_user('testuser') testimage = create_image(200, 100) collection = TemporaryFileCollection.objects.create(user=testuser) temporaryfile = TemporaryFile(collection=collection, filename='testfile.png') temporaryfile.file.save('testfile.png', ContentFile(testimage)) testrole = baker.make('cradmin_legacy_testapp.TstRole') cradmin_app = mock.MagicMock() self.assertEqual(ArchiveImage.objects.count(), 0) mockresponse = self.mock_http302_postrequest( requestuser=testuser, cradmin_role=testrole, cradmin_app=cradmin_app, requestkwargs={'data': { 'filecollectionid': collection.id }}) self.assertEqual(ArchiveImage.objects.count(), 1) created_image = ArchiveImage.objects.first() self.assertTrue(mockresponse.response['Location'].endswith( '?foreignkey_selected_value={}'.format(created_image.pk))) self.assertEqual(created_image.image.read(), testimage) self.assertEqual(created_image.name, 'testfile.png') self.assertEqual(created_image.description, '')
def test_generate_generictoken_with_email(self): token = InviteUrlMock( request=mock.MagicMock(), private=True, content_object=self.invite_target ).generate_generictoken(email='*****@*****.**') self.assertEqual(token.metadata['email'], '*****@*****.**')
def test_generate_generictoken(self): token = InviteUrlMock( request=mock.MagicMock(), private=True, content_object=self.invite_target ).generate_generictoken() self.assertEqual(token.content_object, self.invite_target)
def test_get_share_url(self): testrequest = mock.MagicMock() testrequest.build_absolute_uri = lambda path: 'http://testserver{}'.format(path) self.assertEqual( InviteUrlWithStaticTokenMock( request=testrequest, private=True, content_object=self.invite_target).get_share_url(), 'http://testserver/invite/accept/test-token')
def test_uploadform_post_multiple_images(self): testuser = create_user('testuser') testimage1 = create_image(200, 100) testimage2 = create_image(100, 100) collection = TemporaryFileCollection.objects.create(user=testuser) temporaryfile = TemporaryFile(collection=collection, filename='testfile1.png') temporaryfile.file.save('testfile1.png', ContentFile(testimage1)) temporaryfile = TemporaryFile(collection=collection, filename='testfile2.png') temporaryfile.file.save('testfile2.png', ContentFile(testimage2)) testrole = baker.make('cradmin_legacy_testapp.TstRole') cradmin_app = mock.MagicMock() cradmin_app.reverse_appurl.return_value = '/success' self.assertEqual(ArchiveImage.objects.count(), 0) mockresponse = self.mock_http302_postrequest( requestuser=testuser, cradmin_role=testrole, cradmin_app=cradmin_app, requestkwargs={'data': { 'filecollectionid': collection.id }}) self.assertEqual(mockresponse.response['Location'], '/success') self.assertEqual(ArchiveImage.objects.count(), 2) created_images = ArchiveImage.objects.order_by('name') self.assertEqual(created_images[0].image.read(), testimage1) self.assertEqual(created_images[0].name, 'testfile1.png') self.assertEqual(created_images[0].description, '') self.assertEqual(created_images[1].image.read(), testimage2) self.assertEqual(created_images[1].name, 'testfile2.png') self.assertEqual(created_images[1].description, '')
def test_append(self): filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(), target_dom_id='testdomid') testchild = MinimalFilterGroupChild() filterlist.append(testchild) self.assertEqual([testchild], filterlist.children) self.assertEqual(filterlist, testchild.filterlist)
def test_get(self): class SimpleDeleteView(delete.DeleteView): def get_queryset_for_role(self, role): queryset = mock.MagicMock() return queryset def get_object(self, queryset=None): obj = mock.MagicMock() if six.PY2: obj.__unicode__.return_value = 'Simple Test Item' else: obj.__str__.return_value = 'Simple Test Item' obj._meta = mock.MagicMock() obj._meta.verbose_name = 'TestModel' return obj request = self.factory.get('/test') request.cradmin_app = mock.MagicMock() response = SimpleDeleteView.as_view()(request, pk=10) response.render() selector = htmls.S(response.content) self.assertEqual(selector.one('form')['action'], 'http://testserver/test') self.assertEqual( selector.one('.cradmin-legacy-page-header-inner h1').alltext_normalized, 'Delete Simple Test Item') self.assertEqual( selector.one('#deleteview-preview').alltext_normalized, 'Are you sure you want to delete "Simple Test Item"?')
def test_uploadform_post_multiple_images_fails(self): testuser = create_user('testuser') testimage1 = create_image(200, 100) testimage2 = create_image(100, 100) collection = TemporaryFileCollection.objects.create(user=testuser) temporaryfile = TemporaryFile(collection=collection, filename='testfile1.png') temporaryfile.file.save('testfile1.png', ContentFile(testimage1)) temporaryfile = TemporaryFile(collection=collection, filename='testfile2.png') temporaryfile.file.save('testfile2.png', ContentFile(testimage2)) testrole = baker.make('cradmin_legacy_testapp.TstRole') cradmin_app = mock.MagicMock() cradmin_app.reverse_appurl.return_value = '/success' self.assertEqual(ArchiveImage.objects.count(), 0) mockresponse = self.mock_http200_postrequest_htmls( requestuser=testuser, cradmin_role=testrole, cradmin_app=cradmin_app, requestkwargs={'data': { 'filecollectionid': collection.id }}) self.assertEqual(ArchiveImage.objects.count(), 0) self.assertTrue( mockresponse.selector.exists('#div_id_filecollectionid.has-error')) self.assertIn( 'You must upload exactly one image.', mockresponse.selector.one( '#div_id_filecollectionid').alltext_normalized)
def test_input_field(self): mockvalue = mock.MagicMock() mockvalue.pk = 10 selector = htmls.S( selected_item_renderer.SelectedItem(value=mockvalue).render()) self.assertEqual('10', selector.one('input[name="selected_items"]')['value'])
def test_get_label_for(self): class MyFilter(AbstractFilter): pass filtershandler = FiltersHandler(urlbuilder=mock.MagicMock()) filtershandler.add_filter(MyFilter(label='Test Label', slug='test')) self.assertEqual('Test Label', filtershandler.get_label_for('test'))
def test_filter_exclude(self): class FilterOne(AbstractFilter): def filter(self, queryobject): return queryobject.filter(mycharfield='test') class FilterTwo(AbstractFilter): def filter(self, queryobject): return queryobject.filter(mybooleanfield=True) match1 = baker.make('cradmin_viewhelpers_testapp.FilterTestModel', mycharfield='test', mybooleanfield=True) match2 = baker.make('cradmin_viewhelpers_testapp.FilterTestModel', mycharfield='no match', mybooleanfield=True) baker.make('cradmin_viewhelpers_testapp.FilterTestModel', mycharfield='test', mybooleanfield=False) filtershandler = FiltersHandler(urlbuilder=mock.MagicMock()) filtershandler.add_filter(FilterOne(slug='filterone')) filtershandler.add_filter(FilterTwo(slug='filtertwo')) queryset = filtershandler.filter(FilterTestModel.objects.all(), exclude={'filterone'}) self.assertEqual({match1, match2}, set(queryset))
def test_filter(self): class FilterOne(AbstractFilter): def filter(self, queryobject): return queryobject.filter(mycharfield='test') class FilterTwo(AbstractFilter): def filter(self, queryobject): return queryobject.filter(mybooleanfield=True) match = baker.make('cradmin_viewhelpers_testapp.FilterTestModel', mycharfield='test', mybooleanfield=True) baker.make('cradmin_viewhelpers_testapp.FilterTestModel', mycharfield='no match', mybooleanfield=True) baker.make('cradmin_viewhelpers_testapp.FilterTestModel', mycharfield='test', mybooleanfield=False) filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(), target_dom_id='testdomid') filterlist.append(FilterOne(slug='filterone')) filterlist.append(FilterTwo(slug='filtertwo')) queryset = filterlist.filter(FilterTestModel.objects.all()) self.assertEqual({match}, set(queryset))
def test_form_valid_success_redirect(self): class DemoForm(forms.Form): data = forms.CharField() class SimpleMultiSelectFormView(multiselect.MultiSelectFormView): form_class = DemoForm model = TestModel def get_queryset_for_role(self, role): return TestModel.objects.filter(id=TEST_PK) def get_success_url(self): return '/success' def form_valid(self, form): return self.success_redirect_response() request = self.factory.post( '/test', { 'selected_objects': [self.testmodelinstance.id], 'data': 'Hello world' }) request.cradmin_role = mock.MagicMock() response = SimpleMultiSelectFormView.as_view()(request) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '/success')
def test_post(self): obj = mock.MagicMock() class SimpleDeleteView(delete.DeleteView): def get_queryset_for_role(self, role): queryset = mock.MagicMock() return queryset def get_object(self, queryset=None): return obj request = self.factory.post('/test') request._messages = mock.MagicMock() request.cradmin_app = mock.MagicMock() SimpleDeleteView.as_view()(request, pk=10) obj.delete.assert_called_once_with()
def test_viewbutton_not_rendered(self): rendered = listbuilder.itemvalue.EditDelete(value='testvalue')\ .render(request=mock.MagicMock()) selector = htmls.S(rendered) self.assertFalse( selector.exists( '.cradmin-legacy-listbuilder-itemvalue-editdelete-viewbutton'))
def test_render(self): testlist = listbuilder.base.List() testlist.append(listbuilder.base.ItemValueRenderer(value='testvalue1')) testlist.append(listbuilder.base.ItemValueRenderer(value='testvalue2')) selector = htmls.S(testlist.render(request=mock.MagicMock())) self.assertEqual(2, selector.count('li')) self.assertEqual('testvalue1', selector.list('li')[0].alltext_normalized) self.assertEqual('testvalue2', selector.list('li')[1].alltext_normalized)
def test_set_filters_string_invalid_slug(self): filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(), target_dom_id='testdomid') stringfilter = MinimalStringFilter() filterlist.append(stringfilter) with self.assertRaisesMessage(InvalidFiltersStringError, '"x" is not a valid filter slug.'): filterlist.set_filters_string('x-10')
def test_parse_complex_valid_filter_string(self): filtershandler = FiltersHandler(urlbuilder=mock.MagicMock()) filtershandler.add_filter(MinimalStringFilter()) filtershandler.add_filter(MinimalIntFilter()) filtershandler.parse('/i-10/s-jane,joe/') self.assertEqual(2, len(filtershandler.filtermap)) self.assertEqual(['10'], filtershandler.filtermap['i'].values) self.assertEqual(['jane', 'joe'], filtershandler.filtermap['s'].values)
def test_get_share_url_public(self): testrequest = mock.MagicMock() testrequest.build_absolute_uri = lambda path: 'http://testserver{}'.format(path) inviteurl = InviteUrlWithTokenIteratorMock( request=testrequest, private=False, content_object=self.invite_target) self.assertEqual(inviteurl.get_share_url(), 'http://testserver/invite/accept/token1') self.assertEqual(inviteurl.get_share_url(), 'http://testserver/invite/accept/token1') self.assertEqual(inviteurl.get_share_url(), 'http://testserver/invite/accept/token1')
def test_no_description(self): mockvalue = mock.MagicMock() selector = htmls.S( selected_item_renderer.SelectedItem(value=mockvalue).render()) self.assertFalse( selector.exists( '.cradmin-legacy-multiselect2-target-selected-item-description' ))
def test_custom_input_field_name(self): class MySelectedItem(selected_item_renderer.SelectedItem): def get_inputfield_name(self): return 'testfield' mockvalue = mock.MagicMock() selector = htmls.S(MySelectedItem(value=mockvalue).render()) self.assertTrue(selector.exists('input[name="testfield"]'))