Beispiel #1
0
 def test_delete_news_for_comment(self):
     self.generate_fixture_comment()
     news_service.create_news_for_task_and_comment(self.task_dict,
                                                   self.comment)
     news_service.delete_news_for_comment(self.comment["id"])
     news_list = News.get_all()
     self.assertEqual(len(news_list), 0)
Beispiel #2
0
def _manage_subscriptions(task, comment, status_changed):
    notifications_service.create_notifications_for_task_and_comment(
        task, comment, change=status_changed
    )
    news_service.create_news_for_task_and_comment(
        task, comment, change=status_changed
    )
Beispiel #3
0
 def test_get_last_news_for_project_with_dates(self):
     self.generate_fixture_comment()
     for i in range(1, 7):
         comment = comments_service.new_comment(
             self.task.id,
             self.task_status.id,
             self.user["id"],
             "comment %s" % i,
         )
         news_service.create_news_for_task_and_comment(
             self.task_dict,
             comment,
             created_at=datetime.now() - timedelta(days=i),
         )
     news_list = news_service.get_last_news_for_project(
         self.task_dict["project_id"]
     )
     self.assertEqual(len(news_list["data"]), 6)
     date = (datetime.now() - timedelta(days=2)).strftime("%Y-%m-%d")
     news_list = news_service.get_last_news_for_project(
         self.task_dict["project_id"], after=date
     )
     self.assertEqual(len(news_list["data"]), 2)
     news_list = news_service.get_last_news_for_project(
         self.task_dict["project_id"], before=date
     )
     self.assertEqual(len(news_list["data"]), 4)
Beispiel #4
0
 def test_create_news_for_task_and_comment(self):
     self.generate_fixture_comment()
     news_service.create_news_for_task_and_comment(self.task_dict,
                                                   self.comment)
     news_list = News.get_all()
     self.assertEqual(len(news_list), 1)
     self.assertEqual(str(news_list[0].author_id), self.user["id"])
     self.assertEqual(str(news_list[0].task_id), self.task_dict["id"])
     self.assertEqual(str(news_list[0].comment_id), self.comment["id"])
Beispiel #5
0
    def post(self, task_id):
        (task_status_id, comment, person_id) = self.get_arguments()

        task = tasks_service.get_task(task_id)
        user_service.check_project_access(task["project_id"])
        task_status = tasks_service.get_task_status(task_status_id)

        if person_id:
            person = persons_service.get_person(person_id)
        else:
            person = persons_service.get_current_user()

        comment = tasks_service.create_comment(
            object_id=task_id,
            object_type="Task",
            task_status_id=task_status_id,
            person_id=person["id"],
            text=comment,
        )

        status_changed = task_status_id != task["task_status_id"]
        new_data = {
            "task_status_id": task_status_id,
            "last_comment_date": comment["created_at"],
        }
        if status_changed:
            if task_status["is_retake"]:
                retake_count = task["retake_count"]
                if retake_count is None or retake_count == "NoneType":
                    retake_count = 0
                new_data["retake_count"] = retake_count + 1

            if task_status["is_done"]:
                new_data["end_date"] = datetime.datetime.now()
            else:
                new_data["end_date"] = None

            if (task_status["short_name"] == "wip"
                    and task["real_start_date"] is None):
                new_data["real_start_date"] = datetime.datetime.now()

        tasks_service.update_task(task_id, new_data)
        task = tasks_service.get_task_with_relations(task_id)

        notifications_service.create_notifications_for_task_and_comment(
            task, comment, change=status_changed)
        news_service.create_news_for_task_and_comment(task,
                                                      comment,
                                                      change=status_changed)

        comment["task_status"] = task_status
        comment["person"] = person
        return comment, 201
Beispiel #6
0
    def test_get_last_news_for_project(self):
        self.generate_fixture_comment()
        for i in range(1, 81):
            comment = comments_service.new_comment(
                self.task.id,
                self.task_status.id,
                self.user["id"],
                "comment %s" % i,
            )
            news = news_service.create_news_for_task_and_comment(
                self.task_dict, comment)
        news_list = self.get("/data/projects/%s/news" %
                             self.task_dict["project_id"])
        self.assertEqual(len(news_list["data"]), 50)
        news = news_list["data"][0]
        self.assertEqual(news["project_name"], "Cosmos Landromat")
        self.assertEqual(news["full_entity_name"], "E01 / S01 / P01")
        self.assertEqual(news["project_id"], self.task_dict["project_id"])

        news_list = self.get("/data/projects/%s/news?page=2" %
                             self.task_dict["project_id"])
        self.assertEqual(len(news_list["data"]), 30)

        news = self.get("/data/projects/%s/news/%s" %
                        (self.task_dict["project_id"], news["id"]))
        self.assertIsNotNone(news["created_at"])
Beispiel #7
0
    def test_get_last_news_for_project(self):
        self.generate_fixture_comment()
        for i in range(1, 81):
            comment = comments_service.new_comment(
                self.task.id,
                self.task_status.id,
                self.user["id"],
                "comment %s" % i
            )
            news = news_service.create_news_for_task_and_comment(
                self.task_dict,
                comment
            )
        news_list = news_service.get_last_news_for_project(
            self.task_dict["project_id"]
        )
        self.assertEqual(len(news_list), 50)
        news = news_list[0]
        self.assertEqual(news["project_name"], "Cosmos Landromat")
        self.assertEqual(news["full_entity_name"], "E01 / S01 / P01")
        self.assertEqual(news["project_id"], self.task_dict["project_id"])

        news_list = news_service.get_last_news_for_project(
            self.task_dict["project_id"],
            page=2
        )
        self.assertEqual(len(news_list), 30)

        news_list = news_service.get_last_news_for_project(
            self.task_dict["project_id"],
            news_id=news["id"]
        )
        self.assertEqual(len(news_list), 1)
Beispiel #8
0
    def post(self, task_id):
        (task_status_id, comment, person_id, created_at,
         checklist) = self.get_arguments()

        task = tasks_service.get_task(task_id)
        user_service.check_project_access(task["project_id"])
        user_service.check_entity_access(task["entity_id"])
        task_status = tasks_service.get_task_status(task_status_id)

        if not permissions.has_manager_permissions():
            person_id = None
            created_at = None

        if person_id:
            person = persons_service.get_person(person_id)
        else:
            person = persons_service.get_current_user()

        comment = tasks_service.create_comment(object_id=task_id,
                                               object_type="Task",
                                               files=request.files,
                                               person_id=person["id"],
                                               task_status_id=task_status_id,
                                               text=comment,
                                               checklist=checklist,
                                               created_at=created_at)

        status_changed = task_status_id != task["task_status_id"]
        new_data = {
            "task_status_id": task_status_id,
            "last_comment_date": comment["created_at"],
        }
        if status_changed:
            if task_status["is_retake"]:
                retake_count = task["retake_count"]
                if retake_count is None or retake_count == "NoneType":
                    retake_count = 0
                new_data["retake_count"] = retake_count + 1

            if task_status["is_done"]:
                new_data["end_date"] = datetime.datetime.now()
            else:
                new_data["end_date"] = None

            if (task_status["short_name"] == "wip"
                    and task["real_start_date"] is None):
                new_data["real_start_date"] = datetime.datetime.now()

        tasks_service.update_task(task_id, new_data)
        if status_changed:
            events.emit(
                "task:status-changed", {
                    "task_id": task_id,
                    "new_task_status_id": new_data["task_status_id"],
                    "previous_task_status_id": task["task_status_id"]
                })

        task = tasks_service.get_task_with_relations(task_id)

        notifications_service.create_notifications_for_task_and_comment(
            task, comment, change=status_changed)
        news_service.create_news_for_task_and_comment(task,
                                                      comment,
                                                      change=status_changed)

        comment["task_status"] = task_status
        comment["person"] = person
        return comment, 201