def test_init():
    """Test extension initialization."""
    app = Flask('testapp')
    ext = InvenioPages(app)
    assert 'invenio-pages' in app.extensions

    app = Flask('testapp')
    ext = InvenioPages()
    assert 'invenio-pages' not in app.extensions
    ext.init_app(app)
    assert 'invenio-pages' in app.extensions
示例#2
0
def test_current_app_and_config_not_visible(app):
    """Test current_app and config are not visible to template."""
    app.config.update(SECRET_KEY='super secret')
    InvenioPages(app)
    app.register_blueprint(blueprint)
    with app.app_context():
        page = Page(
            url='/dynamic',
            title='Dynamic page',
            content="{{SECRET_KEY}}",
            template_name='invenio_pages/dynamic.html',
        )
        db.session.add(page)
        db.session.commit()

        with app.test_request_context('/dynamic'):
            assert app.config['SECRET_KEY'] not in render_page('/dynamic')

            page.content = '{{config.SECRET_KEY}}'
            db.session.commit()
            with pytest.raises(UndefinedError):
                render_page('/dynamic')

            page.content = "{{current_app.config['SECRET_KEY']}}"
            db.session.commit()
            with pytest.raises(UndefinedError):
                render_page('/dynamic')
示例#3
0
def test_pre_existing_404_function(pages_fixture):
    """Test pre existing 404."""
    app = pages_fixture

    app.existing_called = False

    def existing_handler(error):
        current_app.existing_called = True
        return error

    app.register_error_handler(404, existing_handler)

    InvenioPages(app)
    app.register_blueprint(blueprint)

    with app.test_request_context('/runtime/added'):
        with app.test_client() as client:
            resp = client.get('/runtime/added')
            assert resp.status_code == 404
            assert app.existing_called

            new_page = Page(
                url='/runtime/added',
                title='Runtime added page!',
                content='added after initial page mapping.',
                template_name='invenio_pages/default.html',
            )
            db.session.add(new_page)
            db.session.commit()

            resp = client.get('/runtime/added')
            assert resp.status_code == 200
            assert 'added after initial page mapping.' in str(resp.get_data())
示例#4
0
def test_page_repr(pages_fixture):
    app = pages_fixture
    InvenioPages(app)
    app.register_blueprint(blueprint)

    with app.app_context():
        dog_page = Page.get_by_url('/dogs/shiba')
        assert dog_page.__repr__() == 'URL: /dogs/shiba, title: Page for doge!'
示例#5
0
def test_non_existing_page(pages_fixture):
    """Test non-existing page content."""
    app = pages_fixture
    InvenioPages(app)
    app.register_blueprint(blueprint)

    # render_page function
    with app.test_request_context('/invalid/url/errors'):
        with pytest.raises(NotFound):
            render_page('/invalid/url/errors')
示例#6
0
def test_page_content(pages_fixture):
    """Test page content."""
    app = pages_fixture
    InvenioPages(app)
    app.register_blueprint(blueprint)

    with app.app_context():
        with app.test_client() as client:
            resp = client.get('/dogs/shiba')
            assert resp.status_code == 200
            assert 'so doge!' in str(resp.get_data())
            assert 'so doge!' in str(render_page('/dogs/shiba'))
示例#7
0
def test_fixture_pages(app, script_info, db, client):
    """Test load pages fixtures."""
    InvenioPages(app)
    Page.query.delete()
    assert len(Page.query.all()) == 0
    about_response = client.get('/about')
    assert about_response.status_code == 404
    runner = CliRunner()
    res = runner.invoke(cli_pages, [], obj=script_info)
    assert res.exit_code == 0
    pages = Page.query.all()
    assert len(pages) == 6
    about_response = client.get('/about')
    assert about_response.status_code == 200
示例#8
0
def test_pages_admin(admin_fixture):
    """Test field validator."""
    app = admin_fixture
    InvenioPages(app)
    app.register_blueprint(blueprint)

    with app.test_request_context():
        with app.test_client() as client:
            resp = client.get('/admin/page/')
            assert resp.status_code == 200
            for page in Page.query.all():
                assert page.url in str(resp.get_data())
                assert page.title in str(resp.get_data())
            resp = client.get('/admin/page/new/')
            assert resp.status_code == 200
示例#9
0
def test_template_exists(app):
    """Test field validator."""
    InvenioPages(app)
    app.register_blueprint(blueprint)

    class Field(object):
        def __init__(self, data):
            self.data = data

    with app.app_context():
        with pytest.raises(ValidationError):
            template_exists(None, Field('inexistent_template'))
        template_exists(None, Field('invenio_pages/base.html'))
        template_exists(None, Field('invenio_pages/default.html'))
        template_exists(None, Field('invenio_pages/edit.html'))
示例#10
0
def test_page_versions(pages_fixture):
    app = pages_fixture
    InvenioPages(app)
    app.register_blueprint(blueprint)

    with app.app_context():
        dog_page = Page.get_by_url('/dogs')
        dog_page.title = 'Just a dog!'
        db.session.commit()

    with app.app_context():
        dog_page = Page.get_by_url('/dogs')
        assert 'Just a dog!' == dog_page.title
        assert 2 == dog_page.versions.count()
        assert 'Page for Dogs!' == dog_page.versions[0].title
示例#11
0
def test_init():
    """Test extension initialization."""
    app = Flask('testapp')
    ext = InvenioPages(app)
    assert 'invenio-pages' in app.extensions

    app = Flask('testapp')
    ext = InvenioPages()
    assert 'invenio-pages' not in app.extensions
    ext.init_app(app)
    assert 'invenio-pages' in app.extensions
示例#12
0
def pages_fixture(app):
    """Page fixtures."""
    InvenioPages(app)
    InvenioPagesREST(app)

    with app.app_context():
        pages = [
            Page(
                url='/dogs',
                title='Page for Dogs!',
                content='Generic dog.',
                template_name='invenio_pages/default.html',
            ),
            Page(
                url='/dogs/shiba',
                title='Page for doge!',
                content='so doge!',
                template_name='invenio_pages/default.html',
            ),
            Page(
                url='/cows/',
                title='Page for Cows!',
                content='Generic cow.',
                template_name='invenio_pages/default.html',
            ),
            Page(
                url='/htmldog',
                title='Page for modern dogs!',
                content='<h1>HTML aware dog.</h1>.\n'
                '<p class="test">paragraph<br /></p>',
                template_name='invenio_pages/default.html',
            ),
        ]
        for page in pages:
            db.session.add(page)
        db.session.commit()

    return app
示例#13
0
def test_runtime_added_page(pages_fixture):
    """Test runtime added page."""
    app = pages_fixture
    InvenioPages(app)
    app.register_blueprint(blueprint)

    with app.test_request_context('/runtime/added'):
        with app.test_client() as client:
            resp = client.get('/runtime/added')
            assert resp.status_code == 404

            new_page = Page(
                url='/runtime/added',
                title='Runtime added page!',
                content='added after initial page mapping.',
                template_name='invenio_pages/default.html',
            )
            db.session.add(new_page)
            db.session.commit()

            resp = client.get('/runtime/added')
            assert resp.status_code == 200
            assert 'added after initial page mapping.' in str(resp.get_data())
示例#14
0
def test_page_content_dynamic(app):
    """Test page content."""
    app.config['PAGES_WHITELIST_CONFIG_KEYS'] = ['MYVAR']
    InvenioPages(app)
    app.register_blueprint(blueprint)
    content = 'dynamic-content'
    with app.app_context():
        app.config['MYVAR'] = content
        page = Page(
            url='/dynamic',
            title='Dynamic page',
            content='{{MYVAR}}',
            template_name='invenio_pages/dynamic.html',
        )
        db.session.add(page)
        db.session.commit()

        with app.test_request_context('/dynamic'):
            assert content in render_page('/dynamic')

        with app.test_client() as client:
            resp = client.get('/dynamic')
            assert resp.status_code == 200
            assert content in resp.get_data(as_text=True)
示例#15
0
from invenio_pages.views import blueprint

# Create Flask application
app = Flask(__name__)

app.config.update(
    PAGES_TEMPLATES=[
        ('invenio_pages/default.html', 'Default'),
        ('app/mytemplate.html', 'App'),
    ],
    SQLALCHEMY_DATABASE_URI=os.getenv('SQLALCHEMY_DATABASE_URI',
                                      'sqlite:///app.db'),
)

InvenioDB(app)
InvenioPages(app)

app.register_blueprint(blueprint)


@app.cli.group()
def fixtures():
    """Command for working with test data."""


@fixtures.command()
def pages():
    """Load pages."""
    p1 = Page(
        url='/example1',
        title='My page with default template',