def pytest_configure(config): from wonder.romeo import create_app, db app = create_app() app.test_client_class = FlaskRestClient app.app_context().push() if 'TEST_DATABASE_URL' in app.config: testdb_uri = app.config['SQLALCHEMY_DATABASE_URI'] = app.config['TEST_DATABASE_URL'] else: testdb_base_url = app.config.get('TEST_DATABASE_BASE_URL', 'postgresql:///') testdb = datetime.now().strftime('test_%Y%m%d%H%M%S') testdb_uri = app.config['SQLALCHEMY_DATABASE_URI'] = testdb_base_url + testdb try: db.create_all() except OperationalError as e: if 'does not exist' in e.message: config._testdb_uri = testdb_uri _create_db(testdb_uri) db.create_all() from .fixtures import loaddata loaddata()
def send_test_email(email_type, recipient, output=None): from wonder.romeo import db from wonder.romeo.video import forms as video_forms from wonder.romeo.account import forms as account_forms from wonder.romeo.account.models import ( Account, AccountUser, AccountUserConnection, RegistrationToken, InviteRequest) from wonder.romeo.video.models import ( Video, VideoThumbnail, VideoCollaborator, VideoComment) from wonder.romeo.admin import account as account_admin current_app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' current_app.config['ASSETS_URL'] = 'https://romeo.dev.wonderpl.com/static' if output: def _send_email(recipient, body): with open(output, 'w') as f: f.write(body) video_forms.send_email = account_forms.send_email =\ account_admin.send_email = _send_email def _create_test_data(): video = Video(title='test', status='ready') video.thumbnails = [VideoThumbnail(url='http://lorempixel.com/640/360/technics/2/', width=640, height=360)] video.collaborators = [VideoCollaborator(email=recipient, name='Vidkun Quisling')] account = Account(id=88888888, name='test') user0 = AccountUser(username=recipient, password_hash='', display_name='Maynard Cohen', avatar='cohen') user1 = AccountUser(username='******', password_hash='', display_name='Paul Hayes', avatar='hayes') account.users = [user0, user1] account.videos = [video] user0.connections = [AccountUserConnection(connection=user1)] user1.connections = [AccountUserConnection( connection=user0, message="Connect, collaborate, ... profit!")] db.session.add(account) db.session.flush() video.comments = [VideoComment(comment='I like this!', timestamp=10, user_type='collaborator', user_id=video.collaborators[0].id)] reg_tokens = [RegistrationToken.new(recipient).id] invite_request = InviteRequest(email=recipient, name='Maynard Cohen') db.session.add(invite_request) db.session.commit() return namedtuple('Data', 'video, account, reg_tokens, invite_request')( video, account, reg_tokens, invite_request) with current_app.test_request_context(): db.create_all() data = _create_test_data() emails = dict( invite_request=(account_forms.send_invite_request_ack_email, (data.invite_request.id,)), beta_invite=(account_admin.send_beta_invite_emails, (data.reg_tokens,)), welcome=(account_forms.send_welcome_email, (data.account.users[0].id,)), connect=(account_forms.send_connection_invite_email, (data.account.users[1].id, data.account.users[0].id)), acceptance=(account_forms.send_connection_acceptance_email, (data.account.users[1].id, data.account.users[0].id)), processed_error=(video_forms.send_processed_email, (data.video.id, 'Duplicate video content')), processed=(video_forms.send_processed_email, (data.video.id,)), published=(video_forms.send_published_email, (data.video.id, 'ch123', 'vi123')), invite=(video_forms.send_collaborator_invite_email, (data.video.collaborators[0].id, data.account.users[0].id)), comments=(video_forms.send_comment_notifications, (data.video.id, data.video.comments[0].user_type, data.video.comments[0].user_id)), ) try: f, args = emails[email_type] except KeyError: print >>sys.stderr, 'email_type must be one of: %s' % ', '.join(emails) else: f(*args)