def _create_or_update_task( ctask, user, competition, chain, index, text, comment): edit = bool(ctask.task_id) if not edit: content = MathContent(text=text) content.save() task = Task(content=content, author=user, hidden=True) comment = MathContent(text=comment) comment.save() ctask.comment = comment else: task = ctask.task task.content.text = text task.content.save() ctask.comment.text = comment ctask.comment.save() update_ctask_task(task, competition, chain, index + 1, commit=True) if not edit: if competition.automatic_task_tags: add_tags(task, competition.automatic_task_tags) if competition.admin_group: ObjectPermission.objects.create(content_object=task, group=competition.admin_group, permission_type=VIEW) ObjectPermission.objects.create(content_object=task, group=competition.admin_group, permission_type=EDIT) ctask.task = task
def test_get_object_tagged_items(self): def CHECK(x, y, z = None): names = [item.tag.name for item in get_object_tagged_items(x)] self.assertEqual(sorted(names), sorted(y), z) self._set_up_tasks() CHECK(self.alice_task, ["MEMO", "alg"]) self.assertIsNotNone(self.alice_task._cache_tagged_items, "should fill ._cache_tagged_items") CHECK(self.admin_task, ["IMO", "geo"]) add_tags(self.admin_task, "tb, asdf") CHECK(self.admin_task, ["IMO", "geo", "tb", "asdf"])
def test_add_tags(self): CHECK = lambda x, y, z = None: \ self.assertEqual( sorted(x.tags.values_list('name', flat=True)), sorted(y), z) self._set_up_tasks() CHECK(self.alice_task, ["MEMO", "alg"]) add_tags(self.alice_task, "memo, tb") CHECK(self.alice_task, ["MEMO", "alg", "tb"]) CHECK(self.admin_task, ["IMO", "geo"]) add_tags(self.admin_task, "asdf, asdf2") CHECK(self.admin_task, ["IMO", "geo", "asdf", "asdf2"]) self.alice_task._cache_tagged_items = -1 add_tags(self.alice_task, "memo") self.assertIsNotNone(self.alice_task._cache_tagged_items, "shouldn't clear ._cache_tagged_items if no new tags added") add_tags(self.alice_task, "new-tag") self.assertFalse(hasattr(self.alice_task, '._cache_tagged_items'), "should delete ._cache_tagged_items if new tags added")
def test_update_search_cache_add_tag(self): self.assertSearchTask("foo", [self.task1, self.task3]) add_tags(self.task2, "foo") self.assertSearchTask("foo", [self.task1, self.task2, self.task3]) add_tags(self.task2, "foo") self.assertSearchTask("foo", [self.task1, self.task2, self.task3])