def prettyformat_response_content(self, response): warnings = [] output = None if hasattr(response, 'render'): try: response.render() except Exception as e: warnings.append('[cradmin TestCaseMixin warning] response.render() failed with: {}'.format(e)) else: try: output = '[cradmin TestCaseMixin info]: Prettyformatted response.content:\n{}'.format( _indent_string(htmls.S(response.content).prettify()) ) except: pass if output is None: try: content = response.content.decode('utf-8') except UnicodeError: content = response.content if content: output = '[cradmin TestCaseMixin info]: response.content:\n{}'.format( _indent_string(content)) else: output = '[cradmin TestCaseMixin info]: response.content is empty.' return output, warnings
def test_custom_cssclass(self): testperiod = mommy.make('core.Period') selector = htmls.S( devilry_listbuilder.period.StudentItemValue( value=testperiod).render()) self.assertTrue( selector.exists('.devilry-cradmin-perioditemvalue-student'))
def test_url(self): testuser = mommy.make(settings.AUTH_USER_MODEL) selector = htmls.S(listbuilder_role.AnyAdminRoleItemFrame( inneritem=mock.MagicMock(value=testuser)).render()) self.assertEqual( '/devilry_admin/', selector.one('.django-cradmin-listbuilder-itemframe-link')['href'])
def test_no_organization_specific_documentation_url(self): with self.settings( DEVILRY_ORGANIZATION_SPECIFIC_DOCUMENTATION_URL=None): selector = htmls.S(self.client.get(self.url).content) self.assertFalse( selector.exists( '#devilry_help_organization_specific_documentation'))
def test_description_multiple_assignments_assignment(self): testuser = mommy.make(settings.AUTH_USER_MODEL) testperiod = mommy.make('core.Period') relatedstudent = mommy.make('core.RelatedStudent', user=testuser, period=testperiod) testassignment1 = mommy.make('core.Assignment', parentnode=testperiod) mommy.make('core.Candidate', assignment_group__parentnode=testassignment1, relatedstudent=relatedstudent) testassignment2 = mommy.make('core.Assignment', parentnode=testperiod) mommy.make('core.Candidate', assignment_group__parentnode=testassignment2, relatedstudent=relatedstudent) testperiod_annotated = Period.objects\ .extra_annotate_with_assignmentcount_for_studentuser(user=testuser)\ .get(id=testperiod.id) selector = htmls.S( devilry_listbuilder.period.StudentItemValue( value=testperiod_annotated).render()) self.assertEqual( '2 assignments', selector.one( '.django-cradmin-listbuilder-itemvalue-titledescription-description' ).alltext_normalized)
def test_get_render_is_authenticated(self): request = self.factory.get('/test') request.user = create_user('testuser') token = self.__create_token() with self.settings(DJANGO_CRADMIN_SITENAME='Testsite'): response = AcceptInviteView.as_view()(request, token=token.token) self.assertEqual(response.status_code, 200) response.render() selector = htmls.S(response.content) self.assertTrue( selector.exists('button#django_cradmin_invite_accept_as_button')) self.assertEqual( selector.one( '#django_cradmin_invite_accept_register_account_button') ['href'], '/cradmin_register_account/?next=http%3A%2F%2Ftestserver%2Ftest') self.assertEqual( selector.one( '#django_cradmin_invite_accept_login_as_different_user_button') ['href'], '/cradmin_authenticate/logout?' 'next=%2Faccounts%2Flogin%2F%3Fnext%3Dhttp%253A%252F%252Ftestserver%252Ftest' ) self.assertEqual( selector.one('button#django_cradmin_invite_accept_as_button'). alltext_normalized, 'Accept as testuser') self.assertEqual( selector.one( '#django_cradmin_invite_accept_register_account_button'). alltext_normalized, 'Sign up for Testsite') self.assertEqual( selector.one( '#django_cradmin_invite_accept_login_as_different_user_button' ).alltext_normalized, 'Sign in as another user')
def test_form_action_default(self): mockrequest = mock.MagicMock() mockrequest.get_full_path.return_value = '/form/action' selector = htmls.S( target_renderer.Target(form=forms.Form()).render( request=mockrequest)) self.assertEqual('/form/action', selector.one('form')['action'])
def test_sanity(self): testuser = mommy.make(settings.AUTH_USER_MODEL) selector = htmls.S( listbuilder_role.AnyAdminRoleItemValue(value=testuser).render()) self.assertTrue( selector.exists( '.devilry-frontpage-listbuilder-roleselect-itemvalue'))
def test_render_cell(self): result = self.column_subclass.render_cell_content(self.model_testobject) selector = htmls.S(result) self.assertEqual(selector.one('p.objecttable-cellvalue').alltext_normalized, 'test_value') self.assertTrue(selector.exists('p.objecttable-cellbuttons')) self.assertEqual(selector.count('a'), 2)
def test_sanity(self): selector = htmls.S( listbuilder_role.AnyAdminRoleItemFrame( inneritem=mock.MagicMock()).render()) self.assertTrue( selector.exists( '.devilry-frontpage-listbuilder-roleselect-itemframe'))
def test_correct_devilryrole(self): testuser = mommy.make(settings.AUTH_USER_MODEL) selector = htmls.S( listbuilder_role.StudentRoleItemValue(value=testuser).render()) self.assertTrue( selector.exists( '.devilry-frontpage-listbuilder-roleselect-itemvalue-student'))
def test_correct_devilryrole(self): selector = htmls.S( listbuilder_role.StudentRoleItemFrame( inneritem=mock.MagicMock()).render()) self.assertTrue( selector.exists( '.devilry-frontpage-listbuilder-roleselect-itemframe-student'))
def test_status_is_corrected(self): devilry_group_mommy_factories.feedbackset_first_attempt_published( grading_points=1) testgroup = AssignmentGroup.objects.annotate_with_is_corrected_count().first() selector = htmls.S(groupdetails.GroupDetailsRenderable(value=testgroup, assignment=testgroup.assignment).render()) self.assertFalse(selector.exists('.devilry-cradmin-groupitemvalue-status'))
def test_post_user_not_found(self): response = self.client.post(self.url, {'email': '*****@*****.**'}) self.assertEqual(response.status_code, 200) selector = htmls.S(response.content) self.assertIn( 'No account with this email address found', selector.one('form#id_django_cradmin_resetpassword_begin_form').alltext_normalized)
def test_without_description(self): rendered = listbuilder.itemvalue.UseThis(value=self.__make_mock_value('testvalue'))\ .render(request=self.__make_mock_request()) selector = htmls.S(rendered) self.assertFalse( selector.exists( '.test-cradmin-listbuilder-title-description__description'))
def test_paginate_by_middlepage(self): testmodels.SomeItem.objects.bulk_create( [testmodels.SomeItem(name=str(x)) for x in range(9)]) class MyObjectTableView(objecttable.ObjectTableView): model = testmodels.SomeItem paginate_by = 4 def get_queryset_for_role(self, role): return testmodels.SomeItem.objects.all() request = self.factory.get('/test', { 'page': 2 }) self._mock_request(request) response = MyObjectTableView.as_view()(request) response.render() selector = htmls.S(response.content) # selector.one('#cradmin_legacy_contentwrapper').prettyprint() self.assertEqual(selector.count('#objecttableview-table>tbody>tr'), 4) self.assertTrue(selector.exists('#cradmin_legacy_contentwrapper .pager')) self.assertTrue(selector.exists('#cradmin_legacy_contentwrapper .pager .previous')) self.assertTrue(selector.exists('#cradmin_legacy_contentwrapper .pager .next')) self.assertFalse(selector.exists('#cradmin_legacy_contentwrapper .pager .previous.disabled')) self.assertFalse(selector.exists('#cradmin_legacy_contentwrapper .pager .next.disabled'))
def test_get_render_not_authenticated(self): request = self.factory.get('/test') request.user = AnonymousUser() token = self.__create_token() with self.settings(DJANGO_CRADMIN_SITENAME='Testsite'): response = AcceptInviteView.as_view()(request, token=token.token) self.assertEqual(response.status_code, 200) response.render() selector = htmls.S(response.content) self.assertEqual( selector.one('#django_cradmin_invite_accept_login_button')['href'], '/accounts/login/?next=http%3A%2F%2Ftestserver%2Ftest') self.assertEqual( selector.one( '#django_cradmin_invite_accept_register_account_button') ['href'], '/cradmin_register_account/?next=http%3A%2F%2Ftestserver%2Ftest') self.assertEqual( selector.one('#django_cradmin_invite_accept_login_button'). alltext_normalized, 'Sign in') self.assertEqual( selector.one( '#django_cradmin_invite_accept_register_account_button'). alltext_normalized, 'Sign up for Testsite')
def test_render_multiple_simple_columns(self): testmodels.SomeItem.objects.create(name='Item One', somenumber=10) class MyObjectTableView(objecttable.ObjectTableView): model = testmodels.SomeItem columns = ['name', 'somenumber'] def get_queryset_for_role(self, role): return testmodels.SomeItem.objects.all() request = self.factory.get('/test') self._mock_request(request) response = MyObjectTableView.as_view()(request) response.render() selector = htmls.S(response.content) self.assertEqual(selector.count('#objecttableview-table>thead>tr>th'), 2) self.assertEqual( selector.one('#objecttableview-table>thead>tr>th:first-child').alltext_normalized, 'The name - Ordered descending - Click to order ascending') self.assertEqual( selector.one('#objecttableview-table>thead>tr>th:last-child').alltext_normalized, 'Somenumber - Ordered descending - Click to order ascending') self.assertEqual(selector.count('#objecttableview-table>tbody>tr'), 1) self.assertEqual(selector.count('#objecttableview-table>tbody>tr>td'), 2) self.assertEqual( selector.one('#objecttableview-table>tbody>tr>td:first-child').alltext_normalized, 'Item One') self.assertEqual( selector.one('#objecttableview-table>tbody>tr>td:last-child').alltext_normalized, '10')
def test_submit_button_text_default(self): selector = htmls.S( target_renderer.Target(form=forms.Form()).render( request=mock.MagicMock())) self.assertEqual( 'Submit selection', selector.one('button[type="submit"]').alltext_normalized)
def test_render_order_descending_column(self): testmodels.SomeItem.objects.create(name='Item A') testmodels.SomeItem.objects.create(name='Item B') testmodels.SomeItem.objects.create(name='Item C') class MyObjectTableView(objecttable.ObjectTableView): model = testmodels.SomeItem columns = ['name'] def get_queryset_for_role(self, role): return testmodels.SomeItem.objects.all() request = self.factory.get('/test', { 'ordering': 'd0' }) self._mock_request(request) response = MyObjectTableView.as_view()(request) response.render() selector = htmls.S(response.content) # selector.one('#cradmin_legacy_contentwrapper thead').prettyprint() self.assertEqual(selector.count('#objecttableview-table>tbody>tr'), 3) self.assertEqual( selector.one('#objecttableview-table>tbody>tr:first-child>td').alltext_normalized, 'Item C') self.assertEqual( selector.one('#objecttableview-table>tbody>tr:last-child>td').alltext_normalized, 'Item A') self.assertEqual( selector.one('#objecttableview-table>thead>tr>th').alltext_normalized, 'The name - Ordered descending - Click to order ascending')
def test_render_list_descriptions(self): role1 = mock.MagicMock() role1.id = 1 role1.title = 'Role One' role1.description = 'Role One desc' role2 = mock.MagicMock() role2.id = 2 role2.title = 'Role Two' role2.description = 'Role Two desc' cradmin_instance = self.__mock_cradmin_instance(roles=[role1, role2]) request = self.factory.get('/roleselecttest') request.cradmin_instance = cradmin_instance response = RoleSelectView.as_view()(request) self.assertEquals(response.status_code, 200) response.render() selector = htmls.S(response.content) self.assertEqual( selector.count('.test-cradmin-roleselect-list__itemdescription'), 2) titletextlist = [ element.alltext_normalized for element in selector.list( '.test-cradmin-roleselect-list__itemdescription') ] self.assertEquals(titletextlist, ['Role One desc', 'Role Two desc'])
def test_render_search_match(self): testmodels.SomeItem.objects.create(name='Item One') testmodels.SomeItem.objects.create(name='Item Two') testmodels.SomeItem.objects.create(name='Item Three') class MyObjectTableView(objecttable.ObjectTableView): model = testmodels.SomeItem columns = ['name'] searchfields = ['name'] def get_queryset_for_role(self, role): return testmodels.SomeItem.objects.all() request = self.factory.get('/test', { 'search': 'Item Two' }) self._mock_request(request) response = MyObjectTableView.as_view()(request) response.render() selector = htmls.S(response.content) self.assertEqual(selector.count('#objecttableview-table>tbody>tr'), 1) self.assertEqual( selector.one('#objecttableview-table>tbody>tr>td').alltext_normalized, 'Item Two')
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_product_detail_view_user(self): ''' test by the help of htmls module. (see https://github.com/espenak/htmls/) ''' minimal_style = mommy.make(MinimalStyle) self.client.login(username='******', password='******') kwargs = { 'id': 1, 'name': 'Product', 'minimal_style': minimal_style, 'base_price': 100, 'atelier': self.user_profile.atelier, } instance = mommy.make('atelier.Product', **kwargs) response = self.client.get('/en/atelier/product/{}/'.format( instance.id)) self.assertEqual(response.status_code, 200) selector = htmls.S(response.content) name = selector.one('.name').alltext_normalized minimal = selector.one('.minimal_style').alltext_normalized base_price = selector.one('.base_price').alltext_normalized self.assertEqual(response.status_code, 200) self.assertEqual(name, 'Product') self.assertEqual(minimal, minimal_style.group) self.assertEqual(base_price, '100.00 ₴') self.assertTemplateUsed(response, 'atelier/product_detail.html')
def test_not_qualified_for_final_exam(self): testuser = mommy.make(settings.AUTH_USER_MODEL) testperiod = mommy.make('core.Period') relatedstudent = mommy.make('core.RelatedStudent', period=testperiod, user=testuser) status = mommy.make('devilry_qualifiesforexam.Status', period=testperiod, status=Status.READY) mommy.make('devilry_qualifiesforexam.QualifiesForFinalExam', relatedstudent=relatedstudent, status=status, qualifies=False) testperiod_annotated = Period.objects\ .extra_annotate_with_user_qualifies_for_final_exam(user=testuser)\ .get(id=testperiod.id) selector = htmls.S( devilry_listbuilder.period.StudentItemValue( value=testperiod_annotated).render()) self.assertFalse( selector.exists( '.devilry-cradmin-perioditemvalue-student-qualifedforexam-yes') ) self.assertTrue( selector.exists( '.devilry-cradmin-perioditemvalue-student-qualifedforexam-no')) self.assertEqual( 'NOT qualified for final exam', selector.one( '.devilry-cradmin-perioditemvalue-student-qualifedforexam'). alltext_normalized)
def test_without_description(self): rendered = listbuilder.itemvalue.TitleDescription(value='testvalue')\ .render(request=mock.MagicMock()) selector = htmls.S(rendered) self.assertFalse( selector.exists( '.test-cradmin-listbuilder-title-description__description'))
def test_do_not_render_if_empty(self): container = uicontainer.messagescontainer.MessagesContainer( test_css_class_suffixes_list=['messages'] )\ .bootstrap() selector = htmls.S(container.render()) self.assertFalse(selector.exists('.test-messages'))
def test_viewbutton_not_rendered(self): rendered = listbuilder.itemvalue.EditDelete(value='testvalue')\ .render(request=mock.MagicMock()) selector = htmls.S(rendered) self.assertFalse( selector.exists( '.test-cradmin-listbuilder-edit-delete__previewbutton'))
def test_student_group_comment_item_value_semi_anonymous(self): testassignment = mommy.make_recipe( 'devilry.apps.core.assignment_activeperiod_start', anonymizationmode=core_models.Assignment. ANONYMIZATIONMODE_SEMI_ANONYMOUS) testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment) candidate = mommy.make( 'core.Candidate', assignment_group=testgroup, relatedstudent__user__fullname='Test User', relatedstudent__user__shortname='*****@*****.**') comment = mommy.make('devilry_group.GroupComment', user=candidate.relatedstudent.user, user_role='student', feedback_set__group=testgroup) selector = htmls.S( listbuilder.StudentGroupCommentItemValue( value=comment, devilry_viewrole='examiner', user_obj=candidate, assignment=testassignment).render()) self.assertFalse( selector.exists('.devilry-user-verbose-inline-fullname')) self.assertTrue( selector.exists('.devilry-core-candidate-anonymous-name'))
def test_client_detail_view_user(self): ''' test by the help of htmls module. (see https://github.com/espenak/htmls/) ''' self.client.login(username='******', password='******') kwargs = { 'id': 1, 'first_name': 'Ivan', 'last_name': 'Sakh', 'tel_number': 123456, 'place': 'Kyiv', 'atelier': self.user_profile.atelier, } instance = mommy.make('atelier.Client', **kwargs) response = self.client.get('/en/atelier/client/{}/'.format( instance.id)) selector = htmls.S(response.content) first = selector.one('.first').alltext_normalized last = selector.one('.last').alltext_normalized tel = selector.one('.tel').alltext_normalized pl = selector.one('.pl').alltext_normalized self.assertEqual(response.status_code, 200) self.assertEqual(first, 'Ivan') self.assertEqual(last, 'Sakh') self.assertEqual(tel, '123456') self.assertEqual(pl, 'Kyiv') self.assertTemplateUsed(response, 'atelier/client_detail.html')