Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
fun-apps / fun_certificates / tests / test_certificates.py
Size: Mime:
# -*- coding: utf-8 -*-

import datetime

from django.core.urlresolvers import reverse
from django.test import TestCase
from django.test.utils import override_settings

from certificates.models import GeneratedCertificate, CertificateStatuses, CertificateHtmlViewConfiguration
from student.tests.factories import UserFactory, CourseEnrollmentFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory

from courses.tests.factories import CourseFactory as FunCourseFactory
from fun.tests.utils import skipUnlessLms

from ..utils import cert_id_encode, cert_id_decode, get_encoded_cert_id
from .helpers import HelperMethods

configuration = """{ "default":{ "accomplishment_class_append":"accomplishment-certificate", "platform_name":"Fun-MOOC", "company_about_url":"https://cargo.fun-mooc.fr/about", "company_privacy_url":"https://cargo.fun-mooc.fr/privacy", "company_tos_url":"https://cargo.fun-mooc.fr/tos", "company_verified_certificate_url":"http://www.YourOrganization.com/about_verified_certificates", "logo_src":"/static/funsite/images/logos/funmooc173.png", "logo_url":"https://cargo.fun-mooc.fr/" }, "honor":{ "certificate_type":"honor", "certificate_title":"Attestation", "document_body_class_append":"is-honorcode" }, "verified":{ "certificate_type":"verified", "certificate_title":"Certificat vérifié", "document_body_class_append":"is-idverified" }, "base":{ "certificate_type":"base", "certificate_title":"Certificate of Achievement", "document_body_class_append":"is-base" }, "distinguished":{ "certificate_type":"distinguished", "certificate_title":"Distinguished Certificate of Achievement", "document_body_class_append":"is-distinguished" } }"""


class CertURLEncodingTests(TestCase):

    def test_cert_id_encode(self):
        cert_id = 42
        key = 'test'
        encoded = cert_id_encode(key, cert_id)
        decoded = cert_id_decode(key, encoded)
        self.assertEqual(cert_id, decoded)


@skipUnlessLms
@override_settings(SECRET_KEY='test')
class ViewTests(ModuleStoreTestCase, HelperMethods):
    def setUp(self):
        super(ViewTests, self).setUp()
        self.course = CourseFactory(org='fun', course='course', number='0001',
                display_name=u"verified course", ispublic=True)
        ck = self.course.id
        self.fun_course = FunCourseFactory(key=unicode(ck))
        self.user = UserFactory(username='user1')  # user with profile

        # add certificate information to self.course
        self._add_course_certificates(count=1, signatory_count=3)

        CertificateHtmlViewConfiguration.objects.create(configuration=configuration, enabled=True)

        CourseEnrollmentFactory(course_id=self.course.id, user=self.user)
        self.certif = GeneratedCertificate.objects.create(user=self.user, course_id=ck,
            status=CertificateStatuses.downloadable,
            mode=GeneratedCertificate.MODES.verified)
        self.encoded = get_encoded_cert_id('test', unicode(self.course.id), self.user.id)

    def test_certif_valid(self):
        response = self.client.get(reverse('short-cert-url', args=[self.encoded]))
        self.assertEqual(200, response.status_code)

    def test_certif_not_passing(self):
        self.certif.status = CertificateStatuses.notpassing
        self.certif.save()
        response = self.client.get(reverse('short-cert-url', args=[self.encoded]))
        self.assertEqual(404, response.status_code)

    def test_certif_not_verified(self):
        self.certif.mode = 'honor'
        self.certif.save()
        response = self.client.get(reverse('short-cert-url', args=[self.encoded]))
        self.assertEqual(404, response.status_code)

    def test_works_if_delivery_month_has_accent(self):
        august = datetime.datetime(2015, 8, 3)  # August the 3rd, the month is accentuated in French
        self.certif.modified_date = august
        self.certif.save()
        response = self.client.get(reverse('short-cert-url', args=[self.encoded]))
        self.assertEqual(200, response.status_code)

    def test_old_secret_key(self):
        user = UserFactory(username='user2')  # user with profile
        CourseEnrollmentFactory(course_id=self.course.id, user=user)
        certif = GeneratedCertificate.objects.create(user=user, course_id=self.course.id,
            status=CertificateStatuses.downloadable,
            mode=GeneratedCertificate.MODES.verified)

        encoded = get_encoded_cert_id('', unicode(self.course.id), user.id)

        response = self.client.get(reverse('short-cert-url', args=[encoded]))
        self.assertEqual(200, response.status_code)