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"
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([])])
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'
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
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"])
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)
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)
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)
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([])
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'])
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(["*"])
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)
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"])
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"])
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)
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"])
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'] )
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)
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)
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')
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)
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')
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'] )
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( ['*'] )
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, )
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")
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' )
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'] )
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")
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
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'