Files @ 6af3e67cc576
Branch filter:

Location: kallithea/rhodecode/tests/functional/test_admin_gists.py - annotation

Bradley M. Kuhn
Add Twitter's Bootstrap 3.0.0 CSS and Javascript files, under Apache License 2.0

These files are exactly as they appear the upstream release 3.0.0 of
Bootstrap, which Twitter released under the Apache License 2.0. To extract
these files, I did the following:

I downloaded the following file:
https://github.com/twbs/bootstrap/archive/v3.0.0.zip

with sha256sum of:
$ sha256sum v3.0.0.zip
2d54f345f4abc6bf65ea648c323e9bae577e6febf755650e62555f2d7a222e17 v3.0.0.zip

And extracted from it these two files:
bootstrap-3.0.0/dist/css/bootstrap.css
bootstrap-3.0.0/dist/js/bootstrap.js
which are licensed under the Apache License 2.0.

and placed them into:
rhodecode/public/css/bootstrap.css
rhodecode/public/js/bootstrap.js
respectively.
ec64c396da8c
ec64c396da8c
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
ad4a680113b7
ad4a680113b7
dc4644865e8b
dc4644865e8b
dc4644865e8b
ad4a680113b7
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
b4fc29a051ae
b4fc29a051ae
b4fc29a051ae
b4fc29a051ae
dc4644865e8b
dc4644865e8b
ffd45b185016
ffd45b185016
dc4644865e8b
ffd45b185016
dc4644865e8b
ffd45b185016
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
ffd45b185016
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
ffd45b185016
dc4644865e8b
2576a20d94ca
2576a20d94ca
2576a20d94ca
2576a20d94ca
2576a20d94ca
2576a20d94ca
2576a20d94ca
2576a20d94ca
2576a20d94ca
2576a20d94ca
ec64c396da8c
ec64c396da8c
ec64c396da8c
ec64c396da8c
ec64c396da8c
ec64c396da8c
ec64c396da8c
1fdec7e3aeb2
ec64c396da8c
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
ffd45b185016
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
ffd45b185016
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
dc4644865e8b
1fdec7e3aeb2
dc4644865e8b
dc4644865e8b
ad4a680113b7
ad4a680113b7
1fdec7e3aeb2
ad4a680113b7
ad4a680113b7
ad4a680113b7
ad4a680113b7
ad4a680113b7
1fdec7e3aeb2
ad4a680113b7
ad4a680113b7
ad4a680113b7
ad4a680113b7
ad4a680113b7
1fdec7e3aeb2
dc4644865e8b
dc4644865e8b
dc4644865e8b
1fdec7e3aeb2
dc4644865e8b
54bc7a89f090
dc4644865e8b
ffd45b185016
dc4644865e8b
4b0d283ecede
4b0d283ecede
4b0d283ecede
4b0d283ecede
4b0d283ecede
4b0d283ecede
4b0d283ecede
4b0d283ecede
4b0d283ecede
4b0d283ecede
4b0d283ecede
4b0d283ecede
4b0d283ecede
dc4644865e8b
1fdec7e3aeb2
import datetime

from rhodecode.tests import *
from rhodecode.model.gist import GistModel
from rhodecode.model.meta import Session
from rhodecode.model.db import User, Gist


def _create_gist(f_name, content='some gist', lifetime=-1,
                 description='gist-desc', gist_type='public',
                 owner=TEST_USER_ADMIN_LOGIN):
    gist_mapping = {
        f_name: {'content': content}
    }
    user = User.get_by_username(owner)
    gist = GistModel().create(description, owner=user,
                       gist_mapping=gist_mapping, gist_type=gist_type,
                       lifetime=lifetime)
    Session().commit()
    return gist


class TestGistsController(TestController):

    def tearDown(self):
        for g in Gist.get_all():
            GistModel().delete(g)
        Session().commit()

    def test_index(self):
        self.log_user()
        response = self.app.get(url('gists'))
        # Test response...
        response.mustcontain('There are no gists yet')

        g1 = _create_gist('gist1').gist_access_id
        g2 = _create_gist('gist2', lifetime=1400).gist_access_id
        g3 = _create_gist('gist3', description='gist3-desc').gist_access_id
        g4 = _create_gist('gist4', gist_type='private').gist_access_id
        response = self.app.get(url('gists'))
        # Test response...
        response.mustcontain('gist: %s' % g1)
        response.mustcontain('gist: %s' % g2)
        response.mustcontain('Expires: in 23 hours')  # we don't care about the end
        response.mustcontain('gist: %s' % g3)
        response.mustcontain('gist3-desc')
        response.mustcontain(no=['gist: %s' % g4])

    def test_index_private_gists(self):
        self.log_user()
        gist = _create_gist('gist5', gist_type='private')
        response = self.app.get(url('gists', private=1))
        # Test response...

        #and privates
        response.mustcontain('gist: %s' % gist.gist_access_id)

    def test_create_missing_description(self):
        self.log_user()
        response = self.app.post(url('gists'),
                                 params={'lifetime': -1}, status=200)

        response.mustcontain('Missing value')

    def test_create(self):
        self.log_user()
        response = self.app.post(url('gists'),
                                 params={'lifetime': -1,
                                         'content': 'gist test',
                                         'filename': 'foo',
                                         'public': 'public'},
                                 status=302)
        response = response.follow()
        response.mustcontain('added file: foo')
        response.mustcontain('gist test')
        response.mustcontain('<div class="btn btn-mini btn-success disabled">Public Gist</div>')

    def test_create_with_path_with_dirs(self):
        self.log_user()
        response = self.app.post(url('gists'),
                                 params={'lifetime': -1,
                                         'content': 'gist test',
                                         'filename': '/home/foo',
                                         'public': 'public'},
                                 status=200)
        response.mustcontain('Filename cannot be inside a directory')

    def test_access_expired_gist(self):
        self.log_user()
        gist = _create_gist('never-see-me')
        gist.gist_expires = 0  # 1970
        Session().add(gist)
        Session().commit()

        response = self.app.get(url('gist', gist_id=gist.gist_access_id), status=404)

    def test_create_private(self):
        self.log_user()
        response = self.app.post(url('gists'),
                                 params={'lifetime': -1,
                                         'content': 'private gist test',
                                         'filename': 'private-foo',
                                         'private': 'private'},
                                 status=302)
        response = response.follow()
        response.mustcontain('added file: private-foo<')
        response.mustcontain('private gist test')
        response.mustcontain('<div class="btn btn-mini btn-warning disabled">Private Gist</div>')

    def test_create_with_description(self):
        self.log_user()
        response = self.app.post(url('gists'),
                                 params={'lifetime': -1,
                                         'content': 'gist test',
                                         'filename': 'foo-desc',
                                         'description': 'gist-desc',
                                         'public': 'public'},
                                 status=302)
        response = response.follow()
        response.mustcontain('added file: foo-desc')
        response.mustcontain('gist test')
        response.mustcontain('gist-desc')
        response.mustcontain('<div class="btn btn-mini btn-success disabled">Public Gist</div>')

    def test_new(self):
        self.log_user()
        response = self.app.get(url('new_gist'))

    def test_update(self):
        self.skipTest('not implemented')
        response = self.app.put(url('gist', gist_id=1))

    def test_delete(self):
        self.log_user()
        gist = _create_gist('delete-me')
        response = self.app.delete(url('gist', gist_id=gist.gist_id))
        self.checkSessionFlash(response, 'Deleted gist %s' % gist.gist_id)

    def test_delete_normal_user_his_gist(self):
        self.log_user(TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS)
        gist = _create_gist('delete-me', owner=TEST_USER_REGULAR_LOGIN)
        response = self.app.delete(url('gist', gist_id=gist.gist_id))
        self.checkSessionFlash(response, 'Deleted gist %s' % gist.gist_id)

    def test_delete_normal_user_not_his_own_gist(self):
        self.log_user(TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS)
        gist = _create_gist('delete-me')
        response = self.app.delete(url('gist', gist_id=gist.gist_id), status=403)

    def test_show(self):
        gist = _create_gist('gist-show-me')
        response = self.app.get(url('gist', gist_id=gist.gist_access_id))
        response.mustcontain('added file: gist-show-me<')
        response.mustcontain('test_admin (RhodeCode Admin) - created')
        response.mustcontain('gist-desc')
        response.mustcontain('<div class="btn btn-mini btn-success disabled">Public Gist</div>')

    def test_show_as_raw(self):
        gist = _create_gist('gist-show-me', content='GIST CONTENT')
        response = self.app.get(url('formatted_gist',
                                    gist_id=gist.gist_access_id, format='raw'))
        self.assertEqual(response.body, 'GIST CONTENT')

    def test_show_as_raw_individual_file(self):
        gist = _create_gist('gist-show-me-raw', content='GIST BODY')
        response = self.app.get(url('formatted_gist_file',
                                    gist_id=gist.gist_access_id, format='raw',
                                    revision='tip', f_path='gist-show-me-raw'))
        self.assertEqual(response.body, 'GIST BODY')

    def test_edit(self):
        response = self.app.get(url('edit_gist', gist_id=1))