Added tag cubicweb-debian-version-3.15.8-1 for changeset 4ef457479337
# -*- coding: utf-8 -*-# copyright 2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr## This file is part of CubicWeb.## CubicWeb is free software: you can redistribute it and/or modify it under the# terms of the GNU Lesser General Public License as published by the Free# Software Foundation, either version 2.1 of the License, or (at your option)# any later version.## CubicWeb is distributed in the hope that it will be useful, but WITHOUT# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more# details.## You should have received a copy of the GNU Lesser General Public License along# with CubicWeb. If not, see <http://www.gnu.org/licenses/>.from__future__importwith_statementfromfunctoolsimportpartialfromlogilab.common.testlibimportunittest_mainfromcubicweb.devtools.testlibimportCubicWebTCfromcubicwebimportviewfromcubicweb.predicatesimportis_instanceclassIDownloadableTC(CubicWebTC):defsetUp(self):super(IDownloadableTC,self).setUp()classIDownloadableUser(view.EntityAdapter):__regid__='IDownloadable'__select__=is_instance('CWUser')defdownload_content_type(self):"""return MIME type of the downloadable content"""return'text/plain'defdownload_encoding(self):"""return encoding of the downloadable content"""return'ascii'defdownload_file_name(self):"""return file name of the downloadable content"""returnself.entity.name()+'.txt'defdownload_data(self):return'Babar is not dead!'self.vreg.register(IDownloadableUser)self.addCleanup(partial(self.vreg.unregister,IDownloadableUser))deftest_header_simple_case(self):req=self.request()req.form['vid']='download'req.form['eid']=str(req.user.eid)data=self.ctrl_publish(req,'view')get=req.headers_out.getRawHeadersself.assertEqual(['attachment;filename="admin.txt"'],get('content-disposition'))self.assertEqual(['text/plain;charset=ascii'],get('content-type'))self.assertEqual('Babar is not dead!',data)deftest_header_with_space(self):req=self.request()self.create_user(req,login=u'c c l a',password='babar')self.commit()withself.login(u'c c l a',password='babar'):req=self.request()req.form['vid']='download'req.form['eid']=str(req.user.eid)data=self.ctrl_publish(req,'view')get=req.headers_out.getRawHeadersself.assertEqual(['attachment;filename="c c l a.txt"'],get('content-disposition'))self.assertEqual(['text/plain;charset=ascii'],get('content-type'))self.assertEqual('Babar is not dead!',data)deftest_header_with_space_and_comma(self):req=self.request()self.create_user(req,login=ur'c " l\ a',password='babar')self.commit()withself.login(ur'c " l\ a',password='babar'):req=self.request()req.form['vid']='download'req.form['eid']=str(req.user.eid)data=self.ctrl_publish(req,'view')get=req.headers_out.getRawHeadersself.assertEqual([r'attachment;filename="c \" l\\ a.txt"'],get('content-disposition'))self.assertEqual(['text/plain;charset=ascii'],get('content-type'))self.assertEqual('Babar is not dead!',data)deftest_header_unicode_filename(self):req=self.request()self.create_user(req,login=u'cécilia',password='babar')self.commit()withself.login(u'cécilia',password='babar'):req=self.request()req.form['vid']='download'req.form['eid']=str(req.user.eid)self.ctrl_publish(req,'view')get=req.headers_out.getRawHeadersself.assertEqual(['''attachment;filename="ccilia.txt";filename*=utf-8''c%C3%A9cilia.txt'''],get('content-disposition'))deftest_header_unicode_long_filename(self):req=self.request()name=u'Bèrte_hô_grand_nôm_ça_va_totallement_déborder_de_la_limite_là'self.create_user(req,login=name,password='babar')self.commit()withself.login(name,password='babar'):req=self.request()req.form['vid']='download'req.form['eid']=str(req.user.eid)self.ctrl_publish(req,'view')get=req.headers_out.getRawHeadersself.assertEqual(["""attachment;filename="Brte_h_grand_nm_a_va_totallement_dborder_de_la_limite_l.txt";filename*=utf-8''B%C3%A8rte_h%C3%B4_grand_n%C3%B4m_%C3%A7a_va_totallement_d%C3%A9border_de_la_limite_l%C3%A0.txt"""],get('content-disposition'))if__name__=='__main__':unittest_main()