Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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)