def test_generate_certificate_english(self): """ test the certificate download view (english) """ from c3smembership.membership_certificate import generate_certificate request = testing.DummyRequest() request.matchdict = { 'id': '2', 'name': 'foobar', 'token': 'hotzenplotz' } result = generate_certificate(request) if DEBUG: print(result) # check: this is *not* found because the token is *invalid* self.assertTrue(result.status_code == 404) # not found request.matchdict = { 'id': '2', 'name': 'foobar', 'token': 'hotzenplotz123' } member2 = C3sMember.get_by_id(2) member2.certificate_token = u'hotzenplotz123' # now the database matches the matchdict member2.certificate_email_date = datetime.now() - timedelta(weeks=1) member2.membership_accepted = True member2.membership_loss_date = date.today() - timedelta(days=1) result = generate_certificate(request) self.assertEqual(result.status_code, 404) member2.certificate_email_date = datetime.now() - timedelta(weeks=1) member2.membership_accepted = True member2.membership_loss_date = date.today() + timedelta(days=1) result = generate_certificate(request) self.assertEqual(result.status_code, 200) member2.certificate_email_date = datetime.now() - timedelta(weeks=1) member2.membership_accepted = True member2.membership_loss_date = None result = generate_certificate(request) if DEBUG: # pragma: no cover print("size of resulting certificate PDF here: {}".format( len(result.body))) print("min and max: {} {}".format( _min_PDF_size, _max_PDF_size)) self.assertTrue(_min_PDF_size < len(result.body) < _max_PDF_size) self.assertTrue(result.content_type == 'application/pdf')
def test_generate_certificate_founder(self): """ test the certificate download view (german) """ from c3smembership.membership_certificate import generate_certificate request = testing.DummyRequest() request.matchdict = { 'id': '3', 'name': 'foobar', 'token': 'hotzenplotz123' } member = C3sMember.get_by_id(3) member.certificate_token = u'hotzenplotz123' member.membership_accepted = True # need to get the date right! member.certificate_email_date = datetime.now( ) - timedelta(weeks=1) result = generate_certificate(request) # print result.body self.assertTrue(_min_PDF_size < len(result.body) < _max_PDF_size) self.assertTrue(result.content_type == 'application/pdf') # edge case: member has one share member.certificate_token = u'hotzenplotz123' member.num_shares = 1 result = generate_certificate(request) self.assertTrue(_min_PDF_size < len(result.body) < _max_PDF_size) self.assertTrue(result.content_type == 'application/pdf') # edge case: member has one share member.certificate_token = u'hotzenplotz123' member.is_legalentity = True result = generate_certificate(request) member.locale = u'de' result = generate_certificate(request) if DEBUG: # pragma: no cover print("size of resulting certificate PDF: {}".format( len(result.body))) self.assertTrue(_min_PDF_size < len(result.body) < _max_PDF_size) self.assertTrue(result.content_type == 'application/pdf')
def test_generate_certificate_awkward_characters(self): """ test the certificate generation with awkward characters in datasets because LaTeX interprets some characters as special characters. """ from c3smembership.membership_certificate import generate_certificate request = testing.DummyRequest() request.matchdict = { 'id': '1', 'name': 'foobar', 'token': 'hotzenplotz' } result = generate_certificate(request) self.assertTrue(result.status_code == 404) # not found request.matchdict = { 'id': '1', 'name': 'foobar', 'token': 'hotzenplotz123' } member = C3sMember.get_by_id(1) member.firstname = u"Foobar Corp & Co." member.lastname = u"Your Number #1" member.certificate_token = u'hotzenplotz123' member.membership_accepted = True # # need to get the date right! member.certificate_email_date = datetime.now( ) - timedelta(weeks=1) result = generate_certificate(request) if DEBUG: # pragma: no cover print("size of resulting certificate PDF: {}".format( len(result.body))) self.assertTrue(_min_PDF_size < len(result.body) < _max_PDF_size) self.assertTrue(result.content_type == 'application/pdf')