コード例 #1
0
    def _get_relation_arguments(self):
        flexmock(Model).should_receive("_boot_columns").and_return(["name"])
        parent = flexmock(Model())
        parent.should_receive("get_key").and_return(1)
        parent.should_receive("get_created_at_column").and_return("created_at")
        parent.should_receive("get_updated_at_column").and_return("updated_at")

        query = flexmock(
            QueryBuilder(MockConnection().prepare_mock(), QueryGrammar(),
                         QueryProcessor()))
        flexmock(Builder)
        builder = Builder(query)
        builder.should_receive("get_query").and_return(query)
        related = flexmock(Model())
        builder.set_model(related)
        builder.should_receive("get_model").and_return(related)

        related.should_receive("new_query").and_return(builder)
        related.should_receive("get_key_name").and_return("id")
        related.should_receive("get_table").and_return("roles")
        related.should_receive("new_pivot").replace_with(
            lambda *args: Pivot(*args))

        builder.get_query().should_receive("join").at_least().once().with_args(
            "user_role", "roles.id", "=", "user_role.role_id")
        builder.should_receive("where").at_least().once().with_args(
            "user_role.user_id", "=", 1)

        return builder, parent, "user_role", "user_id", "role_id", "relation_id"
コード例 #2
0
    def test_chunk(self):
        query_builder = self.get_mock_query_builder()
        query_results = [["foo1", "foo2"], ["foo3"]]
        query_builder.chunk = mock.MagicMock(return_value=query_results)

        builder = Builder(query_builder)
        model = self.get_mock_model()
        builder.set_model(model)

        results = [Collection(["foo1", "foo2"]), Collection(["foo3"])]

        model.hydrate = mock.MagicMock(return_value=[])
        model.new_collection = mock.MagicMock(side_effect=results)
        model.get_connection_name = mock.MagicMock(return_value="foo")

        i = 0
        for result in builder.chunk(2):
            self.assertEqual(result, results[i])

            i += 1

        self.assertEqual(i, 2)

        query_builder.chunk.assert_has_calls([mock.call(2)])
        model.hydrate.assert_has_calls(
            [mock.call(["foo1", "foo2"], "foo"),
             mock.call(["foo3"], "foo")])
        model.new_collection.assert_has_calls([mock.call([]), mock.call([])])
コード例 #3
0
    def _get_relation_arguments(self):
        flexmock(Model).should_receive('_boot_columns').and_return(['name'])
        parent = flexmock(Model())
        parent.should_receive('get_key').and_return(1)
        parent.should_receive('get_created_at_column').and_return('created_at')
        parent.should_receive('get_updated_at_column').and_return('updated_at')

        query = flexmock(
            QueryBuilder(MockConnection().prepare_mock(), QueryGrammar(),
                         QueryProcessor()))
        flexmock(Builder)
        builder = Builder(query)
        builder.should_receive('get_query').and_return(query)
        related = flexmock(Model())
        builder.set_model(related)
        builder.should_receive('get_model').and_return(related)

        related.should_receive('new_query').and_return(builder)
        related.should_receive('get_key_name').and_return('id')
        related.should_receive('get_table').and_return('roles')
        related.should_receive('new_pivot').replace_with(
            lambda *args: Pivot(*args))

        builder.get_query().should_receive('join').at_least().once().with_args(
            'user_role', 'roles.id', '=', 'user_role.role_id')
        builder.should_receive('where').at_least().once().with_args(
            'user_role.user_id', '=', 1)

        return builder, parent, 'user_role', 'user_id', 'role_id', 'relation_id'
コード例 #4
0
    def _get_relation_arguments(self):
        parent = flexmock(Model())
        parent.should_receive('get_morph_name').and_return(
            parent.__class__.__name__)
        parent.should_receive('get_key').and_return(1)
        parent.should_receive('get_created_at_column').and_return('created_at')
        parent.should_receive('get_updated_at_column').and_return('updated_at')

        query = flexmock(
            QueryBuilder(MockConnection().prepare_mock(), QueryGrammar(),
                         QueryProcessor()))
        flexmock(Builder)
        builder = Builder(query)
        builder.should_receive('get_query').and_return(query)
        related = flexmock(Model())
        builder.set_model(related)
        builder.should_receive('get_model').and_return(related)

        related.should_receive('get_key_name').and_return('id')
        related.should_receive('get_table').and_return('tags')
        related.should_receive('get_morph_name').and_return(
            parent.__class__.__name__)

        builder.get_query().should_receive('join').once().with_args(
            'taggables', 'tags.id', '=', 'taggables.tag_id')
        builder.should_receive('where').once().with_args(
            'taggables.taggable_id', '=', 1)
        builder.should_receive('where').once().with_args(
            'taggables.taggable_type', parent.__class__.__name__)

        return builder, parent, 'taggable', 'taggables', 'taggable_id', 'tag_id', 'relation_name', False
コード例 #5
0
    def test_first_or_fail_raises_model_not_found_exception(self):
        model = self.get_mock_model()

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.first = mock.MagicMock(return_value=None)

        self.assertRaises(ModelNotFound, builder.first_or_fail, ["column"])

        builder.first.assert_called_once_with(["column"])
コード例 #6
0
ファイル: test_builder.py プロジェクト: nicoplus/sorator
    def test_find_by_method(self):
        builder = Builder(self.get_mock_query_builder())
        builder.set_model(self.get_mock_model())
        builder.get_query().where = mock.MagicMock()
        builder.first = mock.MagicMock(return_value='baz')

        result = builder.find_by('foo', 'bar', ['column'])

        builder.get_query().where.assert_called_once_with('foo', '=', 'bar')
        self.assertEqual('baz', result)
コード例 #7
0
    def test_find_method(self):
        builder = Builder(self.get_mock_query_builder())
        builder.set_model(self.get_mock_model())
        builder.get_query().where = mock.MagicMock()
        builder.first = mock.MagicMock(return_value="baz")

        result = builder.find("bar", ["column"])

        builder.get_query().where.assert_called_once_with(
            "foo_table.foo", "=", "bar")
        self.assertEqual("baz", result)
コード例 #8
0
    def test_find_method(self):
        builder = Builder(self.get_mock_query_builder())
        builder.set_model(self.get_mock_model())
        builder.get_query().where = mock.MagicMock()
        builder.first = mock.MagicMock(return_value='baz')

        result = builder.find('bar', ['column'])

        builder.get_query().where.assert_called_once_with(
            'foo_table.foo', '=', 'bar'
        )
        self.assertEqual('baz', result)
コード例 #9
0
    def test_get_does_not_eager_relations_when_no_results_are_returned(self):
        flexmock(Builder)
        builder = Builder(self.get_mock_query_builder())
        builder.should_receive('get_models').with_args(['foo']).and_return(['bar'])
        builder.should_receive('eager_load_relations').with_args(['bar']).and_return([])
        builder.set_model(self.get_mock_model())
        builder.get_model().new_collection = mock.MagicMock(return_value=Collection([]))

        results = builder.get(['foo'])
        self.assertEqual([], results.all())

        builder.get_model().new_collection.assert_called_with([])
コード例 #10
0
ファイル: test_builder.py プロジェクト: nicoplus/sorator
    def test_find_by_or_fail_raises_model_not_found_exception(self):
        model = self.get_mock_model()

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.get_query().where = mock.MagicMock()
        builder.first = mock.MagicMock(return_value=None)

        self.assertRaises(ModelNotFound, builder.find_by_or_fail, 'foo', 'bar',
                          ['column'])

        builder.get_query().where.assert_called_once_with('foo', '=', 'bar')

        builder.first.assert_called_once_with(['column'])
コード例 #11
0
    def test_first(self):
        model = self.get_mock_model()

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.take = mock.MagicMock(return_value=builder)
        builder.get = mock.MagicMock(return_value=Collection(["bar"]))

        result = builder.first()
        self.assertEqual("bar", result)

        builder.take.assert_called_once_with(1)

        builder.get.assert_called_once_with(["*"])
コード例 #12
0
    def test_find_or_new_model_found(self):
        model = self.get_mock_model()
        model.find_or_new = mock.MagicMock(return_value="baz")

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.get_query().where = mock.MagicMock()
        builder.first = mock.MagicMock(return_value="baz")

        expected = model.find_or_new("bar", ["column"])
        result = builder.find("bar", ["column"])

        builder.get_query().where.assert_called_once_with(
            "foo_table.foo", "=", "bar")
        self.assertEqual(expected, result)
コード例 #13
0
    def test_get_loads_models_and_hydrates_eager_relations(self):
        flexmock(Builder)
        builder = Builder(self.get_mock_query_builder())
        builder.should_receive("get_models").with_args(["foo"
                                                        ]).and_return(["bar"])
        builder.should_receive("eager_load_relations").with_args(
            ["bar"]).and_return(["bar", "baz"])
        builder.set_model(self.get_mock_model())
        builder.get_model().new_collection = mock.MagicMock(
            return_value=Collection(["bar", "baz"]))

        results = builder.get(["foo"])
        self.assertEqual(["bar", "baz"], results.all())

        builder.get_model().new_collection.assert_called_with(["bar", "baz"])
コード例 #14
0
    def test_find_or_fail_with_many_raises_model_not_found_exception(self):
        model = self.get_mock_model()

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.get_query().where_in = mock.MagicMock()
        builder.get = mock.MagicMock(return_value=Collection([1]))

        self.assertRaises(ModelNotFound, builder.find_or_fail, [1, 2],
                          ["column"])

        builder.get_query().where_in.assert_called_once_with(
            "foo_table.foo", [1, 2])

        builder.get.assert_called_once_with(["column"])
コード例 #15
0
ファイル: test_builder.py プロジェクト: nicoplus/sorator
    def test_find_or_new_model_found(self):
        model = self.get_mock_model()
        model.find_or_new = mock.MagicMock(return_value='baz')

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.get_query().where = mock.MagicMock()
        builder.first = mock.MagicMock(return_value='baz')

        expected = model.find_or_new('bar', ['column'])
        result = builder.find('bar', ['column'])

        builder.get_query().where.assert_called_once_with(
            'foo_table.foo', '=', 'bar')
        self.assertEqual(expected, result)
コード例 #16
0
    def test_find_with_many(self):
        model = self.get_mock_model()

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.get_query().where_in = mock.MagicMock()
        builder.get = mock.MagicMock(return_value="baz")

        result = builder.find([1, 2], ["column"])
        self.assertEqual("baz", result)

        builder.get_query().where_in.assert_called_once_with(
            "foo_table.foo", [1, 2])

        builder.get.assert_called_once_with(["column"])
コード例 #17
0
    def test_first_or_fail_raises_model_not_found_exception(self):
        model = self.get_mock_model()

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.first = mock.MagicMock(return_value=None)

        self.assertRaises(
            ModelNotFound,
            builder.first_or_fail,
            ['column']
        )

        builder.first.assert_called_once_with(
            ['column']
        )
コード例 #18
0
    def test_find_or_new_model_found(self):
        model = self.get_mock_model()
        model.find_or_new = mock.MagicMock(return_value='baz')

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.get_query().where = mock.MagicMock()
        builder.first = mock.MagicMock(return_value='baz')

        expected = model.find_or_new('bar', ['column'])
        result = builder.find('bar', ['column'])

        builder.get_query().where.assert_called_once_with(
            'foo_table.foo', '=', 'bar'
        )
        self.assertEqual(expected, result)
コード例 #19
0
    def test_find_or_new_model_not_found(self):
        model = self.get_mock_model()
        model.find_or_new = mock.MagicMock(return_value=self.get_mock_model())

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.get_query().where = mock.MagicMock()
        builder.first = mock.MagicMock(return_value=None)

        result = model.find_or_new("bar", ["column"])
        find_result = builder.find("bar", ["column"])

        builder.get_query().where.assert_called_once_with(
            "foo_table.foo", "=", "bar")
        self.assertIsNone(find_result)
        self.assertIsInstance(result, Model)
コード例 #20
0
    def test_get_relation_properly_sets_nested_relationships(self):
        flexmock(Builder)
        builder = Builder(flexmock(QueryBuilder(None, None, None)))
        model = flexmock(Model())
        relation = flexmock()
        model.set_relation('orders', relation)
        builder.set_model(model)
        relation_query = flexmock()
        relation.should_receive('get_query').and_return(relation_query)
        relation_query.should_receive('with_').once().with_args({'lines': None, 'lines.details': None})
        builder.set_eager_loads({
            'orders': None,
            'orders.lines': None,
            'orders.lines.details': None
        })

        relation = builder.get_relation('orders')
コード例 #21
0
    def test_find_or_new_model_not_found(self):
        model = self.get_mock_model()
        model.find_or_new = mock.MagicMock(return_value=self.get_mock_model())

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.get_query().where = mock.MagicMock()
        builder.first = mock.MagicMock(return_value=None)

        result = model.find_or_new('bar', ['column'])
        find_result = builder.find('bar', ['column'])

        builder.get_query().where.assert_called_once_with(
            'foo_table.foo', '=', 'bar'
        )
        self.assertIsNone(find_result)
        self.assertIsInstance(result, Model)
コード例 #22
0
ファイル: test_builder.py プロジェクト: zky001/orator
    def test_get_models_hydrates_models(self):
        builder = Builder(self.get_mock_query_builder())
        records = [{'name': 'john', 'age': 26}, {'name': 'jane', 'age': 28}]

        builder.get_query().get = mock.MagicMock(return_value=records)
        model = self.get_mock_model()
        builder.set_model(model)
        model.get_connection_name = mock.MagicMock(
            return_value='foo_connection')
        model.hydrate = mock.MagicMock(return_value=Collection(['hydrated']))
        models = builder.get_models(['foo'])

        self.assertEqual(models.all(), ['hydrated'])

        model.get_table.assert_called_once_with()
        model.get_connection_name.assert_called_once_with()
        model.hydrate.assert_called_once_with(records, 'foo_connection')
コード例 #23
0
    def test_find_with_many(self):
        model = self.get_mock_model()

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.get_query().where_in = mock.MagicMock()
        builder.get = mock.MagicMock(return_value='baz')

        result = builder.find([1, 2], ['column'])
        self.assertEqual('baz', result)

        builder.get_query().where_in.assert_called_once_with(
            'foo_table.foo', [1, 2]
        )

        builder.get.assert_called_once_with(
            ['column']
        )
コード例 #24
0
    def test_first(self):
        model = self.get_mock_model()

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.take = mock.MagicMock(return_value=builder)
        builder.get = mock.MagicMock(return_value=Collection(['bar']))

        result = builder.first()
        self.assertEqual('bar', result)

        builder.take.assert_called_once_with(
            1
        )

        builder.get.assert_called_once_with(
            ['*']
        )
コード例 #25
0
    def _get_relation_arguments(self):
        parent = flexmock(Model())
        parent.should_receive("get_morph_name").and_return(parent.__class__.__name__)
        parent.should_receive("get_key").and_return(1)
        parent.should_receive("get_created_at_column").and_return("created_at")
        parent.should_receive("get_updated_at_column").and_return("updated_at")

        query = flexmock(
            QueryBuilder(
                MockConnection().prepare_mock(), QueryGrammar(), QueryProcessor()
            )
        )
        flexmock(Builder)
        builder = Builder(query)
        builder.should_receive("get_query").and_return(query)
        related = flexmock(Model())
        builder.set_model(related)
        builder.should_receive("get_model").and_return(related)

        related.should_receive("get_key_name").and_return("id")
        related.should_receive("get_table").and_return("tags")
        related.should_receive("get_morph_name").and_return(parent.__class__.__name__)

        builder.get_query().should_receive("join").once().with_args(
            "taggables", "tags.id", "=", "taggables.tag_id"
        )
        builder.should_receive("where").once().with_args(
            "taggables.taggable_id", "=", 1
        )
        builder.should_receive("where").once().with_args(
            "taggables.taggable_type", parent.__class__.__name__
        )

        return (
            builder,
            parent,
            "taggable",
            "taggables",
            "taggable_id",
            "tag_id",
            "relation_name",
            False,
        )
コード例 #26
0
    def test_get_relation_properly_sets_nested_relationships(self):
        flexmock(Builder)
        builder = Builder(flexmock(QueryBuilder(None, None, None)))
        model = flexmock(Model())
        relation = flexmock()
        model.set_relation("orders", relation)
        builder.set_model(model)
        relation_query = flexmock()
        relation.should_receive("get_query").and_return(relation_query)
        relation_query.should_receive("with_").once().with_args({
            "lines":
            None,
            "lines.details":
            None
        })
        builder.set_eager_loads({
            "orders": None,
            "orders.lines": None,
            "orders.lines.details": None
        })

        relation = builder.get_relation("orders")
コード例 #27
0
    def test_get_models_hydrates_models(self):
        builder = Builder(self.get_mock_query_builder())
        records = [{
            'name': 'john', 'age': 26
        }, {
            'name': 'jane', 'age': 28
        }]

        builder.get_query().get = mock.MagicMock(return_value=records)
        model = self.get_mock_model()
        builder.set_model(model)
        model.get_connection_name = mock.MagicMock(return_value='foo_connection')
        model.hydrate = mock.MagicMock(return_value=Collection(['hydrated']))
        models = builder.get_models(['foo'])

        self.assertEqual(models.all(), ['hydrated'])

        model.get_table.assert_called_once_with()
        model.get_connection_name.assert_called_once_with()
        model.hydrate.assert_called_once_with(
            records, 'foo_connection'
        )
コード例 #28
0
    def test_find_or_fail_with_many_raises_model_not_found_exception(self):
        model = self.get_mock_model()

        builder = Builder(self.get_mock_query_builder())
        builder.set_model(model)
        builder.get_query().where_in = mock.MagicMock()
        builder.get = mock.MagicMock(return_value=Collection([1]))

        self.assertRaises(
            ModelNotFound,
            builder.find_or_fail,
            [1, 2],
            ['column']
        )

        builder.get_query().where_in.assert_called_once_with(
            'foo_table.foo', [1, 2]
        )

        builder.get.assert_called_once_with(
            ['column']
        )
コード例 #29
0
    def test_get_models_hydrates_models(self):
        builder = Builder(self.get_mock_query_builder())
        records = Collection([{
            "name": "john",
            "age": 26
        }, {
            "name": "jane",
            "age": 28
        }])

        builder.get_query().get = mock.MagicMock(return_value=records)
        model = self.get_mock_model()
        builder.set_model(model)
        model.get_connection_name = mock.MagicMock(
            return_value="foo_connection")
        model.hydrate = mock.MagicMock(return_value=Collection(["hydrated"]))
        models = builder.get_models(["foo"])

        self.assertEqual(models.all(), ["hydrated"])

        model.get_table.assert_called_once_with()
        model.get_connection_name.assert_called_once_with()
        model.hydrate.assert_called_once_with(records, "foo_connection")
コード例 #30
0
    def _get_relation_arguments(self):
        parent = flexmock(Model())
        parent.should_receive('get_morph_name').and_return(parent.__class__.__name__)
        parent.should_receive('get_key').and_return(1)
        parent.should_receive('get_created_at_column').and_return('created_at')
        parent.should_receive('get_updated_at_column').and_return('updated_at')

        query = flexmock(QueryBuilder(MockConnection().prepare_mock(), QueryGrammar(), QueryProcessor()))
        flexmock(Builder)
        builder = Builder(query)
        builder.should_receive('get_query').and_return(query)
        related = flexmock(Model())
        builder.set_model(related)
        builder.should_receive('get_model').and_return(related)

        related.should_receive('get_key_name').and_return('id')
        related.should_receive('get_table').and_return('tags')
        related.should_receive('get_morph_name').and_return(parent.__class__.__name__)

        builder.get_query().should_receive('join').once().with_args('taggables', 'tags.id', '=', 'taggables.tag_id')
        builder.should_receive('where').once().with_args('taggables.taggable_id', '=', 1)
        builder.should_receive('where').once().with_args('taggables.taggable_type', parent.__class__.__name__)

        return builder, parent, 'taggable', 'taggables', 'taggable_id', 'tag_id', 'relation_name', False
コード例 #31
0
    def _get_relation_arguments(self):
        flexmock(Model).should_receive('_boot_columns').and_return(['name'])
        parent = flexmock(Model())
        parent.should_receive('get_key').and_return(1)
        parent.should_receive('get_created_at_column').and_return('created_at')
        parent.should_receive('get_updated_at_column').and_return('updated_at')

        query = flexmock(QueryBuilder(MockConnection().prepare_mock(), QueryGrammar(), QueryProcessor()))
        flexmock(Builder)
        builder = Builder(query)
        builder.should_receive('get_query').and_return(query)
        related = flexmock(Model())
        builder.set_model(related)
        builder.should_receive('get_model').and_return(related)

        related.should_receive('new_query').and_return(builder)
        related.should_receive('get_key_name').and_return('id')
        related.should_receive('get_table').and_return('roles')
        related.should_receive('new_pivot').replace_with(lambda *args: Pivot(*args))

        builder.get_query().should_receive('join').at_least().once().with_args('user_role', 'roles.id', '=', 'user_role.role_id')
        builder.should_receive('where').at_least().once().with_args('user_role.user_id', '=', 1)

        return builder, parent, 'user_role', 'user_id', 'role_id', 'relation_id'