def test_demo_deletion(self): """Ensure that demo files are deleted along with submission record""" fout = StringIO() zf = zipfile.ZipFile(fout, 'w') zf.writestr('demo.html', """<html></html""") zf.writestr('css/main.css', 'h1 { color: red }') zf.writestr('js/main.js', 'alert("HELLO WORLD");') zf.close() s = Submission(title='Hello world', slug='hello-world', description='This is a hello world demo', creator=self.user) s.demo_package.save('play_demo.zip', ContentFile(fout.getvalue())) s.demo_package.close() s.clean() s.save() s.process_demo_package() path = s.demo_package.path.replace('.zip', '') ok_(isdir(path)) ok_(isfile('%s/index.html' % path)) ok_(isfile('%s/css/main.css' % path)) ok_(isfile('%s/js/main.js' % path)) s.delete() ok_(not isfile('%s/index.html' % path)) ok_(not isfile('%s/css/main.css' % path)) ok_(not isfile('%s/js/main.js' % path)) ok_(not isdir(path))
def _build_hidden_submission(self, slug): now = str(datetime.datetime.now()) s = Submission(title='Hidden submission 1' + now, slug=slug + now, description='This is a hidden demo', hidden=True, creator=self.other_user) s.save() return s
def build_submission(creator): now = str(datetime.datetime.now()) s = Submission(title='Hello world' + now, slug='hello-world' + now, description='This is a hello world demo', hidden=False, creator=creator) s.save() return s
def build_hidden_submission(creator, slug='hidden-world'): now = str(datetime.datetime.now()) s = Submission(title='Hidden submission 1' + now, slug=slug + now, description='This is a hidden demo', hidden=True, creator=creator) s.save() return s
def test_censored_demo_files_are_deleted(self): """Demo files should be deleted when the demo is censored.""" fout = StringIO() zf = zipfile.ZipFile(fout, 'w') zf.writestr('demo.html', """<html></html""") zf.writestr('css/main.css', 'h1 { color: red }') zf.writestr('js/main.js', 'alert("HELLO WORLD");') zf.close() s = Submission(title='Hello world', slug='hello-world', description='This is a hello world demo', creator=self.user) s.demo_package.save('play_demo.zip', ContentFile(fout.getvalue())) s.demo_package.close() s.clean() s.save() s.process_demo_package() path = s.demo_package.path.replace('.zip', '') ok_(isdir(path)) ok_(isfile(s.demo_package.path)) ok_(isfile('%s/index.html' % path)) ok_(isfile('%s/css/main.css' % path)) ok_(isfile('%s/js/main.js' % path)) s.censor(url="http://example.com/censored-explanation") ok_(not isfile(s.demo_package.path)) ok_(not isfile('%s/index.html' % path)) ok_(not isfile('%s/css/main.css' % path)) ok_(not isfile('%s/js/main.js' % path)) ok_(not isdir(path))
def build_submission(creator): now = str(datetime.datetime.now()) s = Submission( title="Hello world" + now, slug="hello-world" + now, description="This is a hello world demo", hidden=False, creator=creator, ) s.save() return s
def build_hidden_submission(creator, slug="hidden-world"): now = str(datetime.datetime.now()) s = Submission( title="Hidden submission 1" + now, slug=slug + now, description="This is a hidden demo", hidden=True, creator=creator, ) s.save() return s
def save_valid_submission(title="hello world", desc="This is a hello world demo"): testuser = User.objects.get(username="******") s = Submission(title=title, slug=slugify(title), description=desc, summary=desc, creator=testuser) fout = StringIO() zf = zipfile.ZipFile(fout, "w") zf.writestr("index.html", """<html> </html>""") zf.close() s.demo_package.save("play_demo.zip", ContentFile(fout.getvalue())) s.screenshot_1.save( "screenshot_1.jpg", ContentFile(open("%s/fixtures/screenshot_1.png" % (dirname(dirname(__file__)),)).read()) ) s.save() return s
def test_demo_unicode_filenames(self): """Bug 741660: Demo package containing filenames with non-ASCII characters works""" fout = StringIO() zf = zipfile.ZipFile(fout, 'w') zf.writestr('demo.html', """<html></html""") zf.writestr('css/예제.css', 'h1 { color: red }') zf.writestr('js/示例.js', 'alert("HELLO WORLD");') zf.close() s = Submission(title='Hello world', slug='hello-world', description='This is a hello world demo', creator=self.user) s.demo_package.save('play_demo.zip', ContentFile(fout.getvalue())) s.demo_package.close() s.clean() s.save() s.process_demo_package() path = s.demo_package.path.replace('.zip', '') ok_(isdir(path)) ok_(isfile((u'%s/index.html' % path).encode('utf-8'))) ok_(isfile((u'%s/css/예제.css' % path).encode('utf-8'))) ok_(isfile((u'%s/js/示例.js' % path).encode('utf-8'))) rmtree(path)
def test_demo_html_normalized(self): """Ensure a demo.html in zip file is normalized to index.html when unpacked""" fout = StringIO() zf = zipfile.ZipFile(fout, 'w') zf.writestr('demo.html', """<html></html""") zf.writestr('css/main.css', 'h1 { color: red }') zf.writestr('js/main.js', 'alert("HELLO WORLD");') zf.close() s = Submission(title='Hello world', slug='hello-world', description='This is a hello world demo', creator=self.user) s.demo_package.save('play_demo.zip', ContentFile(fout.getvalue())) s.demo_package.close() s.clean() s.save() s.process_demo_package() path = s.demo_package.path.replace('.zip', '') ok_(isdir(path)) ok_(isfile('%s/index.html' % path)) ok_(isfile('%s/css/main.css' % path)) ok_(isfile('%s/js/main.js' % path)) rmtree(path)
def save_valid_submission(title='hello world'): testuser = User.objects.get(username='******') s = Submission(title=title, slug=slugify(title), description='This is a hello world demo', creator=testuser) fout = StringIO() zf = zipfile.ZipFile(fout, 'w') zf.writestr('index.html', """<html> </html>""") zf.close() s.demo_package.save('play_demo.zip', ContentFile(fout.getvalue())) s.screenshot_1.save('screenshot_1.jpg', ContentFile(open( '%s/fixtures/screenshot_1.png' % ( dirname(dirname(__file__)), ) ).read())) s.save() return s
def get_queryset(self): submissions = Submission.objects.all_sorted( self.request.GET.get('sort', 'created') ) if not Submission.allows_listing_hidden_by(self.request.user): submissions = submissions.exclude(hidden=True) return submissions
def test_demo_html_normalized(self): """Ensure a demo.html in zip file is normalized to index.html when unpacked""" fout = StringIO() zf = zipfile.ZipFile(fout, "w") zf.writestr("demo.html", """<html></html""") zf.writestr("css/main.css", "h1 { color: red }") zf.writestr("js/main.js", 'alert("HELLO WORLD");') zf.close() s = Submission( title="Hello world", slug="hello-world", description="This is a hello world demo", tags="hello,world,demo,play", creator=self.user, ) s.demo_package.save("play_demo.zip", ContentFile(fout.getvalue())) s.demo_package.close() s.clean() s.save() s.process_demo_package() path = s.demo_package.path.replace(".zip", "") ok_(isdir(path)) ok_(isfile("%s/index.html" % path)) ok_(isfile("%s/css/main.css" % path)) ok_(isfile("%s/js/main.js" % path)) rmtree(path)
def test_demo_package_no_files(self): """Demo package with no files is invalid""" s = Submission(title='Hello world', slug='hello-world', description='This is a hello world demo', video_url='http://www.youtube.com/watch?v=dQw4w9WgXcQ', creator=self.user) fout = StringIO() zf = zipfile.ZipFile(fout, 'w') zf.close() s.demo_package.save('play_demo.zip', ContentFile(fout.getvalue())) try: s.clean() ok_(False, "There should be a validation exception") except ValidationError, e: ok_('ZIP file contains no acceptable files' in e.messages)
def home(request): """Home page.""" featured_submissions = Submission.objects.order_by('-modified').filter(featured=True) if not Submission.allows_listing_hidden_by(request.user): featured_submissions = featured_submissions.exclude(hidden=True) submissions = Submission.objects.all_sorted(request.GET.get('sort', 'created')) if not Submission.allows_listing_hidden_by(request.user): submissions = submissions.exclude(hidden=True) return object_list(request, submissions, extra_context={ 'featured_submission_list': featured_submissions, }, paginate_by=DEMOS_PAGE_SIZE, allow_empty=True, template_loader=template_loader, template_object_name='submission', template_name='demos/home.html')
def all(request): """Browse all demo submissions""" sort_order = request.GET.get('sort', 'created') queryset = Submission.objects.all_sorted(sort_order) if not Submission.allows_listing_hidden_by(request.user): queryset = queryset.exclude(hidden=True) return object_list(request, queryset, paginate_by=DEMOS_PAGE_SIZE, allow_empty=True, template_loader=template_loader, template_object_name='submission', template_name='demos/listing_all.html')
def test_demo_package_no_files(self): """Demo package with no files is invalid""" s = Submission( title="Hello world", slug="hello-world", description="This is a hello world demo", video_url="http://www.youtube.com/watch?v=dQw4w9WgXcQ", tags="hello,world,demo,play", creator=self.user, ) fout = StringIO() zf = zipfile.ZipFile(fout, "w") zf.close() s.demo_package.save("play_demo.zip", ContentFile(fout.getvalue())) try: s.clean() ok_(False, "There should be a validation exception") except ValidationError, e: ok_("ZIP file contains no acceptable files" in e.messages)
def test_process_demo_package(self): """ Calling process_demo_package() should result in a directory of demo files """ fout = StringIO() zf = zipfile.ZipFile(fout, 'w') zf.writestr( 'index.html', """<html> <head> <link rel="stylesheet" href="css/main.css" type="text/css" /> </head> <body> <h1>Hello world</h1> <script type="text/javascript" src="js/main.js"></script> </body> </html>""") zf.writestr('css/main.css', 'h1 { color: red }') zf.writestr('js/main.js', 'alert("HELLO WORLD");') zf.close() s = Submission(title='Hello world', slug='hello-world', description='This is a hello world demo', creator=self.user) s.demo_package.save('play_demo.zip', ContentFile(fout.getvalue())) s.demo_package.close() s.clean() s.save() s.process_demo_package() path = s.demo_package.path.replace('.zip', '') ok_(isdir(path)) ok_(isfile('%s/index.html' % path)) ok_(isfile('%s/css/main.css' % path)) ok_(isfile('%s/js/main.js' % path)) rmtree(path)
def test_process_demo_package(self): """Calling process_demo_package() should result in a directory of demo files""" fout = StringIO() zf = zipfile.ZipFile(fout, "w") zf.writestr( "index.html", """<html> <head> <link rel="stylesheet" href="css/main.css" type="text/css" /> </head> <body> <h1>Hello world</h1> <script type="text/javascript" src="js/main.js"></script> </body> </html>""", ) zf.writestr("css/main.css", "h1 { color: red }") zf.writestr("js/main.js", 'alert("HELLO WORLD");') zf.close() s = Submission( title="Hello world", slug="hello-world", description="This is a hello world demo", tags="hello,world,demo,play", creator=self.user, ) s.demo_package.save("play_demo.zip", ContentFile(fout.getvalue())) s.demo_package.close() s.clean() s.save() s.process_demo_package() path = s.demo_package.path.replace(".zip", "") ok_(isdir(path)) ok_(isfile("%s/index.html" % path)) ok_(isfile("%s/css/main.css" % path)) ok_(isfile("%s/js/main.js" % path)) rmtree(path)
def test_process_demo_package(self): """ Calling process_demo_package() should result in a directory of demo files """ fout = StringIO() zf = zipfile.ZipFile(fout, 'w') zf.writestr('index.html', """<html> <head> <link rel="stylesheet" href="css/main.css" type="text/css" /> </head> <body> <h1>Hello world</h1> <script type="text/javascript" src="js/main.js"></script> </body> </html>""") zf.writestr('css/main.css', 'h1 { color: red }') zf.writestr('js/main.js', 'alert("HELLO WORLD");') zf.close() s = Submission(title='Hello world', slug='hello-world', description='This is a hello world demo', creator=self.user) s.demo_package.save('play_demo.zip', ContentFile(fout.getvalue())) s.demo_package.close() s.clean() s.save() s.process_demo_package() path = s.demo_package.path.replace('.zip', '') ok_(isdir(path)) ok_(isfile('%s/index.html' % path)) ok_(isfile('%s/css/main.css' % path)) ok_(isfile('%s/js/main.js' % path)) rmtree(path)
def home(request): """Home page.""" featured_submissions = Submission.objects.filter(featured=True)\ .exclude(hidden=True)\ .order_by('-modified').all()[:3] submissions = Submission.objects.all_sorted(request.GET.get('sort', 'created')) if not Submission.allows_listing_hidden_by(request.user): submissions = submissions.exclude(hidden=True) return object_list(request, submissions, extra_context={ 'featured_submission_list': featured_submissions, }, paginate_by=DEMOS_PAGE_SIZE, allow_empty=True, template_loader=template_loader, template_object_name='submission', template_name='demos/home.html')
def test_demo_unicode_filenames_2(self): """Bug 741660: Try testing a real .zip with non-ASCII filenames""" zip_fn = '%s/fixtures/css3_clock.zip' % dirname(dirname(__file__)) zf = zipfile.ZipFile(zip_fn) s = Submission(title='Hello world', slug='hello-world', description='This is a hello world demo', creator=self.user) s.demo_package.save('play_demo.zip', ContentFile(open(zip_fn).read())) s.demo_package.close() s.clean() s.save() s.process_demo_package() path = s.demo_package.path.replace('.zip', '') ok_(isdir(path)) ok_(isfile((u'%s/stylé.css' % path).encode('utf-8'))) rmtree(path)
def get_queryset(self): submissions = Submission.objects.all_sorted( self.request.GET.get('sort', 'created')) if not Submission.allows_listing_hidden_by(self.request.user): submissions = submissions.exclude(hidden=True) return submissions
def _build_submission(self): s = Submission(title='Hello world', slug='hello-world', description='This is a hello world demo', creator=self.user) return s
def get_queryset(self): sort_order = self.request.GET.get('sort', 'created') queryset = Submission.objects.all_sorted(sort_order) if not Submission.allows_listing_hidden_by(self.request.user): queryset = queryset.exclude(hidden=True) return queryset