Source code for fireblog.tests.conftest

import pytest
import transaction
import requests
import os
import datetime
import webtest
from pyramid import testing
from fireblog import include_all_components
from sqlalchemy import create_engine
from fireblog.models import (
    DBSession, Base, Post, Users, Tags, Comments, Settings
)
from fireblog.dogpile_region import region
import fireblog

# Get all available themes
theme_folder = os.path.join(os.path.dirname(__file__), '../templates')
available_themes = next(os.walk(theme_folder))[1]


[docs]def clear_dogpile_region(): region.backend._cache = {}
@pytest.fixture(params=available_themes, scope='session')
[docs]def theme(request): return request.param
@pytest.fixture(scope='session')
[docs]def test_with_one_theme(theme): if theme != 'bootstrap': pytest.skip("This test doesn't need to be run against all themes.")
@pytest.fixture(scope='session')
[docs]def persona_test_admin_login(): data = requests.get( 'http://personatestuser.org/email_with_assertion/' 'http%3A%2F%2Flocalhost') data = data.json() res = {} res['email'] = data['email'] res['assertion'] = data['assertion'] return res
@pytest.fixture
[docs]def pyramid_req(): res = testing.DummyRequest() res.registry.settings.update({'dogpile_cache.backend': 'memory'}) return res
@pytest.fixture
[docs]def mydb(request, persona_test_admin_login, theme): engine = create_engine('sqlite://') DBSession.configure(bind=engine) Base.metadata.create_all(engine) with transaction.manager: tag1 = Tags(tag='tag1', uuid='uuid-tag111') tag2 = Tags(tag='tag2', uuid='uuid-tag222') tag3 = Tags(tag='tag3', uuid='uuid-tag333') DBSession.add(tag1) DBSession.add(tag2) DBSession.add(tag3) post = Post(id=1, name='Homepage', markdown='This is the front page', html='<p>This is the front page</p>', created=datetime.datetime(2013, 1, 1), uuid='uuid-post-homepage') post.tags.append(tag1) DBSession.add(post) post2 = Post(id=2, name='Page2 1*2', # Spaces and * test utils.urlify func. markdown='This is page 2', html='<p>This is page 2</p>', created=datetime.datetime(2014, 1, 1), uuid='uuid-post-page2') post2.tags.extend([tag1, tag2]) DBSession.add(post2) with transaction.manager: me = Users(userid='id5489746@mockmyid.com', group='g:admin') him = Users(userid=persona_test_admin_login['email'], group='g:admin') commenter = Users(userid='commenter@example.com', group='g:commenter') DBSession.add(me) DBSession.add(him) DBSession.add(commenter) with transaction.manager: comment1 = Comments(created=datetime.datetime(2014, 1, 1), comment='test comment', uuid='comment1-uuid') comment1.post = post comment1.author = me DBSession.add(comment1) with transaction.manager: settings_map = ( ('fireblog.max_rss_items', '100'), ('fireblog.all_view_post_len', '1000'), ('persona.siteName', 'sitename'), ('persona.secret', 'seekret'), ('persona.audiences', 'http://localhost'), ('fireblog.recaptcha_secret', 'secretsecretsecretsecretsecretsecretsecr'), ('fireblog.recaptcha_site_key', 'secretsecretsecretsecretsecretsecretsecr'), ('fireblog.theme', theme)) settings = [Settings(name=x, value=y) for x, y in settings_map] for e in settings: DBSession.add(e) def fin(): DBSession.remove() request.addfinalizer(fin) return DBSession
@pytest.fixture
[docs]def pyramid_config(mydb, request): config = testing.setUp() config.include('pyramid_mako') include_all_components(config) mydb.rollback() mydb.begin(subtransactions=True) clear_dogpile_region() def fin(): testing.tearDown() mydb.rollback() clear_dogpile_region() request.addfinalizer(fin) return config
@pytest.fixture
[docs]def setup_testapp(mydb, request): settings = {'sqlalchemy.url': 'sqlite://', 'persona.audiences': 'http://localhost', 'persona.secret': 'some_secret', 'dogpile_cache.backend': 'memory', 'fireblog.all_view_post_len': 1000, # max_rss_items is set as a str to test that # the rss view converts it to an int 'fireblog.max_rss_items': '100', 'fireblog.recaptcha_secret': 's' * 40, 'fireblog.recaptcha_site_key': 's' * 40} mydb.rollback() app = fireblog.main({}, **settings) return webtest.TestApp(app)
@pytest.fixture
[docs]def testapp(request, mydb, setup_testapp): testapp = setup_testapp mydb.begin(subtransactions=True) clear_dogpile_region() def fin(): mydb.rollback() clear_dogpile_region() request.addfinalizer(fin) return testapp