Exemplo n.º 1
0
def test_update_resource2(model, session):
    # save the example model to the db
    session.add(model)
    session.commit()
    # update it so some related models should be added, updated and removed
    alchemy = AlchemyMixin()
    other_model = session.query(OtherModel).get(2)
    data = {
        'name':
        'other_model1_prim2',
        'third_models': [
            {
                'id': 4,
                'other_model_id': 2,
                'name': 'third_model1_prim',
            },
            # have to include second model even without change because otherwise it would get removed
            # and one to many objects cannot be disassociated (not null constraint on FK)
            {
                'id': 5,
                'other_model_id': 2,
                'name': 'third_model2',
            }
        ]
    }
    alchemy.save_resource(other_model, data, session)
    session.commit()
    other_model = session.query(OtherModel).get(2)
    assert other_model.name == 'other_model1_prim2'
    assert other_model.third_models[0].name == 'third_model1_prim'
    assert other_model.third_models[1].name == 'third_model2'
Exemplo n.º 2
0
def test_save_resource(session):
    alchemy = AlchemyMixin()
    data = {
        'name':
        'model',
        'other_models': [
            {
                'name':
                'other_model1',
                'third_models': [
                    {
                        'name': 'third_model1',
                    },
                    {
                        'name': 'third_model2',
                    },
                ],
            },
            {
                'name': 'other_model2',
            },
        ],
    }
    new_model = Model()
    alchemy.save_resource(new_model, data, session)
    existing_model = session.query(Model).filter(Model.name == 'model').first()
    assert existing_model.name == data['name']
    assert existing_model.other_models[0].name == data['other_models'][0][
        'name']
    assert existing_model.other_models[1].name == data['other_models'][1][
        'name']
    assert existing_model.other_models[0].third_models[0].name == data[
        'other_models'][0]['third_models'][0]['name']
    assert existing_model.other_models[0].third_models[1].name == data[
        'other_models'][0]['third_models'][1]['name']
Exemplo n.º 3
0
def test_update_resource(model, session):
    # save the example model to the db
    session.add(model)
    session.commit()
    # update it so some related models should be added, updated and removed
    alchemy = AlchemyMixin()
    data = {
        'name':
        'model_prim',
        'other_models': [
            {
                'id': 2,
                'name': 'other_model1_prim',
                # missing third_models, should be left intact
            },
            # missing other_model with id 3, should be removed
            {
                # new other_model, should be added
                'name': 'other_model3',
            },
        ],
    }
    alchemy.save_resource(model, data, session)
    session.commit()
    model = session.query(Model).get(1)
    assert model.name == 'model_prim'
    assert len(model.other_models) == 2
    assert model.other_models[0].name == 'other_model1_prim'
    assert model.other_models[1].id == 4
    assert model.other_models[1].name == 'other_model3'
Exemplo n.º 4
0
def test_serialize_deep(model):
    alchemy = AlchemyMixin()
    expected = {
        'id':
        1,
        'name':
        'model',
        'other_models': [
            {
                'id':
                2,
                'name':
                'other_model1',
                'third_models': [
                    {
                        'id': 4,
                        'name': 'third_model1',
                        'other_model_id': None,
                    },
                    {
                        'id': 5,
                        'name': 'third_model2',
                        'other_model_id': None,
                    },
                ],
            },
            {
                'id': 3,
                'name': 'other_model2',
                'third_models': [],
            },
        ],
    }
    assert alchemy.serialize(model, relations_level=2) == expected
Exemplo n.º 5
0
def test_default_schema():
    expected = {
        'type': 'object',
        'properties': {},
        'required': [],
    }
    assert AlchemyMixin.get_default_schema(Model, 'POST') == expected
    expected = {
        'type': 'object',
        'properties': {},
        'required': [],
    }
    assert AlchemyMixin.get_default_schema(ThirdModel, 'POST') == expected
Exemplo n.º 6
0
def test_serialize(model):
    alchemy = AlchemyMixin()
    expected = {
        'id':
        1,
        'name':
        'model',
        'other_models': [
            {
                'id': 2,
                'name': 'other_model1',
            },
            {
                'id': 3,
                'name': 'other_model2',
            },
        ],
    }
    assert alchemy.serialize(model) == expected
Exemplo n.º 7
0
def test_deserialize(model):
    alchemy = AlchemyMixin()
    alchemy.objects_class = Model
    data = {
        'id':
        1,
        'name':
        'model',
        'other_models': [
            {
                'id': 2,
                'name': 'other_model1',
            },
            {
                'id': 3,
                'name': 'other_model2',
            },
        ],
    }
    expected = {
        'id':
        1,
        'name':
        'model',
        'other_models': [
            {
                'id': 2,
                'name': 'other_model1',
            },
            {
                'id': 3,
                'name': 'other_model2',
            },
        ],
    }
    assert alchemy.deserialize(data) == expected
Exemplo n.º 8
0
 def get_term_query(self, column_alias, column_name, value, default_op=or_):
     tq = AlchemyMixin.get_tsquery(value, default_op)
     if column_name is None:
         column_name = column_alias.name
     return Function('to_tsvector', column_name).op('@@')(tq)