Exemple #1
0
    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))
Exemple #2
0
    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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
    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))
Exemple #6
0
    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))
Exemple #7
0
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
Exemple #8
0
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
Exemple #9
0
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
Exemple #10
0
    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)
Exemple #11
0
    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)
Exemple #12
0
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
Exemple #13
0
 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
Exemple #14
0
    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)
Exemple #15
0
    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)
Exemple #16
0
    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)
Exemple #17
0
    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)
Exemple #18
0
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') 
Exemple #19
0
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')
Exemple #20
0
    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)
Exemple #21
0
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')
Exemple #22
0
    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)
Exemple #23
0
    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))
Exemple #24
0
    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)
Exemple #25
0
    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)
Exemple #26
0
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') 
Exemple #27
0
    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)
Exemple #28
0
    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)
Exemple #29
0
 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
Exemple #30
0
 def _build_submission(self):
     s = Submission(title='Hello world',
                    slug='hello-world',
                    description='This is a hello world demo',
                    creator=self.user)
     return s
Exemple #31
0
 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
Exemple #32
0
 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