Source code for oriole_service.test
#
# __ _,--="=--,_ __
# / \." .-. "./ \
# / ,/ _ : : _ \/` \
# \ `| /o\ :_: /o\ |\__/
# `-'| :="~` _ `~"=: |
# \` (_) `/
# .-"-. \ | / .-"-.
# .-----{ }--| /,.-'-.,\ |--{ }-----.
# ) (_)_)_) \_/`~-===-~`\_/ (_(_(_) (
# ( )
# ) Oriole-TEST (
# ( Eric.Zhou )
# '-------------------------------------------'
#
from oriole_service.db import *
from dao import *
import mongomock
from mock import *
from pytest import *
from mockredis import *
from nameko.testing.services import worker_factory
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from oriole_service.api import get_config
[docs]@fixture
def app(monkeypatch):
class _Base:
""" App interface """
def duck(self, patch):
app_base = "oriole_service.app.App."
log_base = "oriole_service.log.Log."
log_method = "get"
methods = ["rs", "db", "init"]
for old, new in zip(methods, [self.rs, self.db, self.init]):
patch.setattr(app_base + old, new())
patch.setattr(log_base + log_method, self.mongo)
def create(self, name):
return worker_factory(name)
class App(_Base):
""" Supply database """
def __init__(self, patch):
self.duck(patch)
def init(self):
return lambda self: None
def mongo(self):
return mongomock.MongoClient().db.collection
def rs(self):
return mock_redis_client()
def db(self):
self.bind = create_engine(get_config().get("test_database"))
Base.metadata.create_all(self.bind)
session_cls = sessionmaker(self.bind)
self.session = session_cls()
return self.session
def close(self):
self.session.rollback()
self.session.commit()
self.session.close()
Base.metadata.drop_all(self.bind)
self.bind.dispose()
# Supply database and redis to test.
_app = App(monkeypatch)
# Only supply app to create service.
# Don't create service by class directly, it's wrong.
yield _app
_app.close()