макет спецификации c объект в графене python - PullRequest
0 голосов
/ 16 июня 2020

Вот моя схема и модели -

models.py

from sqlalchemy import Column, , Integer, String, DateTime, Float
from sqlalchemy.orm import (scoped_session, sessionmaker, relationship,
                            backref)
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine(conn_string, convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))

Base = declarative_base()
# We will need this for querying
Base.query = db_session.query_property()



class SObjectives(Base):
    __tablename__ = 'sos_t'
    id = Column(Integer, primary_key=True)
    soText = Column('so_text',String)
    soDescription = Column('so_description',String)

schema.py

from models import SObjectives

class SOSQuery(graphene.ObjectType):
    spa_SO = graphene.List(SObjectives)


    def resolve_spa_SO(self, info):
        query = SObjectives.get_query(info)
        return query.all()

и вот мой тестовый пример

def test_grantsQuery():

    with patch('schema.SOSQuery') as mock_sosquery:
        client = Client(schema)
        executed = client.execute("""    
                        query {
                        SO {
                            id
                            soName
                            soText
                            soDescription
                            }                
                        }    
                    """)

        print('executed - ', executed)

Теперь мне нужно смоделировать движок sqlalchemy в models.py, чтобы можно было смоделировать ответ fetchall.

что-то вроде этого -

что я должен исправлять 'модели .engine 'или' schema.models.SObjectives '(не знаю, как я имитирую движок.

mock_sqlalchemy_engine.return_value.execute.return_value.fetchall.return_value = [(1, 'John'),
                                                                                          (2, 'Tom'),
                                                                                          (3, 'Matt')]
...