class TestTaskRepositoryForTaskQueries(Test): def setUp(self): super(TestTaskRepositoryForTaskQueries, self).setUp() self.task_repo = TaskRepository(db) def test_get_task_return_none_if_no_task(self): """Test get_task method returns None if there is no task with the specified id""" task = self.task_repo.get_task(200) assert task is None, task def test_get_task_returns_task(self): """Test get_task method returns a task if exists""" task = TaskFactory.create() retrieved_task = self.task_repo.get_task(task.id) assert task == retrieved_task, retrieved_task def test_get_task_by(self): """Test get_task_by returns a task with the specified attribute""" task = TaskFactory.create(state='done') retrieved_task = self.task_repo.get_task_by(state=task.state) assert task == retrieved_task, retrieved_task def test_get_task_by_returns_none_if_no_task(self): """Test get_task_by returns None if no task matches the query""" TaskFactory.create(state='done') task = self.task_repo.get_task_by(state='ongoing') assert task is None, task def test_filter_tasks_by_no_matches(self): """Test filter_tasks_by returns an empty list if no tasks match the query""" TaskFactory.create(state='done', n_answers=17) retrieved_tasks = self.task_repo.filter_tasks_by(state='ongoing') assert isinstance(retrieved_tasks, list) assert len(retrieved_tasks) == 0, retrieved_tasks def test_filter_tasks_by_one_condition(self): """Test filter_tasks_by returns a list of tasks that meet the filtering condition""" TaskFactory.create_batch(3, state='done') should_be_missing = TaskFactory.create(state='ongoing') retrieved_tasks = self.task_repo.filter_tasks_by(state='done') assert len(retrieved_tasks) == 3, retrieved_tasks assert should_be_missing not in retrieved_tasks, retrieved_tasks def test_filter_tasks_by_multiple_conditions(self): """Test filter_tasks_by supports multiple-condition queries""" TaskFactory.create(state='done', n_answers=17) task = TaskFactory.create(state='done', n_answers=99) retrieved_tasks = self.task_repo.filter_tasks_by(state='done', n_answers=99) assert len(retrieved_tasks) == 1, retrieved_tasks assert task in retrieved_tasks, retrieved_tasks def test_filter_tasks_support_yield_option(self): """Test that filter_tasks_by with the yielded=True option returns the results as a generator""" tasks = TaskFactory.create_batch(2, state='done') yielded_tasks = self.task_repo.filter_tasks_by(state='done', yielded=True) import types assert isinstance(yielded_tasks.__iter__(), types.GeneratorType) for task in yielded_tasks: assert task in tasks def test_filter_tasks_limit_offset(self): """Test that filter_tasks_by supports limit and offset options""" TaskFactory.create_batch(4) all_tasks = self.task_repo.filter_tasks_by() first_two = self.task_repo.filter_tasks_by(limit=2) last_two = self.task_repo.filter_tasks_by(limit=2, offset=2) assert len(first_two) == 2, first_two assert len(last_two) == 2, last_two assert first_two == all_tasks[:2] assert last_two == all_tasks[2:] def test_count_tasks_with_no_matches(self): """Test count_tasks_with returns 0 if no tasks match the query""" TaskFactory.create(state='done', n_answers=17) count = self.task_repo.count_tasks_with(state='ongoing') assert count == 0, count def test_count_tasks_with_one_condition(self): """Test count_tasks_with returns the number of tasks that meet the filtering condition""" TaskFactory.create_batch(3, state='done') should_be_missing = TaskFactory.create(state='ongoing') count = self.task_repo.count_tasks_with(state='done') assert count == 3, count def test_count_tasks_with_multiple_conditions(self): """Test count_tasks_with supports multiple-condition queries""" TaskFactory.create(state='done', n_answers=17) task = TaskFactory.create(state='done', n_answers=99) count = self.task_repo.count_tasks_with(state='done', n_answers=99) assert count == 1, count
class TestTaskRepositoryForTaskQueries(Test): def setUp(self): super(TestTaskRepositoryForTaskQueries, self).setUp() self.task_repo = TaskRepository(db) def test_handle_info_json_plain_text(self): """Test handle info in JSON as plain text works.""" TaskFactory.create(info='answer') res = self.task_repo.filter_tasks_by(info='answer') assert len(res) == 1 assert res[0].info == 'answer', res[0] def test_handle_info_json(self): """Test handle info in JSON works.""" TaskFactory.create(info={'foo': 'bar'}) info = 'foo::bar' res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 1 assert res[0].info['foo'] == 'bar', res[0] def test_handle_info_json_fulltextsearch(self): """Test handle info fulltextsearch in JSON works.""" text = 'bar word agent something' TaskFactory.create(info={'foo': text}) info = 'foo::agent' res = self.task_repo.filter_tasks_by(info=info, fulltextsearch='1') assert len(res) == 1 assert res[0].info['foo'] == text, res[0] res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 0, len(res) def test_handle_info_json_multiple_keys(self): """Test handle info in JSON with multiple keys works.""" TaskFactory.create(info={'foo': 'bar', 'bar': 'foo'}) info = 'foo::bar|bar::foo' res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 1 assert res[0].info['foo'] == 'bar', res[0] assert res[0].info['bar'] == 'foo', res[0] def test_handle_info_json_multiple_keys_fulltextsearch(self): """Test handle info in JSON with multiple keys works.""" text = "two three four five" TaskFactory.create(info={'foo': 'bar', 'extra': text}) info = 'foo::bar|extra::four' res = self.task_repo.filter_tasks_by(info=info, fulltextsearch='1') assert len(res) == 1, len(res) assert res[0].info['foo'] == 'bar', res[0] assert res[0].info['extra'] == text, res[0] res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 0, len(res) def test_handle_info_json_multiple_keys_and_fulltextsearch(self): """Test handle info in JSON with multiple keys and AND operator works.""" text = "agent myself you bar" TaskFactory.create(info={'foo': 'bar', 'bar': text}) info = 'foo::bar|bar::you&agent' res = self.task_repo.filter_tasks_by(info=info, fulltextsearch='1') assert len(res) == 1, len(res) assert res[0].info['foo'] == 'bar', res[0] assert res[0].info['bar'] == text, res[0] def test_handle_info_json_multiple_keys_404(self): """Test handle info in JSON with multiple keys not found works.""" TaskFactory.create(info={'foo': 'bar', 'daniel': 'foo'}) info = 'foo::bar|bar::foo' res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 0 def test_handle_info_json_multiple_keys_404_with_one_pipe(self): """Test handle info in JSON with multiple keys not found works.""" TaskFactory.create(info={'foo': 'bar', 'bar': 'foo'}) info = 'foo::bar|' res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 1 assert res[0].info['foo'] == 'bar', res[0] assert res[0].info['bar'] == 'foo', res[0] def test_handle_info_json_multiple_keys_404_fulltextsearch(self): """Test handle info in JSON with full text search with multiple keys not found works.""" TaskFactory.create(info={'foo': 'bar', 'bar': 'foo'}) info = 'foo::bar|' res = self.task_repo.filter_tasks_by(info=info, fulltextsearch='1') assert len(res) == 1 assert res[0].info['foo'] == 'bar', res[0] assert res[0].info['bar'] == 'foo', res[0] def test_handle_info_json_wrong_data(self): """Test handle info in JSON with wrong data works.""" TaskFactory.create(info={'foo': 'bar', 'bar': 'foo'}) infos = ['|', '||', '|::', ':|', '::|', '|:', 'foo|', 'foo|'] for info in infos: res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 0 for info in infos: res = self.task_repo.filter_tasks_by(info=info, fulltextsearch='1') assert len(res) == 0 def test_get_task_return_none_if_no_task(self): """Test get_task method returns None if there is no task with the specified id""" task = self.task_repo.get_task(200) assert task is None, task def test_get_task_returns_task(self): """Test get_task method returns a task if exists""" task = TaskFactory.create() retrieved_task = self.task_repo.get_task(task.id) assert task == retrieved_task, retrieved_task def test_get_task_by(self): """Test get_task_by returns a task with the specified attribute""" task = TaskFactory.create(state='done') retrieved_task = self.task_repo.get_task_by(state=task.state) assert task == retrieved_task, retrieved_task def test_get_task_by_returns_none_if_no_task(self): """Test get_task_by returns None if no task matches the query""" TaskFactory.create(state='done') task = self.task_repo.get_task_by(state='ongoing') assert task is None, task def test_filter_tasks_by_no_matches(self): """Test filter_tasks_by returns an empty list if no tasks match the query""" TaskFactory.create(state='done', n_answers=17) retrieved_tasks = self.task_repo.filter_tasks_by(state='ongoing') assert isinstance(retrieved_tasks, list) assert len(retrieved_tasks) == 0, retrieved_tasks def test_filter_tasks_by_one_condition(self): """Test filter_tasks_by returns a list of tasks that meet the filtering condition""" TaskFactory.create_batch(3, state='done') should_be_missing = TaskFactory.create(state='ongoing') retrieved_tasks = self.task_repo.filter_tasks_by(state='done') assert len(retrieved_tasks) == 3, retrieved_tasks assert should_be_missing not in retrieved_tasks, retrieved_tasks def test_filter_tasks_by_multiple_conditions(self): """Test filter_tasks_by supports multiple-condition queries""" TaskFactory.create(state='done', n_answers=17) task = TaskFactory.create(state='done', n_answers=99) retrieved_tasks = self.task_repo.filter_tasks_by(state='done', n_answers=99) assert len(retrieved_tasks) == 1, retrieved_tasks assert task in retrieved_tasks, retrieved_tasks def test_filter_tasks_support_yield_option(self): """Test that filter_tasks_by with the yielded=True option returns the results as a generator""" tasks = TaskFactory.create_batch(2, state='done') yielded_tasks = self.task_repo.filter_tasks_by(state='done', yielded=True) import types assert isinstance(yielded_tasks.__iter__(), types.GeneratorType) for task in yielded_tasks: assert task in tasks def test_filter_tasks_limit_offset(self): """Test that filter_tasks_by supports limit and offset options""" TaskFactory.create_batch(4) all_tasks = self.task_repo.filter_tasks_by() first_two = self.task_repo.filter_tasks_by(limit=2) last_two = self.task_repo.filter_tasks_by(limit=2, offset=2) assert len(first_two) == 2, first_two assert len(last_two) == 2, last_two assert first_two == all_tasks[:2] assert last_two == all_tasks[2:] def test_count_tasks_with_no_matches(self): """Test count_tasks_with returns 0 if no tasks match the query""" TaskFactory.create(state='done', n_answers=17) count = self.task_repo.count_tasks_with(state='ongoing') assert count == 0, count def test_count_tasks_with_one_condition(self): """Test count_tasks_with returns the number of tasks that meet the filtering condition""" TaskFactory.create_batch(3, state='done') should_be_missing = TaskFactory.create(state='ongoing') count = self.task_repo.count_tasks_with(state='done') assert count == 3, count def test_count_tasks_with_multiple_conditions(self): """Test count_tasks_with supports multiple-condition queries""" TaskFactory.create(state='done', n_answers=17) task = TaskFactory.create(state='done', n_answers=99) count = self.task_repo.count_tasks_with(state='done', n_answers=99) assert count == 1, count
class TestTaskRepositoryForTaskQueries(Test): def setUp(self): super(TestTaskRepositoryForTaskQueries, self).setUp() self.task_repo = TaskRepository(db) def test_orderby(self): """Test orderby.""" project = ProjectFactory.create() task1 = TaskFactory.create(fav_user_ids=[1], project=project) task2 = TaskFactory.create(fav_user_ids=None, project=project) task3 = TaskFactory.create(fav_user_ids=[1, 2, 3], project=project) task = self.task_repo.filter_tasks_by(orderby='id', desc=True, project_id=project.id, limit=1)[0] assert task == task3, (task, task3) task = self.task_repo.filter_tasks_by(orderby='id', desc=False, project_id=project.id, limit=1)[0] assert task == task1, (task, task1) task = self.task_repo.filter_tasks_by(orderby='created', desc=True, project_id=project.id)[0] assert task == task3, (task.id, task3.id) task = self.task_repo.filter_tasks_by(orderby='created', desc=False, project_id=project.id)[0] assert task == task1, (task.created, task1.created) task = self.task_repo.filter_tasks_by(orderby='fav_user_ids', desc=True, project_id=project.id)[0][0] assert task == task3, (task.id, task3.id) task = self.task_repo.filter_tasks_by(orderby='fav_user_ids', desc=False, project_id=project.id)[0][0] assert task == task2, (task.fav_user_ids, task2.fav_user_ids) def test_handle_info_json_plain_text(self): """Test handle info in JSON as plain text works.""" TaskFactory.create(info='answer') res = self.task_repo.filter_tasks_by(info='answer') assert len(res) == 1 assert res[0].info == 'answer', res[0] def test_handle_info_json(self): """Test handle info in JSON works.""" TaskFactory.create(info={'foo': 'bar'}) info = 'foo::bar' res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 1 assert res[0].info['foo'] == 'bar', res[0] def test_handle_info_json_fulltextsearch(self): """Test handle info fulltextsearch in JSON works.""" text = 'bar word agent something' TaskFactory.create(info={'foo': text}) info = 'foo::agent' res = self.task_repo.filter_tasks_by(info=info, fulltextsearch='1') assert len(res) == 1 assert res[0][0].info['foo'] == text, res[0] res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 0, len(res) def test_handle_info_json_multiple_keys(self): """Test handle info in JSON with multiple keys works.""" TaskFactory.create(info={'foo': 'bar', 'bar': 'foo'}) info = 'foo::bar|bar::foo' res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 1 assert res[0].info['foo'] == 'bar', res[0] assert res[0].info['bar'] == 'foo', res[0] def test_handle_info_json_multiple_keys_fulltextsearch(self): """Test handle info in JSON with multiple keys works.""" text = "two three four five" TaskFactory.create(info={'foo': 'bar', 'extra': text}) info = 'foo::bar|extra::four' res = self.task_repo.filter_tasks_by(info=info, fulltextsearch='1') assert len(res) == 1, len(res) assert res[0][0].info['foo'] == 'bar', res[0] assert res[0][0].info['extra'] == text, res[0] res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 0, len(res) def test_handle_info_json_multiple_keys_and_fulltextsearch(self): """Test handle info in JSON with multiple keys and AND operator works.""" text = "agent myself you bar" TaskFactory.create(info={'foo': 'bar', 'bar': text}) info = 'foo::bar|bar::you&agent' res = self.task_repo.filter_tasks_by(info=info, fulltextsearch='1') assert len(res) == 1, len(res) assert res[0][0].info['foo'] == 'bar', res[0] assert res[0][0].info['bar'] == text, res[0] def test_handle_info_json_multiple_keys_404(self): """Test handle info in JSON with multiple keys not found works.""" TaskFactory.create(info={'foo': 'bar', 'daniel': 'foo'}) info = 'foo::bar|bar::foo' res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 0 def test_handle_info_json_multiple_keys_404_with_one_pipe(self): """Test handle info in JSON with multiple keys not found works.""" TaskFactory.create(info={'foo': 'bar', 'bar': 'foo'}) info = 'foo::bar|' res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 1 assert res[0].info['foo'] == 'bar', res[0] assert res[0].info['bar'] == 'foo', res[0] def test_handle_info_json_multiple_keys_404_fulltextsearch(self): """Test handle info in JSON with full text search with multiple keys not found works.""" TaskFactory.create(info={'foo': 'bar', 'bar': 'foo'}) info = 'foo::bar|' res = self.task_repo.filter_tasks_by(info=info, fulltextsearch='1') assert len(res) == 1 assert res[0][0].info['foo'] == 'bar', res[0] assert res[0][0].info['bar'] == 'foo', res[0] def test_handle_info_json_wrong_data(self): """Test handle info in JSON with wrong data works.""" TaskFactory.create(info={'foo': 'bar', 'bar': 'foo'}) infos = ['|', '||', '|::', ':|', '::|', '|:', 'foo|', 'foo|'] for info in infos: res = self.task_repo.filter_tasks_by(info=info) assert len(res) == 0 for info in infos: res = self.task_repo.filter_tasks_by(info=info, fulltextsearch='1') assert len(res) == 0 def test_get_task_return_none_if_no_task(self): """Test get_task method returns None if there is no task with the specified id""" task = self.task_repo.get_task(200) assert task is None, task def test_get_task_returns_task(self): """Test get_task method returns a task if exists""" task = TaskFactory.create() retrieved_task = self.task_repo.get_task(task.id) assert task == retrieved_task, retrieved_task def test_get_task_by(self): """Test get_task_by returns a task with the specified attribute""" task = TaskFactory.create(state='done') retrieved_task = self.task_repo.get_task_by(state=task.state) assert task == retrieved_task, retrieved_task def test_get_task_by_returns_none_if_no_task(self): """Test get_task_by returns None if no task matches the query""" TaskFactory.create(state='done') task = self.task_repo.get_task_by(state='ongoing') assert task is None, task def test_filter_tasks_by_no_matches(self): """Test filter_tasks_by returns an empty list if no tasks match the query""" TaskFactory.create(state='done', n_answers=17) retrieved_tasks = self.task_repo.filter_tasks_by(state='ongoing') assert isinstance(retrieved_tasks, list) assert len(retrieved_tasks) == 0, retrieved_tasks def test_filter_tasks_by_one_condition(self): """Test filter_tasks_by returns a list of tasks that meet the filtering condition""" TaskFactory.create_batch(3, state='done') should_be_missing = TaskFactory.create(state='ongoing') retrieved_tasks = self.task_repo.filter_tasks_by(state='done') assert len(retrieved_tasks) == 3, retrieved_tasks assert should_be_missing not in retrieved_tasks, retrieved_tasks def test_filter_tasks_by_multiple_conditions(self): """Test filter_tasks_by supports multiple-condition queries""" TaskFactory.create(state='done', n_answers=17) task = TaskFactory.create(state='done', n_answers=99) retrieved_tasks = self.task_repo.filter_tasks_by(state='done', n_answers=99) assert len(retrieved_tasks) == 1, retrieved_tasks assert task in retrieved_tasks, retrieved_tasks def test_filter_tasks_support_yield_option(self): """Test that filter_tasks_by with the yielded=True option returns the results as a generator""" tasks = TaskFactory.create_batch(2, state='done') yielded_tasks = self.task_repo.filter_tasks_by(state='done', yielded=True) import types assert isinstance(yielded_tasks.__iter__(), types.GeneratorType) for task in yielded_tasks: assert task in tasks def test_filter_tasks_limit_offset(self): """Test that filter_tasks_by supports limit and offset options""" TaskFactory.create_batch(4) all_tasks = self.task_repo.filter_tasks_by() first_two = self.task_repo.filter_tasks_by(limit=2) last_two = self.task_repo.filter_tasks_by(limit=2, offset=2) assert len(first_two) == 2, first_two assert len(last_two) == 2, last_two assert first_two == all_tasks[:2] assert last_two == all_tasks[2:] def test_count_tasks_with_no_matches(self): """Test count_tasks_with returns 0 if no tasks match the query""" TaskFactory.create(state='done', n_answers=17) count = self.task_repo.count_tasks_with(state='ongoing') assert count == 0, count def test_count_tasks_with_one_condition(self): """Test count_tasks_with returns the number of tasks that meet the filtering condition""" TaskFactory.create_batch(3, state='done') should_be_missing = TaskFactory.create(state='ongoing') count = self.task_repo.count_tasks_with(state='done') assert count == 3, count def test_count_tasks_with_multiple_conditions(self): """Test count_tasks_with supports multiple-condition queries""" TaskFactory.create(state='done', n_answers=17) task = TaskFactory.create(state='done', n_answers=99) count = self.task_repo.count_tasks_with(state='done', n_answers=99) assert count == 1, count
class TestTaskRepositoryForTaskQueries(Test): def setUp(self): super(TestTaskRepositoryForTaskQueries, self).setUp() self.task_repo = TaskRepository(db) def test_get_task_return_none_if_no_task(self): """Test get_task method returns None if there is no task with the specified id""" task = self.task_repo.get_task(200) assert task is None, task def test_get_task_returns_task(self): """Test get_task method returns a task if exists""" task = TaskFactory.create() retrieved_task = self.task_repo.get_task(task.id) assert task == retrieved_task, retrieved_task def test_get_task_by(self): """Test get_task_by returns a task with the specified attribute""" task = TaskFactory.create(state='done') retrieved_task = self.task_repo.get_task_by(state=task.state) assert task == retrieved_task, retrieved_task def test_get_task_by_returns_none_if_no_task(self): """Test get_task_by returns None if no task matches the query""" TaskFactory.create(state='done') task = self.task_repo.get_task_by(state='ongoing') assert task is None, task def test_filter_tasks_by_no_matches(self): """Test filter_tasks_by returns an empty list if no tasks match the query""" TaskFactory.create(state='done', n_answers=17) retrieved_tasks = self.task_repo.filter_tasks_by(state='ongoing') assert isinstance(retrieved_tasks, list) assert len(retrieved_tasks) == 0, retrieved_tasks def test_filter_tasks_by_one_condition(self): """Test filter_tasks_by returns a list of tasks that meet the filtering condition""" TaskFactory.create_batch(3, state='done') should_be_missing = TaskFactory.create(state='ongoing') retrieved_tasks = self.task_repo.filter_tasks_by(state='done') assert len(retrieved_tasks) == 3, retrieved_tasks assert should_be_missing not in retrieved_tasks, retrieved_tasks def test_filter_tasks_by_multiple_conditions(self): """Test filter_tasks_by supports multiple-condition queries""" TaskFactory.create(state='done', n_answers=17) task = TaskFactory.create(state='done', n_answers=99) retrieved_tasks = self.task_repo.filter_tasks_by(state='done', n_answers=99) assert len(retrieved_tasks) == 1, retrieved_tasks assert task in retrieved_tasks, retrieved_tasks def test_filter_tasks_support_yield_option(self): """Test that filter_tasks_by with the yielded=True option returns the results as a generator""" tasks = TaskFactory.create_batch(2, state='done') yielded_tasks = self.task_repo.filter_tasks_by(state='done', yielded=True) import types assert isinstance(yielded_tasks.__iter__(), types.GeneratorType) for task in yielded_tasks: assert task in tasks def test_filter_tasks_limit_offset(self): """Test that filter_tasks_by supports limit and offset options""" TaskFactory.create_batch(4) all_tasks = self.task_repo.filter_tasks_by() first_two = self.task_repo.filter_tasks_by(limit=2) last_two = self.task_repo.filter_tasks_by(limit=2, offset=2) assert len(first_two) == 2, first_two assert len(last_two) == 2, last_two assert first_two == all_tasks[:2] assert last_two == all_tasks[2:] def test_count_tasks_with_no_matches(self): """Test count_tasks_with returns 0 if no tasks match the query""" TaskFactory.create(state='done', n_answers=17) count = self.task_repo.count_tasks_with(state='ongoing') assert count == 0, count def test_count_tasks_with_one_condition(self): """Test count_tasks_with returns the number of tasks that meet the filtering condition""" TaskFactory.create_batch(3, state='done') should_be_missing = TaskFactory.create(state='ongoing') count = self.task_repo.count_tasks_with(state='done') assert count == 3, count def test_count_tasks_with_multiple_conditions(self): """Test count_tasks_with supports multiple-condition queries""" TaskFactory.create(state='done', n_answers=17) task = TaskFactory.create(state='done', n_answers=99) count = self.task_repo.count_tasks_with(state='done', n_answers=99) assert count == 1, count