Пример #1
0
    def test_widget_code_cache(self):

        client = Client()
        client.login(username='******', password='******')
        widget_id = {'vendor': 'Wirecloud', 'name': 'test', 'version': '0.1'}

        file_contents = self.build_simple_wgt('template1.xml', other_files=('images/catalogue.png', 'images/catalogue_iphone.png', 'doc/index.html'))
        added, resource = install_resource_to_user(self.user, file_contents=file_contents)
        self.assertTrue(added)
        resource_pk = resource.pk
        xhtml_pk = resource.widget.pk

        # Cache widget code
        response = client.get(reverse('wirecloud.widget_code_entry', kwargs=widget_id))
        self.assertEqual(response.status_code, 200)
        old_code = response.content

        resource.delete()
        self.assertRaises(XHTML.DoesNotExist, XHTML.objects.get, pk=xhtml_pk)
        self.assertRaises(Widget.DoesNotExist, Widget.objects.get, resource__pk=resource_pk)
        self.assertRaises(CatalogueResource.DoesNotExist, CatalogueResource.objects.get, pk=resource_pk)

        # Use a different xhtml code
        file_contents = self.build_simple_wgt('template1.xml', b'code', other_files=('images/catalogue.png', 'images/catalogue_iphone.png', 'doc/index.html'))
        resource = install_resource_to_user(self.user, file_contents=file_contents)

        response = client.get(reverse('wirecloud.widget_code_entry', kwargs=widget_id))
        self.assertEqual(response.status_code, 200)
        new_code = response.content

        self.assertNotEqual(old_code, new_code)
class AnonymousUserViewingThePages(TestCase):
    def setUp(self):
        from django.test import Client
        self.client = Client()
    def test_homepage(self):
        home = self.client.get("/")
        self.assertEqual(home.status_code,200)
    def test_help_all_items(self):
        response = self.client.get(reverse('aristotle:about_all_items'))
        self.assertEqual(response.status_code,200)
    def test_visible_item(self):
        wg = models.Workgroup.objects.create(name="Setup WG")
        ra = models.RegistrationAuthority.objects.create(name="Test RA")
        wg.registrationAuthorities.add(ra)
        item = models.ObjectClass.objects.create(name="Test OC",workgroup=wg)
        s = models.Status.objects.create(
                concept=item,
                registrationAuthority=ra,
                registrationDate=timezone.now(),
                state=ra.locked_state
                )
        home = self.client.get(url_slugify_concept(item))
        #Anonymous users requesting a hidden page will be redirected to login
        self.assertEqual(home.status_code,302)
        s.state = ra.public_state
        s.save()
        home = self.client.get(url_slugify_concept(item))
        self.assertEqual(home.status_code,200)
Пример #3
0
    def test_password_reset(self):
        """
        Tests the forgotten/reset password workflow.
        """

        c = Client()

        resp = c.get(reverse('password_reset'))
        self.assertTrue(resp.status_code, 200)

        resp = c.post(reverse('password_reset'), data={'email': '*****@*****.**'})
        self.assertEqual(resp.status_code, 302)

        self.assertEqual(len(mail.outbox), 1)

        token = resp.context[0]['token']
        uid = resp.context[0]['uid']

        # Grab the token and uidb64 so that we can hit the reset url
        resp = c.get(reverse('password_reset_confirm', kwargs={'token': token, 'uidb64': uid}))
        self.assertEqual(resp.status_code, 200)
        self.assertTrue(resp.template_name.endswith('password_reset_confirm.html'))

        resp = c.post(reverse('password_reset_confirm', kwargs={'token': token, 'uidb64': uid}),
                      {'new_password1': 'mynewpassword', 'new_password2': 'mynewpassword'})
        self.assertEqual(resp.status_code, 302)
        self.assertEqual(resolve(urlsplit(resp.url).path).url_name, 'password_reset_complete')

        resp = c.post(reverse('login'), {'username': '******', 'password': '******'})

        # User is returned to the login page on error vs redirected by default
        self.assertEqual(resp.status_code, 302)
        self.assertNotEqual(resolve(urlsplit(resp.url).path).url_name, 'login')
Пример #4
0
class TestViewAct(TestCase):
    '''Tests for view_act view'''
    view_name = 'summer_act_view'

    def setUp(self):
        self.client = Client()
        self.conference = ConferenceFactory(act_style="summer")
        self.act = ActFactory(b_conference=self.conference)

    def test_view_act_all_well(self):
        url = reverse(self.view_name,
                      args=[self.act.pk],
                      urlconf='gbe.urls')
        login_as(self.act.performer.performer_profile, self)
        response = self.client.get(url)
        test_string = 'The Summer Act'
        nt.assert_equal(response.status_code, 200)
        nt.assert_true(test_string in response.content)

    def test_edit_bid_w_redirect(self):
        '''edit_bid, not post, should take us to edit process'''
        url = reverse("act_view",
                      args=[self.act.pk],
                      urlconf="gbe.urls")

        login_as(self.act.performer.performer_profile, self)
        response = self.client.get(url)
        self.assertRedirects(
            response,
            reverse(self.view_name, args=[self.act.pk], urlconf="gbe.urls"))
Пример #5
0
class HostHeaderTestCase(TestCase):

    """Testing boot traffic."""

    def test_underscore_host(self):
        """When host is '_'."""
        self.c = Client(HTTP_HOST='_')
        resp = self.c.get('/')
        self.assertEqual(resp.status_code, 302)

    def test_empy_host(self):
        """When host is ''."""
        self.c = Client(HTTP_HOST='')
        resp = self.c.get('/')
        self.assertEqual(resp.status_code, 302)

    def test_oddchar_host(self):
        """When host is ''."""
        self.c = Client(HTTP_HOST='$')
        resp = self.c.get('/')
        self.assertEqual(resp.status_code, 302)

    def test_wildcard_host(self):
        """When host is ''*.live.akvo-ops.org"""
        self.c = Client(HTTP_HOST='*.live.akvo-ops.org')
        resp = self.c.get('/')
        self.assertEqual(resp.status_code, 302)
Пример #6
0
class WebhooksGET_TestCase(TestCase):

    def setUp(self):
        self.client = Client()

    def _get_query(self, challenge='test challenge',
                   mode='subscribe',
                   token=settings.FACEBOOK_WEBHOOK_TOKEN):
        return {
            'hub.mode': mode,
            'hub.verify_token': token,
            'hub.challenge': challenge
        }

    def test_verification_ok(self):
        url = reverse('webhooks', )
        challenge = 'get OK test challenge'
        response = self.client.get(url, self._get_query(challenge=challenge))
        self.assertEqual(response.status_code, 200)
        # must return the challange
        self.assertEqual(response.content, challenge)

    def test_verification_fail_with_invalid_params(self):
        url = reverse('webhooks', )
        response = self.client.get(url, )
        self.assertEqual(response.status_code, 400)

    def test_verification_fail_with_wrong_token(self):
        url = reverse('webhooks', )
        response = self.client.get(url, self._get_query(token='false token'))
        # must fail with invalid token
        self.assertEqual(response.status_code, 400)
Пример #7
0
class SmokeTest(TestCase):

    def setUp(self):
        self.client = Client()
        self.user = User.objects.create(username="******",)
        self.sponsor = Sponsor.objects.create(
            slug="chipy",
            name="Chipy"
        )

    def test__sponsor_detail__GET(self):
        # SETUP

        # TEST
        response = self.client.get(
            reverse_lazy('sponsor_detail', args=[self.sponsor.slug]), follow=True)

        # CHECK
        self.assertEqual(response.status_code, 200)

    def test__sponsor_list__GET(self):
        # SETUP

        # TEST
        response = self.client.get(
            reverse_lazy('sponsor_list'), follow=True)

        # CHECK
        self.assertEqual(response.status_code, 200)
Пример #8
0
class PhotoTestCase(TestCase):

    maxDiff = None
    fixtures = ['main/tests/fixtures/competitions.yaml', 'main/tests/fixtures/prizes.yaml',
                'main/tests/fixtures/votes.yaml',
                'main/tests/fixtures/winners.yaml',]


    def test_history_clean(self):
        u = MyUser.objects.get(email='*****@*****.**')
        self.assertTrue(u.is_active)
        self.assertTrue(u.check_password("1"))

        self.c = Client()
        response = self.c.post('/api/v1/auth/login/', {'email': '*****@*****.**', 'password': '******'})
        self.assertEquals(response.status_code, 200)

        response = self.c.get('/api/v1/photos/?competition_id=1')
        photos = json.loads(response.content)['results']
        self.assertEqual(len(photos), 1)

        response = self.c.get('/api/v1/competitions/1/clean_view_history/')

        response = self.c.get('/api/v1/photos/?competition_id=1')
        photos = json.loads(response.content)['results']
        self.assertEqual(len(photos), 3)
Пример #9
0
    def test_activate(self):
        c = Client()

        response = c.get('/signup/activate/')
        self.assertEqual(response.status_code, 200)

        response = c.post('/signup/activate/', {'ps1_email': '*****@*****.**'}, follow=True)
        self.assertEqual(response.status_code, 200)

        # "read" email
        token = self.get_token()
        activation_url = '/signup/activate/confirm/{}'.format(token.token)
        response = c.get(activation_url)
        self.assertEqual(response.status_code, 200)
        
        post_data = {
            'preferred_username': '******',
            'first_name': 'Jay',
            'last_name': 'Hacker',
            'preferred_email': '*****@*****.**',
            'token': token.token,
        }
        response = c.post(activation_url, post_data, follow=True)
        self.assertEqual(response.status_code, 200)

        jay = Person.objects.get(pk=self.person.pk)
        self.assertIsNotNone(jay.user)
        PS1User.objects.delete_user(jay.user)
Пример #10
0
class HomePageViewTest(BaseTest):

    def setUp(self):
        self.client = Client()
        self.user, self.country = self.create_user_with_no_permissions()
        self.assign('can_submit_responses', self.user)
        self.client.login(username=self.user.username, password='******')

    def test_get(self):
        response = self.client.get("/")
        self.assertEqual(200, response.status_code)
        templates = [template.name for template in response.templates]
        self.assertIn('home/index.html', templates)

    def test_homepage_redirects_to_first_section_of_first_questionnaire_if_any_if_logged_in_as_data_submitter(self):
        questionnaire = Questionnaire.objects.create(name="JRF", description="bla")
        section = Section.objects.create(title="section", order=1, questionnaire=questionnaire, name="section")
        Section.objects.create(title="section", order=2, questionnaire=questionnaire, name="section")

        response = self.client.get("/")
        expected_url = "/questionnaire/entry/%d/section/%d/" % (questionnaire.id, section.id)
        self.assertRedirects(response, expected_url=expected_url)

    def test_login_required_for_home_get(self):
        self.assert_login_required('/')
Пример #11
0
    def test_do_pagination(self):
        # get first page for not giving integer as page number
        c = Client()
        response = c.get('/?page=bad_page_number')
        self.assertTrue(b'Proyectos de Ley' in response.content)

        # user gives empty page
        response = c.get('/?page=')
        self.assertTrue(b'Proyectos de Ley' in response.content)

        # user gives empty page
        response = c.get('/?page=100')
        self.assertTrue(b'Proyectos de Ley' in response.content)

        # user gives pagination more than 20
        entries = []
        j = 1
        for i in self.dummy_items:
            i['id'] = j
            entries.append(Proyecto(**i))
            j += 1
        Proyecto.objects.bulk_create(entries)
        response = c.get('/?page=21')
        self.assertFalse(b'/?page=10' in response.content)
        self.assertTrue(b'/?page=22' in response.content)
Пример #12
0
class SearchTestCase(TestCase):
    def setUp(self):
        self.client = Client()
        home_url = urlresolvers.reverse('catalog_home')
        response = self.client.get(home_url)
        self.failUnless(response.status_code, httplib.OK)

    def test_html_escaped(self):
        """ search text displayed on results page is HTML-encoded """
        search_term = '<script>alert(xss)</script>'
        search_url = urlresolvers.reverse('search_results')
        search_request = search_url + '?q=' + search_term
        response = self.client.get(search_request)
        self.failUnlessEqual(response.status_code, httplib.OK)
        escaped_term = html.escape(search_term)
        self.assertContains(response, escaped_term)
    def test_RI(self):
        """ search text displayed on results page is HTML-encoded """
        search_term = 'RI'
        search_url = urlresolvers.reverse('search_results')
        search_request = search_url + '?q=' + search_term
        response = self.client.get(search_request)
        self.assertContains(response, 'Warwick')

    def test_MA(self):
        """ search text displayed on results page is HTML-encoded """
        search_term = 'MA'
        search_url = urlresolvers.reverse('search_results')
        search_request = search_url + '?q=' + search_term
        response = self.client.get(search_request)
        self.assertContains(response, 'Boston')
Пример #13
0
class StudentsDetailTest(TestCase):
	def setUp(self):
		self.client = Client()
		insert_student()

	def test_detail_page_student(self):
		response = self.client.get('/students/1/')
		self.assertEqual(response.status_code, 200)
		self.assertTemplateUsed(response, 'students/student_detail.html')

	def test_mail_check_student(self):
		response = self.client.get('/students/1/')
		self.assertContains(response, '*****@*****.**')

	def test_course_check_student(self):
		response = self.client.get('/students/1/')
		self.assertContains(response, 'Python/Django')
		self.assertContains(response, '/courses/1/')

	def test_skype_check_student(self):
		response = self.client.get('/students/1/')
		self.assertContains(response, 'test1')

	def test_phone_check_student(self):
		response = self.client.get('/students/1/')
		self.assertContains(response, '099-999-99-99')
Пример #14
0
class HomeTests(BaseTestCase):
    """
    Home Tests
    """
    def setUp(self):
        print settings.DATABASES

        super(HomeTests, self).setUp()
        self.client = Client()

    def test_reach_homepage_no_sets(self):
        response = self.client.get(reverse('home'))
        self.assertEqual(response.status_code, 404)

    def test_reach_homepage_with_medias(self):
        # Build sets / archives / medias
        for bloc in settings.HOME_SETTINGS:
            if bloc['sets'] is not None:
                for set_id in bloc['sets']:
                    try:
                        self.set = SetFactory(id=set_id)
                    except:
                        self.set = Set.objects.get(id=set_id)
                    self.archive = ArchiveFactory(set=self.set)
                    self.media = MediaFactory.build(confidentiality='0', archive=self.archive)
                    create_without_encoding(self.media)
        # Create a media related to a work
        self.work = WorkFactory()
        self.media = MediaFactory.build(confidentiality='0', work=self.work)
        create_without_encoding(self.media)
        response = self.client.get(reverse('home'))
        self.assertEqual(response.status_code, 200)
Пример #15
0
class ViewsTestCase(TestCase):

    def setUp(self):
        Group.objects.get_or_create(name="Student")
        Group.objects.get_or_create(name="Teacher")
        register_student("Navi_Smailliw", "makingRussiaStrong", "*****@*****.**", "Ivan", "Smailliw")

        setup_test_environment()

        self.client = Client()
        self.client.login(username="******", password="******")

    @patch('Exercise.views.get_assigned_exercise_for_students')
    def test_get_exercise_for_student(self, patch):
        patch.return_value = 'Dummy exercise'

        response = self.client.get(reverse(get_exercise_for_student))
        self.assertEqual(200, response.status_code)
        self.assertTrue('exercises' in response.context)
        self.assertEqual('Dummy exercise', response.context['exercises'])

    @patch('Exercise.views.Exercise.objects.get')
    def test_student_single_exercise_editor(self, patch):
        patch.return_value = Exercise.objects.create(description='Dummy description')

        response = self.client.get(reverse(student_single_exercise_editor, args=('1',)))

        self.assertEqual(200, response.status_code)
        self.assertTrue('ex_description' in response.context)
        self.assertEqual('Dummy description', response.context['ex_description'])
        patch.assert_called_with(ex_id='1')

    def test_compile_code(self):
        pass #TODO
Пример #16
0
class DashboardViewTests(TestCase):
    def setUp(self):
        self.client = Client()
        self.user1 = User.objects.create_user(username='******', password='******')

    def test_get_dashboard(self):
        self.client.login(username=self.user1.username, password='******')
        response = self.client.get('/dashboard/')
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'Registered Device')

    def test_get_dashboard_while_not_logged_in(self):
        response = self.client.get('/dashboard/')
        print(response)
        self.assertEqual(response.status_code, 302)
        self.assertRegex(response.url, r'^.*/login/\?next=/dashboard/$')

    def test_post_new_device(self):
        self.client.login(username=self.user1.username, password='******')
        response = self.client.post('/dashboard/', data={
            'device_id': '12345678',
            'device_name': 'test_device'
        })
        self.assertEqual(response.status_code, 200)
        self.assertGreater(len(response.context['devices']), 0)
Пример #17
0
    def test_poll(self):
        self.feed.poll()

        self.assertEqual(self.feed.editions.count(), 1)
        edition = self.feed.editions.all()[0]

        self.assertEqual(edition.articles.count(), 55)
        self.assertEqual(edition.articles.filter(section__slug="newswire").count(), 20)
        self.assertEqual(edition.articles.filter(section__slug="film").count(), 15)
        self.assertEqual(edition.articles.filter(section__slug="tv-club").count(), 20)

        c = Client()
        response = c.get("/%s/latest.xml" % self.feed.slug)
        self.assertRedirects(response, edition.get_absolute_url(), status_code=302)

        response = c.get(edition.get_absolute_url())
        self.assertEqual(response.status_code, 200)

        for section_slug in ["newswire", "film", "tv-club"]:
            response = c.get(reverse("pubfeeds.core.views.section", args=(edition.feed.slug, edition.id, section_slug)))
            self.assertEqual(response.status_code, 200)

        for article in edition.articles.all():
            response = c.get(article.get_absolute_url())
            self.assertEqual(response.status_code, 200)
Пример #18
0
class ViewTests(TestCase):

    fixtures = ['initial_data.json']

    def setUp(self):
        self.client = Client()

    def test_page(self):
        pages = Page.objects.all()
        assert_not_equal(pages.count(), 0)
        for page in pages:
            if not page.is_public():
                expected = 404
            elif page.slug in ('blog', 'index', 'talk',):
                # Blog front page is explicitly redirected to the latest post.
                # We test this is the blog app, so this is just special-cased.
                # The index page is special-cased to redirect to pages:index.
                expected = 302
            else:
                expected = 200
            response = self.client.get(page.get_absolute_url())
            eq_(response.status_code, expected, page.title)

    def test_index(self):
        eq_(self.client.get('/').status_code, 200)
Пример #19
0
class HomePageTests(TestCase):

    def setUp(self):
        self.client = Client()
        self.User = get_user_model()
        self.link_home = reverse('home')
        self.link_requests = reverse('requests')

    def test_hardcoded_data(self):
        '''Checking presence of hardcoded data
        '''
        response = self.client.get(self.link_home)
        self.assertContains(response, 'Enough is enough')

    def test_no_user(self):
        '''Page contains hard-coded data in case of no users in DB
        '''
        self.User.objects.all().delete()
        response = self.client.get(self.link_home)
        self.assertContains(response, 'Enough is enough')

    def test_more_than_one_user(self):
        '''Page still contains 'admin' user data in case of more than one user in DB
        '''
        self.User.objects.create_user(username='******')
        response = self.client.get(self.link_home)
        self.assertContains(response, 'Enough is enough')

    def test_requests_link(self):
        '''Page contains the link to the 'requests' page
        '''
        response = self.client.get(self.link_home)
        soup = bss.BeautifulSoupSelect(response.content)
        self.assertTrue(soup('a[href="%s"]' % self.link_requests))
Пример #20
0
class DailyEventViewTest(TestCase):

    def setUp(self):
        self.client = Client()
        self.user = PyDayUser.objects._create_user("*****@*****.**", "secret",
                                                   "MynameisWhat",
                                                   "MynameisWho")
        self.client.login(email='*****@*****.**', password='******')

    def test_get_wrong_date(self):
        with self.assertTemplateUsed("error.html"):
            response = self.client.get('/calendar/daily_events/6000/60/60')
            self.assertContains(response, 'Impossible date')

    def test_get_right_date(self):
        with self.assertTemplateUsed('daily_event.html'):
            response = self.client.get('/calendar/daily_events/6000/10/10')
            self.assertEqual(response.status_code, 200)

    def test_no_date(self):
        date = datetime.now()
        with self.assertTemplateUsed('daily_event.html'):
            response = self.client.get(reverse("pyday_calendar:daily_events"))
            self.assertEqual(response.status_code, 200)
            self.assertContains(response, "Events for {} ".format(date.day))
Пример #21
0
class AlarmViewTest(TestCase):

    def setUp(self):
        self.client = Client()
        self.user = PyDayUser.objects._create_user("*****@*****.**", "secret",
                                                   "MynameisWhat",
                                                   "MynameisWho")
        self.client.login(email='*****@*****.**', password='******')

    def test_get(self):
        with self.assertTemplateUsed("create_alarm.html"):
            self.client.get(reverse("pyday_alarms:alarms"))

    def test_post(self):
        with self.assertTemplateUsed("error.html"):
            response = self.client.post(reverse("pyday_alarms:alarms"),
                                        {'date': '07/01/2016', 'hour': '1',
                                         'mins': '0', 'message': 'haha'},
                                        follow=True)
            self.assertContains(response, "Raspberry!")

    def test_post_invalid_form(self):
        with self.assertTemplateUsed("error.html"):
            response = self.client.post(reverse("pyday_alarms:alarms"), {})
            self.assertContains(response, "Invalid form")
Пример #22
0
class StatusViewsTest(ESTestCase):

    @classmethod
    def setUpTestData(cls):
        super(ESTestCase, cls).setUpTestData()

    def setUp(self):
        self.client = Client()

    def test_status_health(self):
        """check health url"""
        # fill data in elastic.
        fixture_utils.create_nummeraanduiding_fixtures()
        create_hr_data()

        # load all BAG and HR in elastic.
        self.rebuild_elastic_index()
        # give elastic time to proces new data
        time.sleep(2)

        response = self.client.get('/status/health')
        # Making sure its a 200
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.content, b'Data OK')

    def test_status_health_not_ok(self):

        # empty the indexes.
        call_command(
            'elastic_indices', '--recreate', 'hr', 'bag', verbosity=0)

        response = self.client.get('/status/health')
        # Making sure its a 500
        self.assertEqual(response.status_code, 500)
        self.assertEqual(response.content, b'Elastic data missing.')
Пример #23
0
class ClientTests(TestCase):

    def setUp(self):
        self.c = Client()
        self.authToken = "77d254b3caba4fb29747958138136ffa"
        self.url = "http://130.206.80.61:35357/v2.0"
        self.mockedClient = client
        self.auth = mock()
        self.auth.stub("authenticate")
        self.auth.__setattr__("auth_token", self.authToken)
        when(self.auth.stub("tokens")).authenticate(token="1234").thenReturn(True)
        when(AuthorizationManager.AuthorizationManager)\
            .checkToken(None, "1234", "tenantId").thenReturn(True)
        when(AuthorizationManager.AuthorizationManager)\
            .checkToken(None, "12345", "tenantId").thenRaise(AuthorizationFailure())
        when(AuthorizationManager.AuthorizationManager).\
            get_auth_token("admin", "openstack").thenReturn(self.authToken)

    def test_servers_view_url(self):
        response = self.c.get('/v1.0/tenantId/servers/', **{'HTTP_X_AUTH_TOKEN': '1234'})

    def test_server_rules_view_url(self):
        response = self.c.get('/v1.0/tenantId/servers/rules', **{'HTTP_X_AUTH_TOKEN': '1234'})

    def test_tenant_info_view_url_fail(self):
        """ Test if using an invalid token to access tenant_info resource returns an AuthorizationFailure Exception.
        """
        try:
            response = self.c.get('/v1.0/tenantId', **{'HTTP_X_AUTH_TOKEN': '12345'})
        except AuthorizationFailure as ex:
            self.assertRaises(ex)
            
Пример #24
0
class ArticleTest(TestCase):
    def setUp(self):
        self.client = Client()
        self.factory = RequestFactory()

    def test_validate_article_edition(self):
        user2 = User.objects.create_user(username="******",
                                         email="*****@*****.**",
                                         password="******")

        article = Article()
        article.title = "nicetitle"
        article.content = "nicecontent"
        article.create_user = user2
        article.create_user.id = user2.id
        article.save()
        self.client.login(username="******", password="******")
        response = self.client.get(reverse('edit_article', kwargs={'id': '1'}))
        self.assertEqual(response.status_code, 302)
        response = self.client.post(reverse('edit_article',
                                            kwargs={'id': '1'}))
        self.assertEqual(response.status_code, 302)
        self.client.login(username="******", password="******")
        response = self.client.get(reverse('edit_article', kwargs={'id': '1'}),
                                   user=user2)
        self.assertEqual(response.status_code, 200)
        response = self.client.post(reverse('edit_article',
                                            kwargs={'id': '1'}))
        self.assertEqual(response.status_code, 200)
class CitationFormClientTest( TestCase ):
    """ Checks citation form via Client. """

    def setUp(self):
        self.client = Client()

    def test_plain_get(self):
        """ Checks plain form. """
        response = self.client.get( '/find/citation_form/' )  # project root part of url is assumed
        self.assertEqual( 200, response.status_code )
        self.assertEqual( True, '<input type="radio" name="form" value="article">Article' in response.content.decode('utf-8') )
        for key in ['article_form', 'book_form', 'csrf_token', 'form_type', 'messages', 'problem_link' ]:
            self.assertTrue( key in response.context.keys(), 'key `%s` not found' % key )

    def test_get_isbn_parameter(self):
        """ Checks incorporation of param into form. """
        response = self.client.get( '/find/citation_form/?isbn=9780439339117' )  # project root part of url is assumed
        # print response.content
        self.assertEqual( 200, response.status_code )
        self.assertEqual( True, '9780439339117' in response.content.decode('utf-8') )
        self.assertEqual( 'book', response.context['form_type'] )
        # pprint.pformat( response.context )
        for key in ['article_form', 'book_form', 'csrf_token', 'form_type', 'messages', 'problem_link' ]:
            self.assertTrue( key in response.context.keys(), 'key `%s` not found' % key )

    def test_get_doi_parameter(self):
        """ Checks incorporation of param into form. """
        response = self.client.get( '/find/citation_form/?doi=12611747' )  # project root part of url is assumed
        # print response.content
        self.assertEqual( 200, response.status_code )
        self.assertEqual( True, '12611747' in response.content.decode('utf-8') )
        self.assertEqual( 'article', response.context['form_type'] )
        pprint.pformat( response.context )
        for key in ['article_form', 'book_form', 'csrf_token', 'form_type', 'messages', 'problem_link' ]:
            self.assertTrue( key in response.context.keys(), 'key `%s` not found' % key )
Пример #26
0
def nested_view(request):
    """
    A view that uses test client to call another view.
    """
    c = Client()
    c.get("/no_template_view/")
    return render(request, 'base.html', {'nested': 'yes'})
Пример #27
0
class EndpointAuthenticationTestCase(TestCase):

    def setUp(self):
        self.c = Client()
        self.user = User.objects.create_user(username="******", password="******")

    def tearDown(self):

        for role in self.user.roles.all():
            role.delete()

    def test_endpoints_require_token_auth(self):
        url = reverse('user-me')
        response = self.c.get(url)

        assert response.status_code == 401, "401: Authentication required"

    def test_director_can_see_anyone(self):
        url = reverse('user-me')
        self.user.add_role('Director')

        response = self.c.get(
            url, HTTP_AUTHORIZATION="Token {0}" . format(self.user.get_token()))

        assert response.status_code == 200, "Director can view any user"

    def test_user_can_see_self(self):
        url = reverse('user-me')

        response = self.c.get(
            url, HTTP_AUTHORIZATION="Token {0}" . format(self.user.get_token()))

        assert response.status_code == 200, "User can see self"
Пример #28
0
class UserLogoutTest(TestCase):
    """User logout test class."""

    def setUp(self):
        # create users
        create_test_users(self)
        # launch client
        self.client = Client()


    def test_urls(self):
        urls = [
            {
                'url': '/logout/',
                'status': 302,
                'template': 'user/user_login.html'
            },
        ]
        test_urls(self, urls)

    def test_logout(self):
        # login with user
        login(self, self.user)
        response = self.client.get('/logout/')
        # assert redirection is ok
        self.assertEqual(response.status_code, 302)
        # assert user isn't connected anymore
        self.assertEqual(hasattr(response.context, 'user'), False)

        response = self.client.get('/logout/', follow=True)
        # assert redirection is ok
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.templates[0].name,
                'user/user_login.html')
Пример #29
0
class PasswordResetChangeTest(ShadowConTestCase):
    def setUp(self):
        self.client = Client()

    def run_test(self, key):
        response = self.client.get(reverse(key))
        self.assertSectionContains(response, "ShadowCon 2016", "title")
        return response

    def test_login(self):
        response = self.run_test('login')
        self.assertSectionContains(response, '<p><a href="%s">%s</a></p>' % (reverse('password_reset'),
                                                                             'Lost password\\?'),
                                   'section id="main" role="main"', '/section')
        self.assertSectionContains(response, '<p><a href="%s">%s</a></p>' % (reverse('convention:new_user'),
                                                                             'Create New Account'),
                                   'section id="main" role="main"', '/section')

    def test_logout(self):
        response = self.run_test('logout')
        self.assertSectionContains(response, 'You have successfully logged out',
                                   'section id="main" role="main"', '/section')

    def test_password_change(self):
        self.client.login(username="******", password="******")
        response = self.run_test('password_change')
        self.assertSectionContains(response, 'Enter new password', 'section id="main" role="main"', '/section')

    def test_password_change_done(self):
        self.client.login(username="******", password="******")
        response = self.run_test('password_change_done')
        self.assertSectionContains(response, '<h2>Password Changed</h2>', 'section id="main" role="main"', '/section')

    def test_password_reset(self):
        response = self.run_test('password_reset')
        self.assertSectionContains(response, 'Forgotten your password\\? Enter your',
                                   'section id="main" role="main"', '/section')

    def test_password_reset_done(self):
        response = self.run_test('password_reset_done')
        self.assertSectionContains(response, 'Password reset sent', 'section id="main" role="main"', '/section')

    def test_password_reset_confirm_invalid_link(self):
        response = self.client.get(reverse('password_reset_confirm', args=["invalid", "4a8-cd1bf13135ee4cae7176"]))
        self.assertSectionContains(response, "ShadowCon 2016", "title")
        self.assertSectionContains(response, 'The password reset link was invalid',
                                   'section id="main" role="main"', '/section')

    def test_password_reset_confirm_valid_link(self):
        self.client.post(reverse('password_reset'), {"email": "*****@*****.**"})

        email = self.get_email()
        start = str(email.body).index('/reset')
        stop = str(email.body).index('Your username, in case you\'ve forgotten: user')
        link = str(email.body)[start:stop].strip()

        response = self.client.get(link)
        self.assertSectionContains(response, "ShadowCon 2016", "title")
        self.assertSectionContains(response, 'Please enter your new password twice',
                                   'section id="main" role="main"', '/section')
Пример #30
0
class MontlyEventViewTest(TestCase):

    def setUp(self):
        self.client = Client()
        self.user = PyDayUser.objects._create_user("*****@*****.**", "secret",
                                                   "MynameisWhat",
                                                   "MynameisWho")

    def test_get_not_logged(self):
        response = self.client.get(reverse("pyday_calendar:monthly_events"),
                                   follow=True)
        self.assertEqual(response.redirect_chain,
                         [('/social/register/?next=/calendar/monthly_events/', 302)])

    def test_get_logged(self):
        self.client.login(email='*****@*****.**', password='******')
        with self.assertTemplateUsed("monthly_event.html"):
            resp = self.client.get(reverse("pyday_calendar:monthly_events"))
            self.assertEqual(resp.status_code, 200)

    def test_post_wrong_date(self):
        self.client.login(email='*****@*****.**', password='******')
        with self.assertTemplateUsed("error.html"):
            self.client.post(reverse("pyday_calendar:monthly_events"), {
                             "date": "60/2016"})

    def test_post_right_date(self):
        self.client.login(email='*****@*****.**', password='******')
        with self.assertTemplateUsed("monthly_event.html"):
            self.client.post(reverse("pyday_calendar:monthly_events"), {
                             "date": "6/2016"})
Пример #31
0
class BaseTestCase(TestCase):
    def setUp(self):
        # This comment is for crawling setUp.
        # I leave this implementation for the case that we must use crawled data
        #
        # admin = User(username='******', is_staff=True)
        # admin.set_password('password')
        # admin.save()
        # client = Client()
        # client.login(username='******', password='******')
        #
        # response = client.post('/manager/crawlers/', data={
        #     'year': 2018,
        #     'semester': '1학기',
        # })
        # crawler_id = response.json()['id']
        #
        # from time import sleep
        # for i in range(30):
        #     response = client.get('/manager/crawlers/{}/'.format(crawler_id))
        #     sleep(1)
        # assert 'running' in response.json()['status']
        #
        # client.put('/manager/crawlers/{}/'.format(crawler_id))
        # for i in range(30):
        #     response = client.get('/manager/crawlers/{}/'.format(crawler_id))
        #     if 'running' not in response.json()['status']:
        #         break
        #     sleep(1)
        # assert 'canceled' in response.json()['status']

        college1 = College.objects.create(name='college1')
        department1 = Department.objects.create(name='department1',
                                                college=college1)
        major1 = Major.objects.create(name='major1', department=department1)
        college2 = College.objects.create(name='college2')
        department2 = Department.objects.create(name='department2',
                                                college=college2)
        college3 = College.objects.create(name='college3')

        course1 = Course.objects.create(name='course1',
                                        code='code1',
                                        type='전필',
                                        grade=3,
                                        credit=4,
                                        college=college1,
                                        department=department1)
        course2 = Course.objects.create(name='course2',
                                        code='code2',
                                        type='전선',
                                        grade=2,
                                        credit=3,
                                        college=college1,
                                        department=department1,
                                        major=major1)
        course3 = Course.objects.create(name='course3',
                                        code='code3',
                                        type='교양',
                                        grade=1,
                                        credit=2,
                                        college=college2,
                                        department=department2)

        time_slot1 = TimeSlot.objects.create(day_of_week='월',
                                             start_time='12:00',
                                             end_time='13:15')
        time_slot2 = TimeSlot.objects.create(day_of_week='수',
                                             start_time='12:00',
                                             end_time='13:15')
        time_slot3 = TimeSlot.objects.create(day_of_week='금',
                                             start_time='16:00',
                                             end_time='18:00')
        lecture = Lecture.objects.create(course=course1,
                                         year=2018,
                                         semester='1학기',
                                         number='001',
                                         instructor='가나다',
                                         note='')
        lecture.time_slots.add(time_slot1)
        lecture.time_slots.add(time_slot2)
        lecture.time_slots.add(time_slot3)

        time_slot1 = TimeSlot.objects.create(day_of_week='월',
                                             start_time='14:00',
                                             end_time='15:15')
        time_slot2 = TimeSlot.objects.create(day_of_week='수',
                                             start_time='14:00',
                                             end_time='15:15')
        time_slot3 = TimeSlot.objects.create(day_of_week='목',
                                             start_time='9:00',
                                             end_time='10:45')
        lecture = Lecture.objects.create(course=course1,
                                         year=2018,
                                         semester='1학기',
                                         number='002',
                                         instructor='ABC',
                                         note='RRR')
        lecture.time_slots.add(time_slot1)
        lecture.time_slots.add(time_slot2)
        lecture.time_slots.add(time_slot3)

        time_slot1 = TimeSlot.objects.create(day_of_week='월',
                                             start_time='12:00',
                                             end_time='13:15')
        time_slot2 = TimeSlot.objects.create(day_of_week='수',
                                             start_time='12:00',
                                             end_time='13:15')
        time_slot3 = TimeSlot.objects.create(day_of_week='금',
                                             start_time='16:00',
                                             end_time='18:00')
        lecture = Lecture.objects.create(course=course3,
                                         year=2018,
                                         semester='1학기',
                                         number='001',
                                         instructor='가나다',
                                         note='')
        lecture.time_slots.add(time_slot1)
        lecture.time_slots.add(time_slot2)
        lecture.time_slots.add(time_slot3)

        time_slot1 = TimeSlot.objects.create(day_of_week='월',
                                             start_time='12:00',
                                             end_time='13:15')
        time_slot2 = TimeSlot.objects.create(day_of_week='수',
                                             start_time='12:00',
                                             end_time='13:15')
        time_slot3 = TimeSlot.objects.create(day_of_week='금',
                                             start_time='16:00',
                                             end_time='18:00')
        lecture = Lecture.objects.create(course=course2,
                                         year=2018,
                                         semester='여름학기',
                                         number='001',
                                         instructor='가나다',
                                         note='')
        lecture.time_slots.add(time_slot1)
        lecture.time_slots.add(time_slot2)
        lecture.time_slots.add(time_slot3)

        data = {
            'username': '******',
            'password': make_password('password'),
            'email': '*****@*****.**',
            'grade': 3,
            'college_id': 1,
            'department_id': 1,
        }
        self.student = Student.objects.create(**data)
        data = {
            'username': '******',
            'password': make_password('password'),
            'email': '*****@*****.**',
            'grade': 3,
            'college_id': 1,
            'department_id': 1,
        }
        self.student2 = Student.objects.create(**data)
        data = {
            'username': '******',
            'password': make_password('password'),
            'email': '*****@*****.**',
            'grade': 3,
            'college_id': 1,
            'department_id': 1,
        }
        self.student3 = Student.objects.create(**data)

        self.client = Client()
        self.sign_in()

    def sign_in(self, username='******'):
        self.assertTrue(
            self.client.login(username=username, password='******'))

    def get_test(self, url, success=True, status_code=None):
        response = self.client.get(url)
        print(response.json())
        self.assertEqual(
            response.status_code,
            status_code if status_code else 200 if success else 400)
        return response

    def post_test(self, url, data, success=True, status_code=None):
        response = self.client.post(url, data=data)
        print(response.json())
        self.assertEqual(
            response.status_code,
            status_code if status_code else 201 if success else 400)
        return response

    def put_test(self, url, data, success=True, status_code=None):
        response = self.client.put(url,
                                   data=json.dumps(data),
                                   content_type='application/json')
        print(response.json())
        self.assertEqual(
            response.status_code,
            status_code if status_code else 200 if success else 400)
        return response

    def patch_test(self, url, data, success=True, status_code=None):
        response = self.client.patch(url,
                                     data=json.dumps(data),
                                     content_type='application/json')
        print(response.json())
        self.assertEqual(
            response.status_code,
            status_code if status_code else 200 if success else 400)
        return response

    def delete_test(self, url, status_code=None):
        response = self.client.delete(url)
        print(response.status_code)
        self.assertEqual(response.status_code,
                         status_code if status_code else 204)
        return response
Пример #32
0
class StudentandRubricViewTest(TestCase):

    def add_two_classes_to_semester_add_two_students_to_class_add_one_row(self):
        self.client = Client()
        self.username = '******'
        self.email = '*****@*****.**'
        self.password = '******'
        self.test_user = User.objects.create_superuser(self.username, self.email, self.password)
        login = self.client.login(username=self.username, password = self.password)
        jane = User.objects.create(username="******")
        intasc1 = Standard.objects.create(name="INTASC 1")
        caep1 = Standard.objects.create(name="CAEP 1")

        semester = Semester.objects.create(text="201530")
        edclass1 = EdClasses.objects.create(sectionnumber="01",subject="EG", coursenumber="5000", teacher=self.test_user, crn=2222, semester=semester)
        edclass2 = EdClasses.objects.create(sectionnumber="01",subject="EG", coursenumber="6000",  teacher=self.test_user, crn=3333, semester=semester)
        edclass = EdClasses.objects.create(sectionnumber="01",subject="EG", coursenumber="5111", teacher=jane, crn=4444, semester=semester)
        #semester.classes.add(edclass1)
        #semester.classes.add(edclass2)
        #semester.classes.add(edclass)

        bob = Student.objects.create(lastname="DaBuilder", firstname="Bob",lnumber="21743148")
        jane = Student.objects.create(lastname="Doe", firstname="Jane",lnumber="21743149")
        kelly = Student.objects.create(lastname="Smith", firstname="Kelly", lnumber="33333333")

        kellyenrollment = Enrollment.objects.create(student=kelly, edclass=edclass)#, semester=semester)
        bobenrollment = Enrollment.objects.create(student=bob, edclass=edclass1)#, semester=semester), semester=semester)
        bobenrollment1 = Enrollment.objects.create(student=bob, edclass=edclass2)#, semester=semester), semester=semester)
        janeenrollment = Enrollment.objects.create(student=jane, edclass=edclass1)#, semester=semester), semester=semester)
        janeenrollment2 = Enrollment.objects.create(student=jane, edclass=edclass2)#, semester=semester), semester=semester)
        writingrubric = Rubric.objects.create(name="writingrubric")

        row1 = Row.objects.create(excellenttext="THE BEST!",
                                  proficienttext="THE SECOND BEST!",
                                  satisfactorytext="THE THIRD BEST!",
                                  unsatisfactorytext="YOU'RE LAST",rubric=writingrubric, name="Excellence is a habit")
        row1.standards.add(intasc1)

        row2 = Row.objects.create(excellenttext="THE GREATEST!",
                                  proficienttext="THE 2nd BEST!",
                                  satisfactorytext="THE THIRD BEST!",
                                  unsatisfactorytext="YOU'RE LAST",rubric=writingrubric)
        row2.standards.add(caep1)



        edclasssemester = Assignment.objects.create( edclass=edclass, assignmentname="Writing Assignment", keyrubric=writingrubric)
        edclasssemester1 = Assignment.objects.create( edclass=edclass1, assignmentname="Writing Assignment", keyrubric=writingrubric)
        edclasssemester2 = Assignment.objects.create(edclass=edclass2, assignmentname="Writing Assignment", keyrubric=writingrubric)


    def test_rubric_page_not_viewable_by_dasterdaly_bob(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get('/assessment/201530/EG5111/writingassignment1/33333333/')
        self.assertEquals(response.status_code, 404)

    def test_class_page_requires_login(self):
        response = self.client.get("/assessment/201530/EG500001", follow=True)
        self.assertIn("Username", response.content.decode())

    def test_student_and_rubric_view_returns_correct_template(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        self.assertTemplateUsed(response, 'rubricapp/rubric.html')

    def test_student_and_rubric_view_shows_student_name(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        self.assertContains(response, "DaBuilder, Bob")

    def test_student_and_rubric_view_shows_row_name(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        self.assertContains(response, "Excellence is a habit")

    def test_student_and_rubric_view_has_excellent_grade(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        self.assertContains(response, "Excellent")

    def test_rubric_shows_a_cell_under_excellent(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        self.assertContains(response, "THE BEST!")

    def test_rubric_page_shows_rubric_name(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        self.assertContains(response, "Writing Rubric")

    def test_rubric_page_can_take_post_request(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()

        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data ={"form-0-name": "Excellence is a habit",
               "form-TOTAL_FORMS": "2",
               "form-INITIAL_FORMS": "2",
               "form-MIN_NUM_FORMS": "0",
               "form-MAX_NUM_FORMS": "1000",
               "form-0-name": "Excellence is a habit",
               "form-0-row_choice":"1",
               "form-1-name": "None",
               "form-1-row_choice":"2",
               "form-0-id": "3",
               "form-1-id": "4"}
        response = self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)

        self.assertEqual(response.status_code, 302)

    def test_post_request_creates_new_rubric_for_the_enrollment(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()

        writingrubric = Rubric.objects.get(name="writingrubric")

        row = Row.objects.filter(rubric=writingrubric)
        self.assertEqual(row.count(), 2)
        #Why do you need to get the response before you can post it?????
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data ={"form-0-name": "Excellence is a habit",
               "form-TOTAL_FORMS": "2",
               "form-INITIAL_FORMS": "2",
               "form-MIN_NUM_FORMS": "0",
               "form-MAX_NUM_FORMS": "1000",
               "form-0-name": "Excellence is a habit",
               "form-0-row_choice":"1",
               "form-1-name": "None",
               "form-1-row_choice":"2",
               "form-0-id": "3",
               "form-1-id": "4"}

        response = self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        student = Student.objects.get(lnumber="21743148")
        edclass = EdClasses.objects.get(subject="EG", coursenumber="5000", sectionnumber="01")
        writingassignment = Assignment.objects.get(pk=1)
        bobenroll = Enrollment.objects.get(edclass=edclass, student=student)
        bobrubricobject = RubricData.objects.get(assignment=writingassignment, enrollment=bobenroll)

        self.assertEqual(bobrubricobject.completedrubric.name, "EG50000121743148201530WritingAssignment")

    def test_rubric_page_redirects_correct_page(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()

        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        #soup = BeautifulSoup(response.content)
        #form = soup.find('form')
        #print(form)
        data ={"form-TOTAL_FORMS": "2",
               "form-INITIAL_FORMS": "2",
               "form-MIN_NUM_FORMS": "0",
               "form-MAX_NUM_FORMS": "1000",
               "form-0-name": "Excellence is a habit",
               "form-0-row_choice":"1",
               "form-1-name": "NONE",
               "form-1-row_choice":"2",
               "form-0-id": "3",
               "form-1-id": "4"}
        response = self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)

        self.assertEqual(response['location'], '/assessment/201530/EG500001/writingassignment1/')

    def test_post_request_updates_correct_model(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data ={"form-TOTAL_FORMS": "2",
               "form-INITIAL_FORMS": "2",
               "form-MIN_NUM_FORMS": "0",
               "form-MAX_NUM_FORMS": "1000",
               "form-0-name": "Excellence is a habit",
               "form-0-row_choice":"1",
               "form-1-name": "None",
               "form-1-row_choice":"2",
               "form-0-id": "3",
               "form-1-id": "4"}

        response = self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        student = Student.objects.get(lnumber="21743148")
        edclass = EdClasses.objects.get(subject="EG", coursenumber="5000")

        bobenrollment = Enrollment.objects.get(student=student, edclass=edclass)
        bobrubricenroll = RubricData.objects.get(assignment__pk=1, enrollment=bobenrollment)
        row = Row.objects.get(excellenttext="THE BEST!", rubric__name=bobrubricenroll.completedrubric.name)
        self.assertEqual(row.row_choice, "1")

    def test_post_request_does_not_take_0_value(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data ={"form-TOTAL_FORMS": "2",
               "form-INITIAL_FORMS": "2",
               "form-MIN_NUM_FORMS": "0",
               "form-MAX_NUM_FORMS": "1000",
               "form-0-name": "Excellence is a habit",
               "form-0-row_choice":"0",
               "form-1-name": "None",
               "form-1-row_choice":"2",
               "form-0-id": "3",
               "form-1-id": "4"}

        response = self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        self.assertContains(response, "You must choose a value for all rows!" )

    def test_post_request_shows_row_names_if_empty_row_submitted(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data ={"form-TOTAL_FORMS": "2",
               "form-INITIAL_FORMS": "2",
               "form-MIN_NUM_FORMS": "0",
               "form-MAX_NUM_FORMS": "1000",
               "form-0-name": "Excellence is a habit",
               "form-0-row_choice":"0",
               "form-1-name": "None",
               "form-1-row_choice":"2",
               "form-0-id": "3",
               "form-1-id": "4"}

        response = self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        self.assertContains(response, "You must choose a value for all rows!")
        self.assertContains(response, "Excellence is a habit" )

    def test_post_request_with_0_value_doesnt_return_null_row_values(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data ={"form-TOTAL_FORMS": "2",
               "form-INITIAL_FORMS": "2",
               "form-MIN_NUM_FORMS": "0",
               "form-MAX_NUM_FORMS": "1000",
               "form-0-name": "Excellence is a habit",
               "form-0-row_choice":"0",
               "form-1-name": "None",
               "form-1-row_choice":"2",
               "form-0-id": "3",
               "form-1-id": "4"}


        response = self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        self.assertContains(response, "THE BEST!" )

    def test_post_request_does_not_create_blank_enrollment_if_empty_row(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data ={"form-TOTAL_FORMS": "2",
               "form-INITIAL_FORMS": "2",
               "form-MIN_NUM_FORMS": "0",
               "form-MAX_NUM_FORMS": "1000",
               "form-0-name": "Excellence is a habit",
               "form-0-row_choice":"0",
               "form-1-name": "None",
               "form-1-row_choice":"2",
               "form-0-id": "3",
               "form-1-id": "4"}


        response = self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        student = Student.objects.get(lnumber="21743148")
        edclass = EdClasses.objects.get(subject="EG", coursenumber="5000")

        bobenrollment = Enrollment.objects.filter(student=student, edclass=edclass)
        self.assertEqual(bobenrollment.count(), 1)

    def test_get_request_for_student_rubric_page_returns_rubric_if_completedrubric_false(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        bobenrollment = Enrollment.objects.get(student__lastname="DaBuilder", edclass__subject="EG", edclass__coursenumber="5000")
        Rubric.objects.create(name="EG50000121743148201530")
        #bobenrollment.rubriccompleted = False
        response = self.client.get("/assessment/201530/EG500001/WritingAssignment1/21743148/")
        self.assertContains(response, "id_form-TOTAL_FORMS")

    def test_rubric_for_different_semester_doesnt_shows_up_in_correct_semester(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        newsemester = Semester.objects.create(text="201610")
        bob = User.objects.get(username="******")
        badrubric = Rubric.objects.create()
        badrow = Row.objects.create(excellenttext="STOP",
                                    proficienttext="STOP",
                                    satisfactorytext="STOP",
                                    unsatisfactorytext="STOP",rubric=badrubric)

        edclass = EdClasses.objects.create(subject="EG", sectionnumber="01", coursenumber="5000", crn=7777, teacher=bob, semester=newsemester)#, semester=newsemester)
        edclassnewsemester = Assignment.objects.create(edclass=edclass, assignmentname="Writing Assignment", keyrubric=badrubric)
        #edclassnewsemester.keyrubric.add(badrubric)
        george = Student.objects.create(lastname="Harrison", firstname="Georgeo", lnumber="21743444")
        newgeorgeenrollment = Enrollment.objects.create(student=george, edclass=edclass)#,semester=newsemester)
        response = self.client.get('/assessment/201610/EG500001/WritingAssignment'+ str(edclassnewsemester.pk) +'/21743444/')
        self.assertContains(response, "STOP")

    def test_rubric_for_different_semester_doesnt_show_up_wrong_semester(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        newsemester = Semester.objects.create(text="201610")
        badrubric = Rubric.objects.create()
        badrow = Row.objects.create(excellenttext="STOP",
                                    proficienttext="STOP",
                                    satisfactorytext="STOP",
                                    unsatisfactorytext="STOP",rubric=badrubric)

        edclass = EdClasses.objects.get(subject="EG", coursenumber="5000")#Should be in 201530
        edclassnewsemester = Assignment.objects.create(edclass=edclass, keyrubric=badrubric)
        #edclassnewsemester.keyrubric.add(badrubric)
        george = Student.objects.create(lastname="Harrison", firstname="Georgeo", lnumber="5555")
        newgeorgeenrollment = Enrollment.objects.create(student=george, edclass=edclass)#,semester=newsemester)
        response = self.client.get('/assessment/201530/EG500001/writingassignment1/21743148/')
        self.assertNotContains(response, "STOP")

    def test_rubric_created_also_copies_standards(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data = {"form-TOTAL_FORMS": "2",
                "form-INITIAL_FORMS": "2",
                "form-MIN_NUM_FORMS": "0",
                "form-MAX_NUM_FORMS": "1000",
                "form-0-name": "Excellence is a habit",
                "form-0-row_choice": "1",
                "form-1-name": "None",
                "form-1-row_choice": "2",
                "form-0-id": "3",
                "form-1-id": "4"}

        response = self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        edclass = EdClasses.objects.get(subject="EG", coursenumber="5000")
        bobdabuilder = Student.objects.get(lastname="DaBuilder")
        bobdabuilderenroll = Enrollment.objects.get(student=bobdabuilder, edclass=edclass)
        bobrubricdata = RubricData.objects.get(enrollment=bobdabuilderenroll)
        row1 = Row.objects.get(rubric__name="writingrubric", excellenttext="THE BEST!")
        row = Row.objects.get(excellenttext="THE BEST!", rubric=bobrubricdata.completedrubric)
        self.assertEquals("INTASC 1", row.standards.all()[0].name)

    def test_rubric_created_also_copies_two_standards(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data = {"form-TOTAL_FORMS": "2",
                "form-INITIAL_FORMS": "2",
                "form-MIN_NUM_FORMS": "0",
                "form-MAX_NUM_FORMS": "1000",
                "form-0-name": "Excellence is a habit",
                "form-0-row_choice": "1",
                "form-1-name": "None",
                "form-1-row_choice": "2",
                "form-0-id": "3",
                "form-1-id": "4"}

        response = self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        bobdabuilder = Student.objects.get(lastname="DaBuilder")
        edclass = EdClasses.objects.get(subject="EG", coursenumber="5000")
        bobdabuilderenroll = Enrollment.objects.get(student=bobdabuilder, edclass=edclass)
        bobrubricdata = RubricData.objects.get(enrollment=bobdabuilderenroll)
        row = Row.objects.get(excellenttext="THE BEST!", rubric=bobrubricdata.completedrubric)
        row2 = Row.objects.get(excellenttext="THE GREATEST!", rubric=bobrubricdata.completedrubric)
        self.assertEquals("INTASC 1", row.standards.all()[0].name)
        self.assertEquals("CAEP 1", row2.standards.all()[0].name)

    def test_rubric_copies_multiple_standards(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        rowbeforepost = Row.objects.get(excellenttext="THE BEST!", rubric__name="writingrubric")
        intasc2 = Standard.objects.create(name="Intasc 2")
        rowbeforepost.standards.add(intasc2)
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data = {"form-TOTAL_FORMS": "2",
                "form-INITIAL_FORMS": "2",
                "form-MIN_NUM_FORMS": "0",
                "form-MAX_NUM_FORMS": "1000",
                "form-0-name": "Excellence is a habit",
                "form-0-row_choice": "1",
                "form-1-name": "None",
                "form-1-row_choice": "2",
                "form-0-id": "3",
                "form-1-id": "4"}
        self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        bobdabuilder = Student.objects.get(lastname="DaBuilder")
        edclass = EdClasses.objects.get(subject="EG", coursenumber="5000")
        bobdabuilderenroll = Enrollment.objects.get(student=bobdabuilder, edclass=edclass)
        bobrubricdata = RubricData.objects.get(enrollment=bobdabuilderenroll)
        row = Row.objects.get(excellenttext="THE BEST!", rubric=bobrubricdata.completedrubric)
        self.assertEquals(2, row.standards.count())

    def test_rubric_copies_same_standard_different_rows(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        rowbeforepost = Row.objects.get(proficienttext="THE 2nd BEST!", rubric__name="writingrubric")
        intasc1 = Standard.objects.get(name="INTASC 1")
        rowbeforepost.standards.add(intasc1)
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data = {"form-TOTAL_FORMS": "2",
                "form-INITIAL_FORMS": "2",
                "form-MIN_NUM_FORMS": "0",
                "form-MAX_NUM_FORMS": "1000",
                "form-0-name": "Excellence is a habit",
                "form-0-row_choice": "1",
                "form-1-name": "None",
                "form-1-row_choice": "2",
                "form-0-id": "3",
                "form-1-id": "4"}
        self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        bobdabuilder = Student.objects.get(lastname="DaBuilder")
        edclass = EdClasses.objects.get(subject="EG", coursenumber="5000")
        bobdabuilderenroll = Enrollment.objects.get(student=bobdabuilder, edclass=edclass)
        bobrubricdata = RubricData.objects.get(enrollment=bobdabuilderenroll)
        row2 = Row.objects.get(proficienttext="THE 2nd BEST!", rubric=bobrubricdata.completedrubric)
        row1 = Row.objects.get(excellenttext="THE BEST!", rubric=bobrubricdata.completedrubric)
        self.assertEquals(2, row2.standards.count())
        self.assertEquals("CAEP 1", row2.standards.all()[0].name)
        self.assertEquals("INTASC 1", row2.standards.all()[1].name)
        self.assertEquals("INTASC 1", row1.standards.all()[0].name)

    def test_rubric_copies_template_name(self):
        self.add_two_classes_to_semester_add_two_students_to_class_add_one_row()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/21743148/")
        data = {"form-TOTAL_FORMS": "2",
                "form-INITIAL_FORMS": "2",
                "form-MIN_NUM_FORMS": "0",
                "form-MAX_NUM_FORMS": "1000",
                "form-0-name": "Excellence is a habit",
                "form-0-row_choice": "1",
                "form-1-name": "None",
                "form-1-row_choice": "2",
                "form-0-id": "3",
                "form-1-id": "4"}
        self.client.post("/assessment/201530/EG500001/writingassignment1/21743148/", data)
        bobdabuilder = Student.objects.get(lastname="DaBuilder")
        edclass = EdClasses.objects.get(subject="EG", coursenumber="5000")
        bobdabuilderenroll = Enrollment.objects.get(student=bobdabuilder, edclass=edclass)
        bobrubricdata = RubricData.objects.get(enrollment=bobdabuilderenroll)
        row2 = Row.objects.get(proficienttext="THE 2nd BEST!", rubric=bobrubricdata.completedrubric)
        self.assertEquals("writingrubric", row2.templatename)
Пример #33
0
class AssignmentViewTest(TestCase):

    def add_two_classes_to_semester_add_two_students_to_class(self):
        self.client = Client()
        self.username = '******'
        self.email = '*****@*****.**'
        self.password = '******'
        self.test_user = User.objects.create_superuser(self.username, self.email, self.password)
        login = self.client.login(username=self.username, password = self.password)
        jane = User.objects.create(username="******")


        first_semester = Semester.objects.create(text='201530')
        edClass = EdClasses.objects.create(sectionnumber="01",subject="EG", coursenumber="5000", teacher=self.test_user, crn=2222, semester=first_semester)
        edClass2 = EdClasses.objects.create(sectionnumber="01",subject="EG", coursenumber="6000", teacher=self.test_user, crn=3333, semester=first_semester)
        edClass1 = EdClasses.objects.create(sectionnumber="01",subject="EG", coursenumber="5111", teacher=jane, crn=4444, semester=first_semester)

        #first_semester.classes.add(edClass)
        #first_semester.classes.add(edClass2)
        #first_semester.classes.add(edClass1)
        writingrubric = Rubric.objects.create(name="Writing Rubric")
        unitrubric = Rubric.objects.create(name="Unit Rubric")
        unitassignment = Assignment.objects.create(edclass=edClass, assignmentname="Unit Plan", keyrubric=unitrubric)
        writingassignment = Assignment.objects.create(edclass=edClass, assignmentname="Writing Assignment", keyrubric=writingrubric)
        edclasssemester1 = Assignment.objects.create(edclass=edClass2, keyrubric=unitrubric)
        edclasssemester2 = Assignment.objects.create(edclass=edClass1, keyrubric=unitrubric)

        #unitassignment.keyrubric.add(unitrubric)
        #writingassignment.keyrubric.add(writingrubric)
        #edclasssemester1.keyrubric.add(unitrubric)
       # edclasssemester2.keyrubric.add(unitrubric)

        row1 = Row.objects.create(excellenttext="THE BEST!",
                                  proficienttext="THE SECOND BEST!",
                                  satisfactorytext="THE THIRD BEST!",
                                  unsatisfactorytext="YOU'RE LAST",rubric=writingrubric)

        row2 = Row.objects.create(excellenttext="THE GREATEST!",
                                  proficienttext="THE SECOND BEST!",
                                  satisfactorytext="THE THIRD BEST!",
                                  unsatisfactorytext="YOU'RE LAST",rubric=writingrubric)

        row1 = Row.objects.create(excellenttext="BAD!",
                                  proficienttext="BAD!",
                                  satisfactorytext="BAD!",
                                  unsatisfactorytext="BAD!",rubric=unitrubric)

        row2 = Row.objects.create(excellenttext="BAD!",
                                  proficienttext="BAD!",
                                  satisfactorytext="BAD!",
                                  unsatisfactorytext="BAD!",rubric=unitrubric)


        bob = Student.objects.create(lastname="DaBuilder", firstname="Bob", lnumber="21743148")
        jane = Student.objects.create(lastname="Doe", firstname="Jane", lnumber="21743149")
        kelly = Student.objects.create(lastname="Smith", firstname="Kelly", lnumber="33333333")

        bobenrollment = Enrollment.objects.create(student=bob, edclass=edClass)#, semester=first_semester)
        janeenrollment = Enrollment.objects.create(student=jane,edclass=edClass)#, semester=first_semester), semester=first_semester)
        bobenrollment2 = Enrollment.objects.create(student=bob,edclass=edClass2)#, semester=first_semester), semester=first_semester)
        janeenrollment2 = Enrollment.objects.create(student=jane,edclass=edClass2)#, semester=first_semester)
        kellyenrollment = Enrollment.objects.create(student=kelly, edclass=edClass1)#, semester=first_semester)



    def test_assignment_page_resolves_to_assingment_function(self):
        self.add_two_classes_to_semester_add_two_students_to_class()
        found = resolve('/assessment/201530/EG500001/writingassignment1/')
        self.assertEqual(found.func, student_page)

    def test_student_can_have_more_than_one_assignment_in_course(self):
        self.add_two_classes_to_semester_add_two_students_to_class()
        edclass = EdClasses.objects.get(crn=2222)
        writingassignment = Assignment.objects.get(assignmentname="Writing Assignment")
        unitassignment = Assignment.objects.get(assignmentname="Unit Plan")
        data ={"form-TOTAL_FORMS": "2",
               "form-INITIAL_FORMS": "2",
               "form-MIN_NUM_FORMS": "0",
               "form-MAX_NUM_FORMS": "1000",
               "form-0-name": "Excellence is a habit",
               "form-0-row_choice":"2",
               "form-1-name": "None",
               "form-1-row_choice":"2",
               "form-0-id": "3",
               "form-1-id": "4"}

        response = self.client.post("/assessment/201530/EG500001/writingassignment{}/21743148/".format(writingassignment.pk), data)
        found = self.client.get('/assessment/201530/EG500001/unitplan{}/21743148/'.format(unitassignment.pk))
        self.assertContains(found, "BAD!")

    def test_two_assignments_same_class_same_rubric(self):
        self.add_two_classes_to_semester_add_two_students_to_class()
        edclass = EdClasses.objects.get(crn=2222)
        writingrubric = Rubric.objects.get(name="Writing Rubric")
        happypaper = Assignment.objects.create(assignmentname="Happy Paper", edclass=edclass, keyrubric=writingrubric)
        #happypaper.keyrubric.add(writingrubric)

        bobenrollment = Enrollment.objects.get(edclass=edclass, student__lastname="DaBuilder")

        writingassignment = Assignment.objects.get(assignmentname="Writing Assignment")

        data ={"form-TOTAL_FORMS": "2",
               "form-INITIAL_FORMS": "2",
               "form-MIN_NUM_FORMS": "0",
               "form-MAX_NUM_FORMS": "1000",
               "form-0-name": "Excellence is a habit",
               "form-0-row_choice":"2",
               "form-1-name": "None",
               "form-1-row_choice":"2",
               "form-0-id": "3",
               "form-1-id": "4"}

        self.client.get("/assessment/201530/EG500001/happypaper{}/21743148/".format(happypaper.pk))
        self.client.get("/assessment/201530/EG500001/writingassignment{}/21743148/".format(writingassignment.pk))
        allrubricobjs = RubricData.objects.filter(assignment=writingassignment, enrollment=bobenrollment)
        self.assertEqual(allrubricobjs.count(),1)
Пример #34
0
class ClassViewTest(TestCase):

    def add_two_classes_to_semester_add_two_students_to_class(self):
        self.client = Client()
        self.username = '******'
        self.email = '*****@*****.**'
        self.password = '******'
        self.test_user = User.objects.create_superuser(self.username, self.email, self.password)
        login = self.client.login(username=self.username, password = self.password)
        jane = User.objects.create(username="******")


        first_semester = Semester.objects.create(text='201530')
        edClass = EdClasses.objects.create(sectionnumber="01",subject="EG", coursenumber="5000", teacher=self.test_user, crn=2222, semester=first_semester)
        edClass2 = EdClasses.objects.create(sectionnumber="01",subject="EG", coursenumber="6000", teacher=self.test_user, crn=3333, semester=first_semester)
        edClass1 = EdClasses.objects.create(sectionnumber="01",subject="EG", coursenumber="5111", teacher=jane, crn=4444, semester=first_semester)

        #first_semester.classes.add(edClass)
        #first_semester.classes.add(edClass2)
        #first_semester.classes.add(edClass1)
        rubric = Rubric.objects.create(name="bob")
        edclasssemester = Assignment.objects.create(edclass=edClass, assignmentname="Writing Assignment",keyrubric=rubric)
        edclasssemester1 = Assignment.objects.create(edclass=edClass2, keyrubric=rubric)
        edclasssemester2 = Assignment.objects.create(edclass=edClass1, keyrubric=rubric)

        #edclasssemester.keyrubric.add(rubric)
        #edclasssemester1.keyrubric.add(rubric)
        #edclasssemester2.keyrubric.add(rubric)

        bob = Student.objects.create(lastname="DaBuilder", firstname="Bob", lnumber="21743148")
        jane = Student.objects.create(lastname="Doe", firstname="Jane", lnumber="21743149")
        kelly = Student.objects.create(lastname="Smith", firstname="Kelly", lnumber="33333333")

        bobenrollment = Enrollment.objects.create(student=bob, edclass=edClass)#, semester=first_semester)
        janeenrollment = Enrollment.objects.create(student=jane,edclass=edClass)#, semester=first_semester), semester=first_semester)
        bobenrollment2 = Enrollment.objects.create(student=bob,edclass=edClass2)#, semester=first_semester), semester=first_semester)
        janeenrollment2 = Enrollment.objects.create(student=jane,edclass=edClass2)#, semester=first_semester), semester=first_semester)
        kellyenrollment = Enrollment.objects.create(student=kelly, edclass=edClass1)#, semester=first_semester), semester=first_semester)


    def test_user_logs_in(self):
        self.client = Client()
        self.username = '******'
        self.email = '*****@*****.**'
        self.password = '******'
        self.test_user = User.objects.create_user(self.username, self.email, self.password)
        login = self.client.login(username=self.username, password = self.password)
        self.assertEqual(login, True)

    def test_bob_cannot_see_jane_students(self):
        self.add_two_classes_to_semester_add_two_students_to_class()
        response = self.client.get('/assessment/201530/EG5111/writingassignment1/')
        self.assertNotIn("Smith", response.content.decode())

    def test_jane_class_results_in_404(self):
        #bob is logged in right now.  shouldnt see jane class
        self.add_two_classes_to_semester_add_two_students_to_class()
        response = self.client.get('/assessment/201530/EG5111/writingassignment/1')
        self.assertEqual(response.status_code, 404)

    def test_semester_page_requires_login(self):
        #follow=True follows the redirect to the login page
        response = self.client.get("/assessment/201530/", follow=True)
        self.assertIn("Username", response.content.decode())

    def test_student_page_returns_correct_template(self):
        self.add_two_classes_to_semester_add_two_students_to_class()
        response = self.client.get("/assessment/201530/EG500001/writingassignment1/")
        self.assertTemplateUsed(response, 'rubricapp/student.html')

    def test_semester_page_redirects_to_class_url(self):
        self.add_two_classes_to_semester_add_two_students_to_class()
        request = HttpRequest()
        Bob = User.objects.get(username='******')
        request.user = Bob
        request.method = "POST"
        edClass = EdClasses.objects.get(subject="EG", coursenumber="5000", sectionnumber="01")
        request.POST['edClass'] = edClass.subject + edClass.coursenumber + edClass.sectionnumber

        response = semester_page(request, "201530")

        self.assertEqual(response['location'], 'EG500001/')

    def test_semester_page_can_show_without_redirecting(self):
        #TODO setup semester/class/ url
        self.add_two_classes_to_semester_add_two_students_to_class()
        assignmentname = Assignment.objects.get(assignmentname="Writing Assignment")
        response = self.client.get("/assessment/201530/EG500001/writingassignment{}/".format(assignmentname.pk))
        self.assertContains(response, 'Bob DaBuilder')

    def test_class_page_can_take_post_request(self):
        self.add_two_classes_to_semester_add_two_students_to_class()
        request = HttpRequest()
        request.method = "POST"
        Bob = User.objects.get(username='******')
        request.user = Bob
        bob = Student.objects.get(lnumber="21743148")
        request.POST['studentnames'] = bob.lnumber
        assignment= Assignment.objects.get(assignmentname="Writing Assignment")

        response = student_page(request, "EG500001", "201530", "Writing Assignment{}".format(assignment.pk))

        self.assertEqual(response.status_code, 302)

    def test_class_page_redirects_to_student_url(self):
        self.add_two_classes_to_semester_add_two_students_to_class()
        request = HttpRequest()
        request.method = 'POST'
        Bob = User.objects.get(username='******')
        request.user = Bob
        student = Student.objects.get(lnumber="21743148")
        request.POST['studentnames'] = student.lnumber
        assignment = Assignment.objects.get(assignmentname="Writing Assignment")

        response = student_page(request, "EG500001", "201530", "Writing Assignment{}".format(assignment.pk))

        self.assertEqual(response.status_code, 302)

        self.assertEqual(response['location'], '21743148/')

    def test_class_page_shows_url_if_no_students(self):
        self.add_two_classes_to_semester_add_two_students_to_class()
        bobenrollment = Enrollment.objects.get(student__lastname="DaBuilder", edclass__subject="EG", edclass__coursenumber="5000")
        edclass= EdClasses.objects.get(crn=2222)
        assignment = Assignment.objects.get(assignmentname="Writing Assignment", edclass=edclass)
        bobrubric = RubricData.objects.get_or_create(assignment=assignment, enrollment=bobenrollment)
        bobrubric[0].rubriccompleted = True
        bobrubric[0].save()

        janeenrollment = Enrollment.objects.get(student__lastname="Doe", edclass__subject="EG", edclass__coursenumber="5000")
        janerubric = RubricData.objects.get_or_create(assignment=assignment, enrollment=janeenrollment)
        janerubric[0].rubriccompleted = True
        janerubric[0].save()

        response = self.client.get("/assessment/201530/EG500001/writingassignment1/")
        self.assertIn("Return to the semester page", response.content.decode())

    def test_class_page_does_not_show_students_from_other_semesters(self):
        self.add_two_classes_to_semester_add_two_students_to_class()
        booritter = Student.objects.create(lastname="Ritter", firstname="Elaine", lnumber="21743142")
        newsemester = Semester.objects.create(text="201610")
        bob = User.objects.create(username="******")
        edclass = EdClasses.objects.create(crn=7777, subject="EG", coursenumber="5001", semester=newsemester, teacher=bob)
        #newsemester.classes.add(edclass)
        #edclassenrollment = Assignment.objects.create(edclass=edclass)
        booenrollment = Enrollment.objects.create(student=booritter, edclass=edclass)#, semester=newsemester)
        response = self.client.get('/assessment/201530/EG500001/writingassignment1/')
        self.assertNotContains(response, "Elaine")
Пример #35
0
class BasicTest(TestCase):
    fixtures = ['initial_data.json']
    password = '******'
    username = '******'

    def setUp(self):
        self.client = Client()
        self.user = User.objects.create_user(self.username, '*****@*****.**', \
                                             self.password)

    def login(self):
        login = self.client.login(username=self.username, \
                                  password=self.password)
        self.failUnless(login, 'Could not log in')

    def test_index(self):
        response = self.client.get(reverse('home'))

        p = Person.objects.get(pk=1)
        self.failUnlessEqual(response.status_code, 200)
        self.assertContains(response, p.name)
        self.assertContains(response, p.surname)
        self.assertContains(response, p.date)
        self.assertContains(response, p.bio)
        self.assertContains(response, p.skype)
        self.assertContains(response, p.email)
        self.assertContains(response, p.jabber)
        self.assertContains(response, p.photo.url)
        self.assertContains(response, p.contacts)

    def test_middleware(self):
        count = Location.objects.count()
        response = self.client.get(reverse('home'))
        self.failUnlessEqual(response.status_code, 200)
        self.failUnlessEqual(count + 1, Location.objects.count())

    def test_requests(self):
        response = self.client.get(reverse('first-requests'))
        self.failUnlessEqual(response.status_code, 200)
        for i in Location.objects.filter(priority=0)[:10]:
            self.assertContains(response, i)

        response = self.client.get(reverse('first-requests') + '?priority=1')
        self.failUnlessEqual(response.status_code, 200)
        for i in Location.objects.filter(priority=1)[:10]:
            self.assertContains(response, i)

        response = self.client.get(reverse('first-requests') + '?priority=0')
        self.failUnlessEqual(response.status_code, 200)
        for i in Location.objects.filter(priority=0)[:10]:
            self.assertContains(response, i)

    def test_context_proccessor(self):
        response = self.client.get(reverse('home'))
        self.failUnlessEqual(response.status_code, 200)
        self.assertContains(response, settings.LANGUAGE_CODE)

    def test_edit(self):
        # redirect to login-page
        response = self.client.get(reverse('edit-profile'))
        self.failUnlessEqual(response.status_code, 302)

        self.login()
        response = self.client.get(reverse('edit-profile'))
        self.failUnlessEqual(response.status_code, 200)

    def test_save(self):
        data = {
            'name': 'test_name',
            'surname': 'test_surname',
            'bio': 'test_bio',
            'skype': 'test_skype',
            'email': '*****@*****.**',
            'jabber': 'test_jabber',
            'contacts': 'test_contacts',
            'date': '2010-10-10',
        }

        response = self.client.post(reverse('save-profile'), data)
        #redirect to login page
        self.failUnlessEqual(response.status_code, 302)

        self.login()
        response = self.client.get(reverse('save-profile'), data)
        # doeant supprt GET method
        self.failUnlessEqual(response.status_code, 405)

        response = self.client.post(reverse('save-profile'), data)
        self.failUnlessEqual(response.status_code, 200)
        self.failUnlessEqual(response.content, '{"result": 1}')
        p = Person.objects.get(pk=1)
        self.failUnlessEqual(data['name'], p.name)
        self.failUnlessEqual(data['surname'], p.surname)
        self.failUnlessEqual(data['bio'], p.bio)
        self.failUnlessEqual(data['skype'], p.skype)
        self.failUnlessEqual(data['email'], p.email)
        self.failUnlessEqual(data['jabber'], p.jabber)
        self.failUnlessEqual(data['date'], str(p.date))
        self.failUnlessEqual(data['contacts'], p.contacts)

    def test_tag_edit_link(self):
        response = Template(
            "{% load basic_urls %}{% edit_link user %}").render(
                Context({"user": self.user}))
        c = self.user.__class__
        self.failUnlessEqual(response, reverse('admin:%s_%s_change' %  \
            (c._meta.app_label, c._meta.module_name), args=[self.user.pk]))

    def test_print_models(self):
        sys.stdout = open('dump_mycommand.txt', 'w')
        call_command('print_models')
        sys.stdout.close()
        sys.stdout = sys.__stdout__

        f = file('dump_mycommand.txt', "r")
        result = "Project models:\n%s" % \
            "\n".join(["%s - %s" % (m._meta.object_name, m.objects.count())
                         for m in get_models()])
        self.failUnlessEqual(f.read().strip('\n'), result.strip('\n'))
        f.close()
        os.remove('dump_mycommand.txt')

    def test_bash_script(self):
        os.system('./print_models')
        file = './%s.dat' % date.today().strftime("%Y-%m-%d")
        self.failUnlessEqual(
            os.path.exists('./%s.dat' % date.today().strftime("%Y-%m-%d")),
            True)
        os.remove(file)

    def test_signals(self):
        count = Log.objects.count()

        l = Location(name='/')
        l.save()
        log_count = Log.objects.count()
        self.failUnlessEqual(Log.objects.all()[log_count - 1].action, 'create')
        self.failUnlessEqual(count + 1, log_count)

        l.name = ""
        l.save()
        log_count = Log.objects.count()
        self.failUnlessEqual(Log.objects.all()[log_count - 1].action, 'update')
        self.failUnlessEqual(count + 2, log_count)

        l.delete()
        log_count = Log.objects.count()
        self.failUnlessEqual(count + 3, log_count)
        self.failUnlessEqual(Log.objects.all()[log_count - 1].action, 'delete')
Пример #36
0
def static_analysis_test():
    """Test Static Analyzer"""
    print("\n[INFO] Running Static Analyzer Unit test")
    failed = False
    err_msg = '%s'
    if platform.system() != "Windows":
        err_msg = '\033[91m \033[1m %s \033[0m'
    try:
        uploaded = []
        print("[INFO] Running Upload Test")
        http_client = Client()
        apk_dir = os.path.join(settings.BASE_DIR, "StaticAnalyzer/test_files/")
        for filename in os.listdir(apk_dir):
            fpath = os.path.join(apk_dir, filename)
            with open(fpath, 'rb') as filp:
                response = http_client.post('/upload/', {'file': filp})
                obj = json.loads(response.content.decode("utf-8"))
                if response.status_code == 200 and obj["status"] == "success":
                    print("[OK] Upload OK: " + filename)
                    uploaded.append(obj["url"])
                else:
                    print(err_msg % "[ERROR] Performing Upload: " + filename)
                    failed = True
        print("[OK] Completed Upload test")
        print("[INFO] Running Static Analysis Test")
        for upl in uploaded:
            if RESCAN:
                upl = "/" + upl + "&rescan=1"
            else:
                upl = "/" + upl
            resp = http_client.get(upl, follow=True)
            if resp.status_code == 200:
                print("[OK] Static Analysis Complete: " + upl)
            else:
                print(err_msg % "[ERROR] Performing Static Analysis: " + upl)
                failed = True
        print("[OK] Static Analysis test completed")
        print("[INFO] Running PDF Generation Test")
        if platform.system() in ['Darwin', 'Linux']:
            pdfs = [
                "/PDF/?md5=3a552566097a8de588b8184b059b0158&type=APK",
                "/PDF/?md5=6c23c2970551be15f32bbab0b5db0c71&type=IPA",
                "/PDF/?md5=52c50ae824e329ba8b5b7a0f523efffe&type=ANDZIP",
                "/PDF/?md5=57bb5be0ea44a755ada4a93885c3825e&type=IOSZIP",
                "/PDF/?md5=8179b557433835827a70510584f3143e&type=APPX",
            ]
        else:
            pdfs = [
                "/PDF/?md5=3a552566097a8de588b8184b059b0158&type=APK",
                "/PDF/?md5=52c50ae824e329ba8b5b7a0f523efffe&type=ANDZIP",
                "/PDF/?md5=57bb5be0ea44a755ada4a93885c3825e&type=IOSZIP",
                "/PDF/?md5=8179b557433835827a70510584f3143e&type=APPX",
            ]

        for pdf in pdfs:
            resp = http_client.get(pdf)
            if (resp.status_code == 200
                    and resp._headers['content-type'][1] == "application/pdf"):
                print("[OK] PDF Report Generated: " + pdf)
            else:
                print(err_msg % "[ERROR] Generating PDF: " + pdf)
                print(resp.content)
                failed = True
        print("[OK] PDF Generation test completed")

        # Compare apps test
        print("[INFO] testing app compare")
        first_app = '3a552566097a8de588b8184b059b0158'
        second_app = 'f79e40c4c8622c6ebd44679ffbd2f475'
        url = '/compare/{}/{}/'.format(first_app, second_app)
        resp = http_client.get(url, follow=True)
        assert (resp.status_code == 200)
        if resp.status_code == 200:
            print("[OK] App compare passed Successfully")
        else:
            print(err_msg % "[ERROR] App compare ")
            print(resp.content)
            failed = True

        print("[INFO] Running Delete Scan Results test")
        # Deleting Scan Results
        if platform.system() in ['Darwin', 'Linux']:
            scan_md5s = [
                "3a552566097a8de588b8184b059b0158",
                "6c23c2970551be15f32bbab0b5db0c71",
                "52c50ae824e329ba8b5b7a0f523efffe",
                "57bb5be0ea44a755ada4a93885c3825e",
                "8179b557433835827a70510584f3143e",
                "f79e40c4c8622c6ebd44679ffbd2f475"
            ]
        else:
            scan_md5s = [
                "3a552566097a8de588b8184b059b0158",
                "52c50ae824e329ba8b5b7a0f523efffe",
                "57bb5be0ea44a755ada4a93885c3825e",
                "8179b557433835827a70510584f3143e"
            ]
        for md5 in scan_md5s:
            resp = http_client.post('/delete_scan/', {'md5': md5})
            if resp.status_code == 200:
                dat = json.loads(resp.content.decode("utf-8"))
                if dat["deleted"] == "yes":
                    print("[OK] Deleted Scan: " + md5)
                else:
                    print(err_msg % "[ERROR] Deleting Scan: " + md5)
                    failed = True
            else:
                print(err_msg % "[ERROR] Deleting Scan: " + md5)
                failed = True
        print("[INFO] Delete Scan Results test completed")
    except:
        PrintException("[ERROR] Completing Static Analyzer Test")
    return failed
Пример #37
0
class ReviewTestApi(TestCase):
    def setUp(self):

        self.superuser = User.objects.create_user(username='******',
                                                  email='',
                                                  is_superuser=True,
                                                  password=TEST_PASSWORD)
        self.buyer = User.objects.create_user(username='******',
                                              email='',
                                              is_active=True,
                                              password=TEST_PASSWORD)

        self.superclient = APIClient(username='******')
        self.superclient.login(username='******', password=TEST_PASSWORD)
        self.buyerclient = Client()

        self.review_super = Review.objects.create(user=self.superuser,
                                                  text='some text')
        self.review_buyer = Review.objects.create(user=self.buyer,
                                                  text='some text')

    def generate_image(self):
        image = Image.new('RGB', (100, 100))

        tmp_file = tempfile.NamedTemporaryFile(suffix='.png')
        image.save(tmp_file)
        tmp_file.seek(0)
        return tmp_file

    def test_get_review_list_superuser_with_permission(self):
        response = self.superclient.get('/comments/reviews/')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            response.json(), {
                'count':
                2,
                'next':
                None,
                'previous':
                None,
                'results': [{
                    'user': {
                        'username': self.superuser.username
                    },
                    'product': None,
                    'text': 'some text',
                    'created': response.data['results'][0]['created'],
                    'child': [],
                    'reply_to': None
                }, {
                    'user': {
                        'username': self.buyer.username
                    },
                    'product': None,
                    'text': 'some text',
                    'created': response.data['results'][1]['created'],
                    'child': [],
                    'reply_to': None
                }]
            })

    def test_get_review_list_buyer_with_permission(self):
        response = self.buyerclient.get('/comments/reviews/')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            response.json(), {
                'count':
                2,
                'next':
                None,
                'previous':
                None,
                'results': [{
                    'user': {
                        'username': self.buyer.username
                    },
                    'product': None,
                    'text': 'some text',
                    'created': response.data['results'][0]['created'],
                    'child': [],
                    'reply_to': None
                }, {
                    'user': {
                        'username': self.superuser.username
                    },
                    'product': None,
                    'text': 'some text',
                    'created': response.data['results'][1]['created'],
                    'child': [],
                    'reply_to': None
                }]
            })

    def test_get_detail_review_buyer_with_permission(self):
        self.buyerclient.login()
        response = self.buyerclient.get(
            f'/comments/reviews/{self.review_buyer.id}/')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            response.json(), {
                'user': {
                    'username': self.buyer.username
                },
                'product': None,
                'text': 'some text',
                'created': response.data['created'],
                'child': [],
                'reply_to': None
            })

    def test_get_detail_review_buyer_without_permission(self):
        response = self.buyerclient.get(
            f'/comments/reviews/{self.review_buyer.id}/')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            response.json(), {
                'user': {
                    'username': self.buyer.username
                },
                'product': None,
                'text': 'some text',
                'created': response.data['created'],
                'child': [],
                'reply_to': None
            })

    def test_post_review_list_superuser_with_permission(self):
        response = self.superclient.post('/comments/reviews/', {
            'product': '',
            'text': 'lalala',
            'child': []
        })
        self.assertEqual(response.status_code, 201)
        self.assertEqual(
            response.json(), {
                'child': [],
                'created': response.data['created'],
                'product': None,
                'reply_to': None,
                'text': 'lalala',
                'user': {
                    'username': '******'
                }
            })

    def test_post_review_list_buyer_with_permission(self):
        self.buyerclient.login(username='******', password=TEST_PASSWORD)
        response = self.buyerclient.post('/comments/reviews/', {
            'product': '',
            'text': 'dadadad',
            'child': []
        })
        self.assertEqual(response.status_code, 201)
        self.assertEqual(
            response.json(), {
                'child': [],
                'created': response.data['created'],
                'product': None,
                'reply_to': None,
                'text': 'dadadad',
                'user': {
                    'username': '******'
                }
            })

    def test_post_review_list_buyer_without_permission(self):
        response = self.buyerclient.post('/comments/reviews/', {
            'product': '',
            'text': 'dadadad',
            'child': []
        })
        self.assertEqual(response.status_code, 403)
        self.assertEqual(
            response.json(),
            {'detail': 'Authentication credentials were not provided.'})

    def test_post_image_buyer_with_permission(self):
        self.buyerclient.login(username='******', password=TEST_PASSWORD)

        response = self.buyerclient.post('/comments/reviews-image/', {
            'raw_photo': self.generate_image(),
            'review': self.review_buyer.id
        },
                                         format='multipart')

        self.assertEqual(response.status_code, 201)
Пример #38
0
 def test_get_apply_club_list_not_logged_in(self):
     client = Client(enforce_csrf_checks=False)
     response = client.get('/api/user/1/club/apply/')
     self.assertEqual(response.status_code, 401)
Пример #39
0
class InstitutionViewTest(unittest.TestCase):
    '''
    Tests for Institution
    '''
    def setUp(self):
        self.client = Client()

    def test_list_institution(self):
        url = reverse('institution_list')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_create_institution(self):
        url = reverse('institution_create')
        data = {
            "InstitutionName":
            "InstitutionName",
            "InstitutionEmail":
            "InstitutionEmail",
            "InstitutionPhone":
            "InstitutionPhone",
            "InstitutionWebsite":
            "InstitutionWebsite",
            "InstitutionAddressStreet":
            "InstitutionAddressStreet",
            "InstitutionNote":
            "InstitutionNote",
            "InstitutionAddressVDCMunicipality":
            create_addressvdcmunicipality().pk,
        }
        response = self.client.post(url, data=data)
        self.assertEqual(response.status_code, 302)

    def test_detail_institution(self):
        institution = create_institution()
        url = reverse('institution_detail', args=[
            institution.pk,
        ])
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_update_institution(self):
        institution = create_institution()
        data = {
            "InstitutionName":
            "InstitutionName",
            "InstitutionEmail":
            "InstitutionEmail",
            "InstitutionPhone":
            "InstitutionPhone",
            "InstitutionWebsite":
            "InstitutionWebsite",
            "InstitutionAddressStreet":
            "InstitutionAddressStreet",
            "InstitutionNote":
            "InstitutionNote",
            "InstitutionAddressVDCMunicipality":
            create_addressvdcmunicipality().pk,
        }
        url = reverse('institution_update', args=[
            institution.pk,
        ])
        response = self.client.post(url, data)
        self.assertEqual(response.status_code, 302)
Пример #40
0
 def test_get_club_by_id_not_found(self):
     client = Client(enforce_csrf_checks=False)
     response = client.get('/api/club/10/')
     self.assertEqual(response.status_code, 404)
Пример #41
0
class TarDownloadTestCase(TestCase):
    def setUp(self):
        # create user
        self.testuser = User(username='******')
        self.testuser.save()

        # create test experiment
        self.exp = Experiment(title='tar download test' * 15,
                              created_by=self.testuser,
                              public_access=Experiment.PUBLIC_ACCESS_FULL)
        self.exp.save()

        # create test dataset
        self.ds = self.exp.datasets.create(
            description="testing tar download dataset")

        datafile_content = "\n".join(['some data %d' % i for i in range(1000)])
        filesize = len(datafile_content)
        md5sum = hashlib.md5(datafile_content).hexdigest()
        # create test datafiles and datafile objects
        self.dfs = []
        for i in range(20):
            df = self.ds.datafile_set.create(
                filename='testfile%d.txt' % i,
                mimetype='text/plain',
                size=filesize,
                md5sum=md5sum,
                directory='/'.join(['testdir%d' % i for i in range(i, i + 4)]))
            df.file_object = StringIO(datafile_content)
            df.refresh_from_db()
            self.dfs.append(df)

        # mock client
        self.client = Client()

    def tearDown(self):
        # delete created objects and files

        [ds.delete() for ds in self.exp.datasets.all()]
        self.exp.delete()

    def test_tar_experiment_download(self):
        self.assertTrue(all(df.verified for df in self.dfs))
        response = self.client.get(
            reverse(
                'tardis.tardis_portal.download.streaming_download_experiment',
                args=(self.exp.id, 'tar')))
        with NamedTemporaryFile('w') as tarfile:
            for c in response.streaming_content:
                tarfile.write(c)
            tarfile.flush()
            self.assertEqual(int(response['Content-Length']),
                             os.stat(tarfile.name).st_size)
            tf = TarFile(tarfile.name)
            for df in self.dfs:
                full_path = os.path.join(self.exp.title.replace(' ', '_'),
                                         quote(self.ds.description, safe=''),
                                         df.directory, df.filename)
                # docker has a file path limit of ~240 characters
                if os.environ.get('DOCKER_BUILD', 'false') != 'true':
                    tf.extract(full_path, '/tmp')
                    self.assertEqual(
                        os.stat(os.path.join('/tmp', full_path)).st_size,
                        int(df.size))
Пример #42
0
class MemberViewTest(unittest.TestCase):
    '''
    Tests for Member
    '''
    def setUp(self):
        self.client = Client()

    def test_list_member(self):
        url = reverse('member_list')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_create_member(self):
        url = reverse('member_create')
        data = {
            "MemberRegistrationID": "MemberRegistrationID",
            "MemberName": "MemberName",
            "MemberGender": "MemberGender",
            "MemberBirthDate": "MemberBirthDate",
            "MemberFatherName": "MemberFatherName",
            "MemberPhone": "MemberPhone",
            "MemberVerified": "MemberVerified",
            "MemberRegisterDateTime": "MemberRegisterDateTime",
            "MemberRegisterAgent": "MemberRegisterAgent",
            "MemberNote": "MemberNote",
            "MemberStreetTemporaryAddress": "MemberStreetTemporaryAddress",
            "MemberStreetPermanentAddress": "MemberStreetPermanentAddress",
            "MemberPermanentAddress": create_addressvdcmunicipality().pk,
            "MemberTemporaryAddress": create_addressvdcmunicipality().pk,
            "MemberInstitution": create_institution().pk,
        }
        response = self.client.post(url, data=data)
        self.assertEqual(response.status_code, 302)

    def test_detail_member(self):
        member = create_member()
        url = reverse('member_detail', args=[
            member.pk,
        ])
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_update_member(self):
        member = create_member()
        data = {
            "MemberRegistrationID": "MemberRegistrationID",
            "MemberName": "MemberName",
            "MemberGender": "MemberGender",
            "MemberBirthDate": "MemberBirthDate",
            "MemberFatherName": "MemberFatherName",
            "MemberPhone": "MemberPhone",
            "MemberVerified": "MemberVerified",
            "MemberRegisterDateTime": "MemberRegisterDateTime",
            "MemberRegisterAgent": "MemberRegisterAgent",
            "MemberNote": "MemberNote",
            "MemberStreetTemporaryAddress": "MemberStreetTemporaryAddress",
            "MemberStreetPermanentAddress": "MemberStreetPermanentAddress",
            "MemberPermanentAddress": create_addressvdcmunicipality().pk,
            "MemberTemporaryAddress": create_addressvdcmunicipality().pk,
            "MemberInstitution": create_institution().pk,
        }
        url = reverse('member_update', args=[
            member.pk,
        ])
        response = self.client.post(url, data)
        self.assertEqual(response.status_code, 302)
Пример #43
0
class ModuleTestCase(TestCase):
    def setUp(self):
        User.objects.create_user("Linda01", "*****@*****.**",
                                 "Linda01123456")
        Project.objects.create(name="项目Test1", description="描述Test1")
        project = Project.objects.get(name="项目Test1")
        Module.objects.create(project=project,
                              name="模块Test1",
                              description="这里是模块Test1的描述")
        self.client = Client()
        self.client.post("/login_action/", {
            "username": "******",
            "password": "******"
        })

    # 测试模块列表
    def test_module_manage(self):
        response = self.client.get("/manage/module_manage/")
        response_content_html = response.content.decode("utf-8")
        self.assertEquals(response.status_code, 200)
        self.assertIn("模块Test1", response_content_html)

    # 测试模块查询
    def test_search_module(self):
        # 查询关键字不为空
        response = self.client.get("/manage/search_module/",
                                   {"keyword": "Test1"})
        self.assertEquals(response.status_code, 200)
        self.assertIn("模块Test1", response.content.decode("utf-8"))
        # 查询关键字为空
        response = self.client.get("/manage/search_module/", {"keyword": ""})
        self.assertRedirects(response, "/manage/module_manage/")

    # 测试新增模块
    def test_add_project(self):
        # 测试get请求
        response = self.client.get("/manage/add_module/")
        self.assertEquals(response.status_code, 200)
        self.assertIn("新增模块", response.content.decode("utf-8"))
        # 测试post请求(有效参数)
        response = self.client.post("/manage/add_module/", {
            "name": "模块Test2",
            "description": "模块Test2的描述",
            "project": 1
        })
        self.assertEquals(response.status_code, 302)
        self.assertEquals(len(Module.objects.filter(name__contains="模块Test2")),
                          1)
        # 测试post请求(无效参数)
        self.client.post("/manage/add_module/", {
            "name": "",
            "description": "",
            "project": 1
        })
        self.assertEquals(len(Module.objects.all()), 2)

    # 测试删除模块
    def test_delete_module(self):
        response = self.client.get("/manage/delete_module/1/")
        self.assertEquals(response.status_code, 302)
        self.assertEquals(len(Module.objects.filter(name__contains="模块Test1")),
                          0)

    # 测试编辑模块
    def test_edit_project(self):
        # 测试get请求
        response = self.client.get("/manage/edit_module/1/")
        self.assertEquals(response.status_code, 200)
        self.assertIn("模块Test1", response.content.decode("utf-8"))
        # 测试post请求
        response = self.client.post("/manage/edit_module/1/", {
            "name": "模块Test2(修改后)",
            "description": "模块Test2的描述(修改后)",
            "project": 1
        })
        self.assertEquals(response.status_code, 302)
        module = Module.objects.get(name="模块Test2(修改后)")
        self.assertEquals(module.description, "模块Test2的描述(修改后)")
Пример #44
0
class AddressViewSetTest(TestCase):
    def setUp(self):        
        self.client = Client()       

    def test_create_address(self):
        seller1 = mommy.make('sellgood.Seller')
        data = {
            'street': 'Main Street',
            'neighborhood': 'Northern Brooklyn',
            'city': 'New York',
            'state': 'New York',
            'number': '5214',
            'complement': 'Apartment 204',
            'zipcode': '10001',
            'seller': 1
            }
    
        response = self.client.post(reverse(
            'sellgood:address-list'), data=json.dumps(data),
            content_type='application/json')
        
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.json()['state'], 'New York')
        self.assertEqual(response.json()['seller'], 1)

    def test_empty_address(self):
        response = self.client.get(reverse('sellgood:address-list'))

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 0)
    
    def test_method_not_allowed_list(self):
        put_response = self.client.put(reverse('sellgood:address-list'))
        delete_response = self.client.delete(reverse('sellgood:address-list'))

        self.assertEqual(put_response.status_code,
                         status.HTTP_405_METHOD_NOT_ALLOWED)
        self.assertEqual(delete_response.status_code,
                         status.HTTP_405_METHOD_NOT_ALLOWED)

    def test_number_address_recorded(self):
        address1 = mommy.make('sellgood.Address',
                              seller=mommy.make('sellgood.Seller'))
        address2 = mommy.make('sellgood.Address', 
                              seller=mommy.make('sellgood.Seller'))
        response = self.client.get(reverse('sellgood:address-list'))

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 2)

    def test_detail_address(self):
        address1 = mommy.make(
            'sellgood.Address', city='Arkham', street='Main Street',
             seller=mommy.make('sellgood.Seller'))
        response = self.client.get(reverse('sellgood:address-detail',
                                               kwargs={'pk': 1}))

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json()['city'], 'Arkham')
        self.assertEqual(response.json()['street'], 'Main Street')

    def test_update_address(self):
        address1 = mommy.make(
            'sellgood.Address', city='New York', state='New York',
            seller=mommy.make('sellgood.Seller'))
        seller2 = mommy.make('sellgood.Seller')

        data = {
            'street': 'Main Street',
            'neighborhood': 'Northern Brooklyn',
            'city': 'Arkham',
            'state': 'New Jersey',
            'number': '666',
            'complement': 'Apartment 25',
            'zipcode': '10009',
            'seller': 2
            }
        
        response = self.client.put(reverse(
            'sellgood:address-detail', kwargs={'pk': 1}),
            data=json.dumps(data), content_type='application/json')
        
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json()['city'], 'Arkham')
        self.assertEqual(response.json()['state'], 'New Jersey')
        self.assertEqual(response.json()['zipcode'], '10009')
        self.assertEqual(response.json()['seller'], 2)

        response2 = self.client.get(reverse('sellgood:address-detail',
                                            kwargs={'pk': 2}))

    def test_partially_update_seller(self): 
        address = mommy.make('Address')         
        data = {'id': address.seller.id, 
                'street': 'nowhere'}          

        response = self.client.patch(reverse('sellgood:address-detail',                                             kwargs={'pk': address.seller.id}),
                                   data=data, 
                                   content_type='application/json') 
       
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json()['street'], 'nowhere')
            

    def test_delete_address(self):
        address1 = mommy.make('sellgood.Address',
                              seller=mommy.make('sellgood.Seller'))

        response = self.client.delete(reverse(
            'sellgood:address-detail', kwargs={'pk': 1}))
        
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

    def test_address_to_delete_not_found(self):
        address1 = mommy.make('sellgood.Address',
                              seller=mommy.make('sellgood.Seller'))
        
        response = self.client.delete(reverse('sellgood:address-detail',
                                               kwargs={'pk': 2}))
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)

    def test_method_not_allowed_detail(self):
        address1 = mommy.make('sellgood.Address',
                              seller=mommy.make('sellgood.Seller'))

        response = self.client.post(reverse('sellgood:address-detail',
                                             kwargs={'pk': 1}))
        self.assertEqual(response.status_code,
                         status.HTTP_405_METHOD_NOT_ALLOWED)
Пример #45
0
class ViewsTestCase(TestCase):
    NAME = "TEST USER"
    EMAIL = "*****@*****.**"
    META = "TEST USER META"
    BASIC_URL = "authorization"
    ID_DATA_VALUE = "ID DATA VALUE"
    URLS = [
        "create_user", "change_settings",
        "post_data", "validate_user", "match_data"
    ]

    def setUp(self):
        self.client = Client()

    def create_url(self, url_part):
        return "http://localhost:8000/" + self.BASIC_URL + "/" + url_part

    def test_create_user(self):
        response = self.client.post(
            self.create_url(self.URLS[0]),
            {'name': self.NAME, 'email': self.EMAIL, 'meta': self.META}
        )
        self.assertEqual(response.status_code, 200)
        response_data = json.loads(response.content.decode("utf-8"))
        self.assertEqual(
            response_data["status"], "success"
        )

    def test_change_settings(self):
        test_case = "CHANGE"
        response = self.client.post(
            self.create_url(self.URLS[0]),
            {'name': self.NAME, 'email': self.EMAIL, 'meta': self.META}
        )
        self.assertEqual(response.status_code, 200)
        response_data = json.loads(response.content.decode("utf-8"))
        self.assertEqual(
            response_data["status"], "success"
        )
        response_data.pop("status")
        response_new = self.client.post(
            self.create_url(self.URLS[1]),
            {
                **response_data,
                'name': self.NAME + test_case,
                'email': self.EMAIL + test_case,
                'meta': self.META + test_case,
            }
        )
        self.assertEqual(response_new.status_code, 200)
        response_new_data = json.loads(response_new.content.decode("utf-8"))
        self.assertEqual(
            response_new_data["status"], "success"
        )

    def test_post_data(self):
        test_case = "POST DATA"
        response = self.client.post(
            self.create_url(self.URLS[0]),
            {'name': self.NAME, 'email': self.EMAIL, 'meta': self.META}
        )
        self.assertEqual(response.status_code, 200)
        response_data = json.loads(response.content.decode("utf-8"))
        self.assertEqual(
            response_data["status"], "success"
        )
        response_data.pop("status")
        response_new = self.client.post(
            self.create_url(self.URLS[2]),
            {
                **response_data,
                "id_data_value": self.ID_DATA_VALUE + "VIEW",
                "data_type": "test_data",
                "timestamp": 0,
            }
        )
        self.assertEqual(response_new.status_code, 200)
        response_new_data = json.loads(response_new.content.decode("utf-8"))
        self.assertEqual(
            response_new_data["status"], "success"
        )

    def test_validate_user(self):
        response = self.client.post(
            self.create_url(self.URLS[0]),
            {'name': self.NAME, 'email': self.EMAIL, 'meta': self.META}
        )
        self.assertEqual(response.status_code, 200)
        response_data = json.loads(response.content.decode("utf-8"))
        self.assertEqual(
            response_data["status"], "success"
        )
        response_data.pop("status")
        response_new = self.client.get(
            self.create_url(self.URLS[3]),
            {
                **response_data,
            }
        )
        self.assertEqual(response_new.status_code, 200)
        response_new_data = json.loads(response_new.content.decode("utf-8"))
        self.assertEqual(
            response_new_data["status"], "success"
        )

    def test_match(self):
        test_case = "POST DATA"
        # Post user 1
        response = self.client.post(
            self.create_url(self.URLS[0]),
            {'name': self.NAME + "1", 'email': self.EMAIL, 'meta': self.META}
        )
        self.assertEqual(response.status_code, 200)
        response_data = json.loads(response.content.decode("utf-8"))
        self.assertEqual(
            response_data["status"], "success"
        )
        response_data.pop("status")
        response_new = self.client.post(
            self.create_url(self.URLS[2]),
            {
                **response_data,
                "id_data_value": self.ID_DATA_VALUE + "VIEW 1",
                "data_type": "test_data",
                "timestamp": 0,
            }
        )
        self.assertEqual(response_new.status_code, 200)
        response_new_data = json.loads(response_new.content.decode("utf-8"))
        self.assertEqual(
            response_new_data["status"], "success"
        )
        # Post user 2
        response = self.client.post(
            self.create_url(self.URLS[0]),
            {'name': self.NAME + "2", 'email': self.EMAIL, 'meta': self.META}
        )
        self.assertEqual(response.status_code, 200)
        response_data = json.loads(response.content.decode("utf-8"))
        self.assertEqual(
            response_data["status"], "success"
        )
        response_data.pop("status")
        response_new = self.client.post(
            self.create_url(self.URLS[2]),
            {
                **response_data,
                "id_data_value": self.ID_DATA_VALUE + "VIEW ",
                "data_type": "test_data",
                "timestamp": 0,
            }
        )
        self.assertEqual(response_new.status_code, 200)
        response_new_data = json.loads(response_new.content.decode("utf-8"))
        self.assertEqual(
            response_new_data["status"], "success"
        )

        response_match = self.client.get(
            self.create_url(self.URLS[4]),
            {**response_data}
        )
        response_match_data = json.loads(
            response_match.content.decode("utf-8")
        )
        self.assertNotEqual(
            self.ID_DATA_VALUE + "VIEW ", response_match_data["id_data_value"]
        )
Пример #46
0
class BulkArchiveForms(TestCase):
    @classmethod
    def setUpClass(cls):
        super(BulkArchiveForms, cls).setUpClass()
        create_domain(DOMAIN_NAME)
        cls.password = "******"
        username = "******"
        email = "*****@*****.**"
        cls.user = WebUser.create(DOMAIN_NAME,
                                  username,
                                  cls.password,
                                  email,
                                  is_admin=True)

        django_user = cls.user.get_django_user()
        try:
            cls.user_role = UserRole.objects.get(user=django_user)
        except UserRole.DoesNotExist:
            user_privs = Role.objects.get_or_create(
                name="Privileges for %s" % django_user.username,
                slug="%s_privileges" % django_user.username,
            )[0]
            cls.user_role = UserRole.objects.create(
                user=django_user,
                role=user_privs,
            )

        cls.bulk_role = Role.objects.filter(
            slug=privileges.BULK_CASE_MANAGEMENT)[0]

        toggles.BULK_ARCHIVE_FORMS.set(username, True)

    @classmethod
    def tearDownClass(cls):
        cls.user.delete()
        Domain.get_by_name(DOMAIN_NAME, strict=True).delete()
        toggles.BULK_ARCHIVE_FORMS.set(cls.user.username, False)
        super(BulkArchiveForms, cls).tearDownClass()

    def setUp(self):
        self.client = Client()
        self.url = '/a/{}/data/edit/archive_forms/'.format(DOMAIN_NAME)

        Grant.objects.get_or_create(from_role=self.user_role.role,
                                    to_role=self.bulk_role)
        Role.get_cache().clear()

        self.client.login(username=self.user.username, password=self.password)

    def test_bulk_archive_get_form(self):

        # Logged in
        response = self.client.get(self.url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            response.context['bulk_upload']['download_url'],
            '/static/data_interfaces/xlsx/forms_bulk_example.xlsx')

        grant = Grant.objects.get(from_role=self.user_role.role,
                                  to_role=self.bulk_role)
        grant.delete()
        Role.get_cache().clear()

        # Revoked privileges should not render form
        response = self.client.get(self.url)
        self.assertFalse('bulk_upload' in response.context)

    def test_bulk_archive_missing_file(self):
        response = self.client.post(self.url, follow=True)

        # Huge hack for determining what has been sent in django messages object.
        # Need to find out how to inspect messages after redirect
        self.assertIn('No files uploaded', response.content)

    def test_bulk_archive_wrong_filetype(self):
        with open(join(BASE_PATH, WRONG_FILETYPE)) as fp:
            response = self.client.post(self.url, {'bulk_upload_file': fp},
                                        follow=True)
            self.assertIn('CommCare HQ does not support that file type.',
                          response.content)

    def test_bulk_archive_basic(self):
        with open(join(BASE_PATH, BASIC_XLSX)) as fp:
            response = self.client.post(self.url, {'bulk_upload_file': fp},
                                        follow=True)
            self.assertIn('We received your file and are processing it.',
                          response.content)
Пример #47
0
 def test_activation_complete(self):
     """Test successful activation complete."""
     c = Client()
     response = c.get('/accounts/activate/complete/')
     self.assertEqual(response.status_code, 200)
Пример #48
0
class TestView(TestCase):
    def setUp(self):
        self.client = Client()

        self.user_trump = User.objects.create_user(
            username="******", password="******"
        )
        self.user_obama = User.objects.create_user(
            username="******", password="******"
        )
        self.user_obama.is_staff = True
        self.user_obama.save()

        self.category_programming = Category.objects.create(
            name="programming", slug="programming"
        )
        self.category_music = Category.objects.create(name="music", slug="music")

        self.tag_python_kor = Tag.objects.create(name="파이썬 공부", slug="파이썬-공부")
        self.tag_python = Tag.objects.create(name="python", slug="python")
        self.tag_hello = Tag.objects.create(name="hello", slug="hello")

        self.post_001 = Post.objects.create(
            title="첫 번째 포스트입니다.",
            content="Hello World. We are the world.",
            category=self.category_programming,
            author=self.user_trump,
        )
        self.post_001.tags.add(self.tag_hello)

        self.post_002 = Post.objects.create(
            title="두 번째 포스트입니다.",
            content="1등이 전부는 아니잖아요?",
            category=self.category_music,
            author=self.user_obama,
        )

        self.post_003 = Post.objects.create(
            title="세 번째 포스트입니다.",
            content="category가 없을 수도 있죠",
            author=self.user_obama,
        )
        self.post_003.tags.add(self.tag_python_kor)
        self.post_003.tags.add(self.tag_python)

        self.comment_001 = Comment.objects.create(
            post=self.post_001,
            author=self.user_obama,
            content="첫 번째 댓글입니다.",
        )

    def navbar_test(self, soup):
        navbar = soup.nav
        self.assertIn("Blog", navbar.text)
        self.assertIn("About Me", navbar.text)

        logo_btn = navbar.find("a", text="Do It Django")
        self.assertEqual(logo_btn.attrs["href"], "/")

        home_btn = navbar.find("a", text="Home")
        self.assertEqual(home_btn.attrs["href"], "/")

        blog_btn = navbar.find("a", text="Blog")
        self.assertEqual(blog_btn.attrs["href"], "/blog/")

        about_me_btn = navbar.find("a", text="About Me")
        self.assertEqual(about_me_btn.attrs["href"], "/about_me/")

    def category_card_test(self, soup):
        categories_card = soup.find("div", id="categories-card")
        self.assertIn("Categories", categories_card.text)
        self.assertIn(
            f"{self.category_programming.name} ({self.category_programming.post_set.count()})",
            categories_card.text,
        )
        self.assertIn(
            f"{self.category_music.name} ({self.category_music.post_set.count()})",
            categories_card.text,
        )
        self.assertIn("미분류", categories_card.text)

    def test_post_list(self):
        # Post가 있는 경우
        self.assertEqual(Post.objects.count(), 3)

        response = self.client.get("/blog/")
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content, "html.parser")

        self.assertEqual(soup.title.text, "Blog - Do It Django")

        self.navbar_test(soup)
        self.category_card_test(soup)

        main_area = soup.find("div", id="main-area")
        self.assertNotIn("아직 게시물이 없습니다", main_area.text)

        post_001_card = main_area.find("div", id="post-1")  # id가 post-1인 div를 찾아서, 그 안에
        self.assertIn(self.post_001.title, post_001_card.text)  # title이 있는지
        self.assertIn(self.post_001.category.name, post_001_card.text)  # category가 있는지
        self.assertIn(
            self.post_001.author.username.capitalize(), post_001_card.text
        )  # 작성자명이 있는지
        self.assertIn(self.tag_hello.name, post_001_card.text)
        self.assertNotIn(self.tag_python.name, post_001_card.text)
        self.assertNotIn(self.tag_python_kor.name, post_001_card.text)

        post_002_card = main_area.find("div", id="post-2")
        self.assertIn(self.post_002.title, post_002_card.text)
        self.assertIn(self.post_002.category.name, post_002_card.text)
        self.assertIn(self.post_002.author.username.capitalize(), post_002_card.text)
        self.assertNotIn(self.tag_hello.name, post_002_card.text)
        self.assertNotIn(self.tag_python.name, post_002_card.text)
        self.assertNotIn(self.tag_python_kor.name, post_002_card.text)

        post_003_card = main_area.find("div", id="post-3")
        self.assertIn("미분류", post_003_card.text)
        self.assertIn(self.post_003.title, post_003_card.text)
        self.assertIn(self.post_003.author.username.capitalize(), post_003_card.text)
        self.assertNotIn(self.tag_hello.name, post_003_card.text)
        self.assertIn(self.tag_python.name, post_003_card.text)
        self.assertIn(self.tag_python_kor.name, post_003_card.text)

        # Post가 없는 경우
        Post.objects.all().delete()
        self.assertEqual(Post.objects.count(), 0)
        response = self.client.get("/blog/")
        soup = BeautifulSoup(response.content, "html.parser")
        main_area = soup.find("div", id="main-area")  # id가 main-area인 div태그를 찾습니다.
        self.assertIn("아직 게시물이 없습니다", main_area.text)

    def test_post_detail(self):
        # 1.1 포스트가 하나 있다.
        post_001 = Post.objects.create(
            title="첫 번째 포스트입니다.",
            content="Hello World. We are the world.",
            author=self.user_trump,
        )
        # 1.2 그 포스트의 url은 '/blog/1/' 이다.
        self.assertEqual(self.post_001.get_absolute_url(), "/blog/1/")

        # 2. 첫 번째 포스트의 상세 페이지 테스트
        # 2.1 첫 번째 포스트의 url로 접근하면 정상적으로 작동한다.(status code: 200)
        response = self.client.get(self.post_001.get_absolute_url())
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content, "html.parser")
        # 2.2 포스트 목록 페이지와 똑같은 내비게이션 바가 있다.
        # navbar = soup.nav
        # self.assertIn("Blog", navbar.text)
        # self.assertIn("About Me", navbar.text)
        self.navbar_test(soup)
        self.category_card_test(soup)
        # 2.3 첫 번째 포스트의 제목이 웹 브라우저 탭 타이틀에 들어 있다.
        self.assertIn(self.post_001.title, soup.title.text)
        # 2.4 첫 번째 포스트의 제목이 포스트 영역에 있다.
        main_area = soup.find("div", id="main-area")
        post_area = main_area.find("div", id="post-area")
        self.assertIn(self.post_001.title, post_area.text)
        self.assertIn(self.category_programming.name, post_area.text)
        # 2.5 첫 번째 포스트의 작성자(author)가 포스트 영역에 있다.(아직 구현할 수 없음)
        self.assertIn(self.user_trump.username.capitalize(), post_area.text)
        # 2.6 첫 번째 포스트의 내용(content)이 포스트 영역에 있다.
        self.assertIn(self.post_001.content, post_area.text)

        self.assertIn(self.tag_hello.name, post_area.text)
        self.assertNotIn(self.tag_python.name, post_area.text)
        self.assertNotIn(self.tag_python_kor.name, post_area.text)

        # comment area
        comments_area = soup.find("div", id="comment-area")
        comment_001_area = comments_area.find("div", id="comment-1")
        self.assertIn(self.comment_001.author.username, comment_001_area.text)
        self.assertIn(self.comment_001.content, comment_001_area.text)

    def test_category_page(self):
        response = self.client.get(self.category_programming.get_absolute_url())
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content, "html.parser")

        self.navbar_test(soup)
        self.category_card_test(soup)

        self.assertIn(self.category_programming.name, soup.h1.text)

        main_area = soup.find("div", id="main-area")
        self.assertIn(self.category_programming.name, main_area.text)
        self.assertIn(self.post_001.title, main_area.text)
        self.assertNotIn(self.post_002.title, main_area.text)
        self.assertNotIn(self.post_003.title, main_area.text)

    def test_tag_page(self):
        response = self.client.get(self.tag_hello.get_absolute_url())
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content, "html.parser")

        self.navbar_test(soup)
        self.category_card_test(soup)

        self.assertIn(self.tag_hello.name, soup.h1.text)

        main_area = soup.find("div", id="main-area")
        self.assertIn(self.tag_hello.name, main_area.text)
        self.assertIn(self.post_001.title, main_area.text)
        self.assertNotIn(self.post_002.title, main_area.text)
        self.assertNotIn(self.post_003.title, main_area.text)

    def test_create_post(self):
        # 로그인 하지 않으면 status code가 200이면 안된다!
        response = self.client.get("/blog/create_post/")
        self.assertNotEqual(response.status_code, 200)

        # staff가 아닌 trump가 로그인을 한다.
        self.client.login(username="******", password="******")
        response = self.client.get("/blog/create_post/")
        self.assertNotEqual(response.status_code, 200)

        # staff인 obama로 로그인한다.
        self.client.login(username="******", password="******")
        response = self.client.get("/blog/create_post/")
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content, "html.parser")

        self.assertEqual("Blog - Create Post", soup.title.text)
        main_area = soup.find("div", id="main-area")
        self.assertIn("Create New Post", main_area.text)

        tag_str_input = main_area.find("input", id="id_tags_str")
        self.assertTrue(tag_str_input)

        self.client.post(
            "/blog/create_post/",
            {
                "title": "Post Form 만들기",
                "content": "Post Form 페이지를 만듭시다.",
                "tags_str": "new tag; 한글 태그, python",
            },
        )
        last_post = Post.objects.last()
        self.assertEqual(last_post.title, "Post Form 만들기")
        self.assertEqual(last_post.author.username, "obama")

        self.assertEqual(last_post.tags.count(), 3)
        self.assertTrue(Tag.objects.get(name="new tag"))
        self.assertTrue(Tag.objects.get(name="한글 태그"))
        self.assertEqual(Tag.objects.count(), 5)

    def test_update_post(self):
        update_post_url = f"/blog/update_post/{self.post_003.pk}/"
        # 로그인 하지 않은 경우
        response = self.client.get(update_post_url)
        self.assertNotEqual(response.status_code, 200)

        # 로그인은 했지만, 작성자가 아닌 경우
        self.assertNotEqual(self.post_003.author, self.user_trump)
        self.client.login(username=self.user_trump.username, password="******")
        response = self.client.get(update_post_url)
        self.assertEqual(response.status_code, 403)

        # 작성자(obama)가 접근하는 경우
        self.client.login(
            username=self.post_003.author.username, password="******"
        )
        response = self.client.get(update_post_url)
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content, "html.parser")

        self.assertEqual("Blog - Edit Post", soup.title.text)
        main_area = soup.find("div", id="main-area")
        self.assertIn("Edit Post", main_area.text)

        tag_str_input = main_area.find("input", id="id_tags_str")
        self.assertTrue(tag_str_input)
        self.assertIn("파이썬 공부; python", tag_str_input.attrs["value"])

        response = self.client.post(
            update_post_url,
            {
                "title": "세번째 포스트를 수정했습니다. ",
                "content": "안녕 세계? 우리는 하나!",
                "category": self.category_music.pk,
                "tags_str": "파이썬 공부; 한글 태그, some tag",
            },
            follow=True,
        )
        soup = BeautifulSoup(response.content, "html.parser")
        main_area = soup.find("div", id="main-area")
        self.assertIn("세번째 포스트를 수정했습니다.", main_area.text)
        self.assertIn("안녕 세계? 우리는 하나!", main_area.text)
        self.assertIn(self.category_music.name, main_area.text)
        self.assertIn("파이썬 공부", main_area.text)
        self.assertIn("한글 태그", main_area.text)
        self.assertIn("some tag", main_area.text)
        self.assertNotIn("python", main_area.text)
Пример #49
0
 def test_successful_account_signup(self):
     """Test successful signup."""
     c = Client()
     response = c.get('/accounts/register/')
     self.assertEqual(response.status_code, 200)
Пример #50
0
class TestAuthorView(TestCase):
    def setUp(self):
        self.client = Client()
        # create test user
        displayName = 'test author'
        host = settings.HEROKU_HOST
        github = 'https://github.com/test_author'
        username = '******'
        password = '******'


        # author a
        self.a = Author(displayName=displayName ,host=host, github=github, username=username, password=make_password(password))
        self.a.url = f'{host}author/{self.a.id}'
        self.a.save()

        # get token
        self.login_url = reverse('login')

        response = self.client.post(
                self.login_url,
                {'username': username, 'password': password},
                content_type="application/json",
                )

        self.token = response.data['token']
        self.headers = {
            'HTTP_AUTHORIZATION': f'Bearer {self.token}',
            'HTTP_ORIGIN': settings.FRONTEND_HOST,
        }

        # author b
        self.b = Author(displayName=displayName ,host=host, github=github, username=username+'b', password=make_password(password))
        self.b.url = f'{host}author/{self.b.id}'
        self.b.save()


    def test_author_api_GET(self):       

        # get none exist author
        self.headers['HTTP_X_URL'] = settings.HEROKU_HOST + 'author/none_exist_author_id'
        response = self.client.get(reverse('author-profile', args=['none_exist_author_id']), **self.headers)
        self.assertEquals(response.status_code, 404)

        # get exist author
        response = self.client.get(reverse('author-profile', args=[self.a.id]), **self.headers)
        self.assertEquals(response.status_code, 200)
        self.assertEquals(response.json()['type'], 'author')
        self.assertEquals(response.json()['id'], self.a.url)
        self.assertEquals(response.json()['host'], self.a.host)
        self.assertEquals(response.json()['displayName'], self.a.displayName)
        self.assertEquals(response.json()['url'], self.a.url)
        self.assertEquals(response.json()['github'], self.a.github)

    def test_author_api_POST(self):

        # post to none exist author
        self.headers['HTTP_X_URL'] = settings.HEROKU_HOST + 'author/none_exist_author_id'
        response = self.client.post(reverse('author-profile', args=['none_exist_author_id']), **self.headers)
        self.assertEquals(response.status_code, 404)

        # post to exist author
        data = {
            'id': self.a.url,
            'host': self.a.host,
            'displayName': 'new name',
            'url': self.a.url,
            'github': 'https://github.com/new_github',
        }
        response = self.client.post(
            reverse('author-profile', args=[self.a.id]), 
            data=data, 
            content_type="application/json", 
            **self.headers)
        self.assertEquals(response.status_code, 200)
        self.assertEquals(response.json()['displayName'], 'new name')
        self.assertEquals(response.json()['github'], 'https://github.com/new_github')

        # post to other exist author
        response = self.client.post(
            reverse('author-profile', args=[self.b.id]), 
            data=data, 
            content_type="application/json", 
            **self.headers)
        self.assertEquals(response.status_code, 403)

    def test_author_api_not_allowed_method(self):
        # delete exist author
        response = self.client.delete(
            reverse('author-profile', args=[self.a.id]), 
            **self.headers)
        self.assertEquals(response.status_code, 405)

        # put exist author
        data = {
            'id': self.a.url,
            'host': self.a.host,
            'displayName': 'new name',
            'url': self.a.url,
            'github': 'https://github.com/new_github',
        }

        response = self.client.put(
            reverse('author-profile', args=[self.a.id]), 
            data=data, 
            content_type="application/json", 
            **self.headers)
        self.assertEquals(response.status_code, 405)
Пример #51
0
 def test_admin_view(self):
     """Tests successful retrieval of admin view."""
     c = Client()
     reponse = c.get('/admin/login/?next=/admin/')
     self.assertEqual(reponse.status_code, 200)
Пример #52
0
 def test_registration_complete(self):
     """Test successful registration."""
     c = Client()
     response = c.get('/accounts/register/complete/')
     self.assertEqual(response.status_code, 200)
Пример #53
0
class ViewPageContextTest(TestCase):
    @classmethod
    def setUpClass(cls):
        super().setUpClass()
        os.mkdir(f'{settings.BASE_DIR}/tmp/')
        settings.MEDIA_ROOT = tempfile.mkdtemp(dir=f'{settings.BASE_DIR}/tmp/')

    def setUp(self):
        self.guest_client = Client()

        self.user_one = User.objects.create_user(username='******')
        self.user_one_client = Client()
        self.user_one_client.force_login(self.user_one)

        self.user_two = User.objects.create_user(username='******')
        self.user_two_client = Client()
        self.user_two_client.force_login(self.user_two)

        self.test_group = Group.objects.create(
            title='Test Group',
            slug='group',
            description='Description',
        )

        self.test_second_group = Group.objects.create(
            title='Test Second Group',
            slug='second-group',
            description='Description',
        )

        self.small_gif = (b'\x47\x49\x46\x38\x39\x61\x02\x00'
                          b'\x01\x00\x80\x00\x00\x00\x00\x00'
                          b'\xFF\xFF\xFF\x21\xF9\x04\x00\x00'
                          b'\x00\x00\x00\x2C\x00\x00\x00\x00'
                          b'\x02\x00\x01\x00\x00\x02\x02\x0C'
                          b'\x0A\x00\x3B')

        self.uploaded = SimpleUploadedFile(
            name='small.gif',
            content=self.small_gif,
            content_type='image/gif',
        )

        self.test_post = Post.objects.create(
            text='Test post',
            author=self.user_one,
            group=self.test_group,
            image=self.uploaded,
        )
        cache.clear()

    @classmethod
    def tearDownClass(cls):
        shutil.rmtree(f'{settings.BASE_DIR}/tmp/', ignore_errors=True)
        super().tearDownClass()

    def test_auth_user_can_follow_unfollow(self):
        """Пользователь может подписаться и отписаться от автора."""
        urls = {
            reverse('profile_follow', args=[self.user_two]): True,
            reverse('profile_unfollow', args=[self.user_two]): False,
        }

        for url, expected in urls.items():
            with self.subTest(url=url):
                self.user_one_client.get(url)
                actual = Follow.objects.filter(user=self.user_one,
                                               author=self.user_two).exists()
                msg = f'{url}: подписка/отписка работает неправильно'
                self.assertEqual(actual, expected, msg)

    def test_new_post_exist_for_followers(self):
        """Новый пост пользователя появляется у тех кто на него подписан."""
        test_post_user_two = Post.objects.create(
            text='Test user two post',
            author=self.user_two,
            group=self.test_group,
        )

        Follow.objects.create(user=self.user_one, author=self.user_two)

        url = reverse('follow_index')

        response = self.user_one_client.get(url)
        actual = response.context['page'][0]
        expected = test_post_user_two

        msg = 'Неправильно работает страница избранного.'

        self.assertEqual(actual, expected, msg)

        response = self.user_two_client.get(url)
        actual = response.context['paginator'].count

        self.assertEqual(actual, 0, msg)

    def test_auth_user_can_comment(self):
        """Пользователи могут добавлять комментарии, а гости нет."""
        users = {
            self.guest_client: False,
            self.user_one_client: True,
        }

        for user, expected in users.items():
            with self.subTest(user=user):
                form_data = {
                    'text': 'comment',
                }

                user.post(
                    reverse('add_comment',
                            args=[self.user_one, self.test_post.id]),
                    data=form_data,
                    follow=True,
                )

                actual = Comment.objects.filter(
                    post=self.test_post,
                    author=self.user_one,
                    text=form_data['text'],
                ).exists()

                msg = f'Ошибка добавления комментария у {user}'

                self.assertEqual(actual, expected, msg)

    def test_cache(self):
        """Главная страница корректно кэширует список записей."""

        response_before = self.user_one_client.get(reverse('index'))
        page_before_clear_cache = response_before.content

        post = Post.objects.latest('id')
        post.text = 'Кэш ' + post.text
        post.save()

        response_before = self.user_one_client.get(reverse('index'))
        page_before_clear_cache_refresh = response_before.content
        self.assertEqual(page_before_clear_cache,
                         page_before_clear_cache_refresh)

        cache.clear()
        response_after = self.user_one_client.get(reverse('index'))
        page_after_clear_cache = response_after.content
        self.assertNotEqual(page_before_clear_cache, page_after_clear_cache)

    def test_url_templates(self):
        """Соответствие вызываемых шаблонов."""
        user = self.user_one
        post_id = self.test_post.id
        urls = {
            reverse('index'): 'index.html',
            reverse('new_post'): 'new.html',
            reverse('group', args=['group']): 'group.html',
            reverse('group', args=['group']): 'group.html',
            reverse('post_edit', args=[user, post_id]): 'new_post.html',
            reverse('about:author'): 'about/author.html',
            reverse('about:tech'): 'about/tech.html',
        }

        for url, expected in urls.items():
            with self.subTest():
                response = self.user_one_client.get(url)
                msg = f'{url} не использует шаблон {expected}'
                self.assertTemplateUsed(response, expected, msg)

    def test_index_context(self):
        """На главной странице существует пост и правильный контекст."""
        response = self.user_one_client.get(reverse('index'))
        expected = self.test_post
        msg = 'На главной странице неправильный context или нет нового поста'
        self.assertEqual(response.context['page'][0], expected, msg)

    def test_group_context(self):
        """На странице группы правильный контекст."""
        url = reverse('group', args=['group'])
        response = self.user_one_client.get(url)
        expected = self.test_group
        msg = 'На странице группы неправильный context'
        self.assertEqual(response.context['group'], expected, msg)

    def test_new_post_context(self):
        """На странице создания поста правильный контекст."""
        fields = {
            'text': forms.fields.CharField,
            'group': forms.models.ModelChoiceField,
            'image': forms.fields.ImageField,
        }

        response = self.user_one_client.get(reverse('new_post'))
        form = response.context['form']

        for field, expected in fields.items():
            with self.subTest(field=field):
                msg = 'На странице создания поста неправильный context'
                self.assertIsInstance(form.fields[field], expected, msg)

    def test_post_edit_context(self):
        """На странице редактирования поста правильный контекст."""
        url = reverse('post_edit', args=[self.user_one, self.test_post.id])
        response = self.user_one_client.get(url)
        form = response.context['form']

        context = {
            'post': self.test_post,
            'is_edit': True,
        }

        for value, expected in context.items():
            with self.subTest(value=value):
                msg = f'{value} контекста не равно {expected}'
                self.assertEqual(response.context[value], expected, msg)

        fields = {
            'text': forms.fields.CharField,
            'group': forms.models.ModelChoiceField,
        }

        for field, expected in fields.items():
            with self.subTest(field=field):
                msg = 'На странице редактирования поста неправильный context'
                self.assertIsInstance(form.fields[field], expected, msg)

    def test_profile_context(self):
        """На странице автора правильный контекст."""
        user = self.user_one
        url = reverse('profile', args=[user])
        response = self.user_one_client.get(url)

        context = {
            'author': user,
            # 'posts': self.test_post,
        }

        for value, expected in context.items():
            with self.subTest(value=value):
                msg = f'{value} контекста не равно {expected}'
                self.assertEqual(response.context[value], expected, msg)

    def test_post_view_context(self):
        """На странице поста правильный контекст."""
        url = reverse('post', args=[self.user_one, self.test_post.id])
        response = self.user_one_client.get(url)

        context = {
            'post': self.test_post,
            'author': self.user_one,
        }

        for value, expected in context.items():
            with self.subTest(value=value):
                msg = f'{value} контекста не равно {expected}'
                self.assertEqual(response.context[value], expected, msg)

    def test_group_post(self):
        """На странице группы отображается новый пост."""
        response = self.user_one_client.get(reverse('group', args=['group']))
        expected = self.test_post
        msg = 'На странице группы не отображается новый пост'
        self.assertEqual(response.context['page'][0], expected, msg)

    def test_another_group_post(self):
        """На странице другой группы не отображается новый пост."""
        path = reverse('group', args=['second-group'])
        response = self.user_one_client.get(path)
        response = response.context['page'].object_list.count()
        expected = 0
        msg = 'На странице другой группы не должен отображаться новый пост'
        self.assertEqual(response, expected, msg)
Пример #54
0
 def test_successful_logout(self):
     """Test successfully logged out."""
     c = Client()
     response = c.get('/accounts/logout/')
     self.assertEqual(response.status_code, 200)
Пример #55
0
 def test_blog_page_status_code(self):
     client = Client()
     response = client.get('/blog/')
     self.assertEqual(response.status_code, 200)
Пример #56
0
 def test_home_view(self):
     """Tests successful retrieval of home view."""
     c = Client()
     reponse = c.get('/')
     self.assertEqual(reponse.status_code, 200)
Пример #57
0
    def test_ethereum_view(self):
        client = Client()
        response = client.get(reverse('ethereum:ethereum'))

        self.assertEquals(response.status_code, 200)
        self.assertTemplateUsed(response, 'ethereum/ethereum.html')
Пример #58
0
 def test_index(self):
     c = Client()
     response = c.get("/")
     self.assertEqual(response.status_code, 200)
Пример #59
0
class ViewTest(TestCase):
    """Tests for user_login view"""
    def setUp(self):
        self.client = Client(enforce_csrf_checks=True)
        self.client.get("/")  # To get the CSRF token for next request
        assert django_settings.CSRF_COOKIE_NAME in self.client.cookies
        self.target_user = User.objects.create(username="******")

    def get_csrf_token_payload(self):
        return {
            "csrfmiddlewaretoken":
            self.client.cookies[django_settings.CSRF_COOKIE_NAME].value
        }

    def get_target_url(self, target_user=None):
        if target_user is None:
            target_user = self.target_user
        response = self.client.post(reverse("loginas-user-login",
                                            kwargs={"user_id":
                                                    target_user.id}),
                                    data=self.get_csrf_token_payload())
        self.assertEqual(response.status_code, 302)
        return response

    def assertCurrentUserIs(self, user):
        id_ = str(user.id if user is not None else None).encode("utf-8")
        r = self.client.post(reverse("current_user"),
                             data=self.get_csrf_token_payload())
        self.assertEqual(r.content, id_)

    def assertLoginError(self, resp, message=None):
        self.assertEqual(urlsplit(resp["Location"])[2], "/")
        message = message or "You do not have permission to do that."
        messages = CookieStorage(resp)._decode(resp.cookies["messages"].value)
        self.assertIn((40, message), [(m.level, m.message) for m in messages])

    def assertLoginSuccess(self, resp, user):
        self.assertEqual(
            urlsplit(resp["Location"])[2], django_settings.LOGIN_REDIRECT_URL)
        msg = la_settings.MESSAGE_LOGIN_SWITCH.format(
            username=user.__dict__[la_settings.USERNAME_FIELD])
        messages = CookieStorage(resp)._decode(resp.cookies["messages"].value)
        self.assertIn(msg, "".join([m.message for m in messages]))

    def assertRaisesExact(self, exception, func, *args, **kwargs):
        try:
            func(*args, **kwargs)
            self.assertFail("{0} not raised".format(exception))
        except exception.__class__ as caught:
            self.assertEqual(caught.args, exception.args)

    def clear_session_cookie(self):
        del self.client.cookies[django_settings.SESSION_COOKIE_NAME]

    @override_settings(CAN_LOGIN_AS=login_as_nonstaff)
    def test_custom_permissions(self):
        user = create_user("üser", "pass", is_superuser=False, is_staff=False)
        staff1 = create_user("stäff",
                             "pass",
                             is_superuser=False,
                             is_staff=True)
        staff2 = create_user("super", "pass", is_superuser=True, is_staff=True)

        # Regular user can't login as anyone
        self.assertTrue(self.client.login(username="******", password="******"))
        self.assertLoginError(self.get_target_url())
        self.assertCurrentUserIs(user)
        self.clear_session_cookie()

        # Non-superuser staff user can login as regular user
        self.assertTrue(self.client.login(username="******", password="******"))
        response = self.get_target_url(user)
        self.assertLoginSuccess(response, user)
        self.assertCurrentUserIs(user)
        self.clear_session_cookie()

        # Non-superuser staff user cannot login as other staff
        self.assertTrue(self.client.login(username="******", password="******"))
        self.assertLoginError(self.get_target_url(staff2))
        self.assertCurrentUserIs(staff1)
        self.clear_session_cookie()

        # Superuser staff user can login as other staff
        self.assertTrue(self.client.login(username="******", password="******"))
        response = self.get_target_url(staff1)
        self.assertLoginSuccess(response, staff1)
        self.assertCurrentUserIs(staff1)

    @override_settings(CAN_LOGIN_AS="loginas.tests.login_as_shorter_username")
    def test_custom_permissions_as_string(self):
        ray = create_user("ray", "pass")
        lonnie = create_user("lonnie", "pass")

        # Ray cannot login as Lonnie
        self.assertTrue(self.client.login(username="******", password="******"))
        self.assertLoginError(self.get_target_url(lonnie))
        self.assertCurrentUserIs(ray)
        self.clear_session_cookie()

        # Lonnie can login as Ray
        self.assertTrue(self.client.login(username="******", password="******"))
        response = self.get_target_url(ray)
        self.assertLoginSuccess(response, ray)
        self.assertCurrentUserIs(ray)

    def test_custom_permissions_invalid_path(self):
        def assertMessage(message):
            self.assertRaisesExact(ImproperlyConfigured(message),
                                   self.get_target_url)

        with override_settings(CAN_LOGIN_AS="loginas.tests.invalid_func"):
            assertMessage(
                "Module loginas.tests does not define a invalid_func function."
            )
        with override_settings(CAN_LOGIN_AS="loginas.tests.invalid_path.func"):
            assertMessage(
                "Error importing CAN_LOGIN_AS function: loginas.tests.invalid_path"
            )

    def test_as_superuser(self):
        create_user("me", "pass", is_superuser=True, is_staff=True)
        self.assertTrue(self.client.login(username="******", password="******"))
        response = self.get_target_url()
        self.assertLoginSuccess(response, self.target_user)
        self.assertCurrentUserIs(self.target_user)

    def test_as_non_superuser(self):
        user = create_user("me", "pass", is_staff=True)
        self.assertTrue(self.client.login(username="******", password="******"))
        self.assertLoginError(self.get_target_url())
        self.assertCurrentUserIs(user)

    @unittest.skipIf(django.VERSION[:2] < (1, 10),
                     "Django < 1.10 allows to authenticate as inactive user")
    def test_auth_backends_user_not_found(self):
        superuser = create_user("me", "pass", is_superuser=True, is_staff=True)
        self.assertTrue(self.client.login(username="******", password="******"))
        self.assertCurrentUserIs(superuser)
        # ModelBackend should authenticate superuser but prevent this action for inactive user
        inactive_user = create_user("name", "pass", is_active=False)
        with self.settings(AUTHENTICATION_BACKENDS=(
                "django.contrib.auth.backends.ModelBackend",
                "tests.WrongAuthBackend")):
            message = "Could not find an appropriate authentication backend"
            self.assertLoginError(
                self.get_target_url(target_user=inactive_user),
                message=message)
        self.assertCurrentUserIs(superuser)

    @override_settings(CAN_LOGIN_AS=can_login_as_always_raise_permission_denied
                       )
    def test_can_login_as_permission_denied(self):
        message = "You can't login as target user"
        self.assertLoginError(self.get_target_url(), message=message)

    def test_as_anonymous_user(self):
        self.assertLoginError(self.get_target_url())
        self.assertCurrentUserIs(None)

    def test_get_405_method_not_allowed(self):
        url = reverse("loginas-user-login", kwargs={"user_id": "0"})
        r = self.client.get(url)
        self.assertEqual(r.status_code, 405)

    def test_missing_csrf_token_403_forbidden(self):
        url = reverse("loginas-user-login", kwargs={"user_id": "0"})
        r = self.client.post(url)
        self.assertEqual(r.status_code, 403)

    @override_settings(LOGINAS_REDIRECT_URL="/another-redirect")
    def test_loginas_redirect_url(self):
        create_user("me", "pass", is_superuser=True, is_staff=True)
        self.assertTrue(self.client.login(username="******", password="******"))

        response = self.client.post(reverse(
            "loginas-user-login", kwargs={"user_id": self.target_user.id}),
                                    data=self.get_csrf_token_payload())
        self.assertEqual(response.status_code, 302)
        self.assertEqual(
            urlsplit(response["Location"])[2], "/another-redirect")

    def test_restore_original_user(self):

        # Create a super user and login as this
        original_user = create_user("me",
                                    "pass",
                                    is_superuser=True,
                                    is_staff=True)
        self.assertTrue(self.client.login(username="******", password="******"))
        response = self.get_target_url()
        self.assertLoginSuccess(response, self.target_user)

        url = reverse("loginas-user-login",
                      kwargs={"user_id": self.target_user.id})
        self.client.get(url)
        self.assertCurrentUserIs(self.target_user)

        # Restore
        url = reverse("loginas-logout")
        self.client.get(url)
        self.assertCurrentUserIs(original_user)

    @override_settings(LOGINAS_LOGOUT_REDIRECT_URL="/another-redirect")
    def test_loginas_redirect_url_again(self):
        create_user("me", "pass", is_superuser=True, is_staff=True)
        self.assertTrue(self.client.login(username="******", password="******"))
        response = self.client.get(reverse("loginas-logout"))
        self.assertEqual(response.status_code, 302)
        self.assertEqual(
            urlsplit(response["Location"])[2], "/another-redirect")

    def test_last_login_not_updated(self):
        last_login = timezone.now() - timedelta(hours=1)
        self.target_user.last_login = last_login
        self.target_user.save()
        create_user("me", "pass", is_superuser=True, is_staff=True)
        self.assertTrue(self.client.login(username="******", password="******"))
        response = self.get_target_url()
        self.assertLoginSuccess(response, self.target_user)
        self.assertCurrentUserIs(self.target_user)
        target_user = User.objects.get(
            id=self.target_user.id)  # refresh from db
        self.assertEqual(target_user.last_login, last_login)

    @override_settings(LOGINAS_UPDATE_LAST_LOGIN=True)
    def test_last_login_updated(self):
        last_login = timezone.now() - timedelta(hours=1)
        self.target_user.last_login = last_login
        self.target_user.save()
        create_user("me", "pass", is_superuser=True, is_staff=True)
        self.assertTrue(self.client.login(username="******", password="******"))
        response = self.get_target_url()
        self.assertLoginSuccess(response, self.target_user)
        self.assertCurrentUserIs(self.target_user)
        target_user = User.objects.get(
            id=self.target_user.id)  # refresh from db
        self.assertGreater(target_user.last_login, last_login)

    @override_settings(USERNAME_FIELD="email")
    def test_custom_username_field(self):
        create_user("me", "pass", is_superuser=True, is_staff=True)
        self.assertTrue(self.client.login(username="******", password="******"))
        self.target_user.email = "*****@*****.**"
        self.target_user.save()
        response = self.get_target_url()
        self.assertLoginSuccess(response, self.target_user)
Пример #60
0
    def test_afficher_tx_eth_view(self):
        client = Client()
        response = client.get(reverse('ethereum:afficher_tx_eth'))

        self.assertEquals(response.status_code, 200)
        self.assertTemplateUsed(response, 'ethereum/transactions_eth.html')