Ejemplo n.º 1
0
    def get(self, build: Build):
        """
        Return a list of test cases for a given build.
        """
        job_ids = db.session.query(Job.id).filter(Job.build_id == build.id).subquery()

        query = db.session.query(
            TestCase.hash,
            TestCase.name,
            array_agg_row(
                TestCase.id, TestCase.job_id, TestCase.duration, TestCase.result
            ).label(
                "runs"
            ),
        ).filter(
            TestCase.job_id.in_(job_ids)
        ).group_by(
            TestCase.hash, TestCase.name
        )

        result = request.args.get("result")
        if result:
            try:
                query = query.filter(TestCase.result == getattr(Result, result))
            except AttributeError:
                raise NotImplementedError

        query = query.order_by(
            (
                array_agg(TestCase.result).label("results").contains([Result.failed])
            ).desc(),
            TestCase.name.asc(),
        )

        return self.paginate_with_schema(testcases_schema, query)
Ejemplo n.º 2
0
    def get(self, build: Build):
        """
        Return a list of failure reasons for a given build.
        """
        query = (db.session.query(
            FailureReason.reason,
            array_agg_row(FailureReason.id,
                          FailureReason.job_id).label("runs"),
        ).filter(FailureReason.build_id == build.id).group_by(
            FailureReason.reason))

        query = query.order_by(FailureReason.reason.asc())

        return self.paginate_with_schema(failurereasons_schema, query)
Ejemplo n.º 3
0
    def get(self, revision: Revision):
        """
        Return a list of test cases for a given revision.
        """
        build = fetch_build_for_revision(revision)
        if not build:
            return self.respond(status=404)

        build_ids = [original.id for original in build.original]

        job_query = db.session.query(Job.id).filter(
            Job.build_id.in_(build_ids))

        result = request.args.get("allowed_failures")
        if result == "false":
            job_query = job_query.filter(Job.allow_failure == False)  # NOQA
        job_ids = job_query.subquery()

        query = (db.session.query(
            TestCase.hash,
            TestCase.name,
            array_agg_row(TestCase.id, TestCase.job_id, TestCase.duration,
                          TestCase.result).label("runs"),
        ).filter(TestCase.job_id.in_(job_ids)).group_by(
            TestCase.hash, TestCase.name))

        result = request.args.get("result")
        if result:
            try:
                query = query.filter(
                    TestCase.result == getattr(Result, result))
            except AttributeError:
                raise NotImplementedError

        query = query.order_by(
            (array_agg(TestCase.result).label("results").contains(
                [Result.failed])).desc(),
            TestCase.name.asc(),
        )

        schema = AggregateTestCaseSummarySchema(many=True,
                                                strict=True,
                                                exclude=("build", ))
        return self.paginate_with_schema(schema, query)
Ejemplo n.º 4
0
    def get(self, revision: Revision):
        """
        Return a list of failure reasons for a given revision.
        """
        build = fetch_build_for_revision(revision)
        if not build:
            return self.respond(status=404)

        build_ids = [original.id for original in build.original]

        query = (db.session.query(
            FailureReason.reason,
            array_agg_row(FailureReason.id,
                          FailureReason.job_id).label("runs"),
        ).filter(FailureReason.build_id.in_(build_ids)).group_by(
            FailureReason.reason))

        query = query.order_by(FailureReason.reason.asc())

        return self.paginate_with_schema(failurereasons_schema, query)
Ejemplo n.º 5
0
    def get(self, build: Build):
        """
        Return a list of test cases for a given build.
        """
        job_query = db.session.query(Job.id).filter(Job.build_id == build.id)

        result = request.args.get("allowed_failures")
        if result == "false":
            job_query = job_query.filter(Job.allow_failure == False)  # NOQA
        job_ids = job_query.subquery()

        query = (
            db.session.query(
                TestCase.hash,
                TestCase.name,
                array_agg_row(
                    TestCase.id, TestCase.job_id, TestCase.duration, TestCase.result
                ).label("runs"),
            )
            .filter(TestCase.job_id.in_(job_ids))
            .group_by(TestCase.hash, TestCase.name)
        )

        result = request.args.get("result")
        if result:
            try:
                query = query.filter(TestCase.result == getattr(Result, result))
            except AttributeError:
                raise NotImplementedError

        query = query.order_by(
            (
                array_agg(TestCase.result).label("results").contains([Result.failed])
            ).desc(),
            TestCase.name.asc(),
        )

        schema = AggregateTestCaseSummarySchema(
            many=True, strict=True, context={"build": build}
        )
        return self.paginate_with_schema(schema, query)
Ejemplo n.º 6
0
    def get(self, build: Build):
        """
        Return a list of failure reasons for a given build.
        """
        job_query = db.session.query(Job.id).filter(Job.build_id == build.id)

        result = request.args.get("allowed_failures")
        if result == "false":
            job_query = job_query.filter(Job.allow_failure == False)  # NOQA
        job_ids = job_query.subquery()

        query = (db.session.query(
            FailureReason.reason,
            array_agg_row(FailureReason.id,
                          FailureReason.job_id).label("runs"),
        ).filter(FailureReason.job_id.in_(job_ids)).group_by(
            FailureReason.reason))

        query = query.order_by(FailureReason.reason.asc())

        return self.paginate_with_schema(failurereasons_schema, query)
Ejemplo n.º 7
0
    def get(self, repo: Repository, test_hash: str):
        query = (
            db.session.query(
                Build.id.label("build_id"),
                Build.number,
                TestCase.hash,
                TestCase.name,
                array_agg_row(TestCase.id, TestCase.job_id, TestCase.duration,
                              TestCase.result).label("runs"),
            )
            # .join(Job, Job.id == TestCase.job_id)
            # .join(Build, Build.id == Job.build_id)
            .filter(
                TestCase.hash == test_hash,
                TestCase.repository_id == repo.id,
                Build.id == Job.build_id,
                Job.id == TestCase.job_id,
            ).group_by(Build.id, Build.number, TestCase.hash, TestCase.name))

        result = request.args.get("result")
        if result:
            try:
                query = query.filter(
                    TestCase.result == getattr(Result, result))
            except AttributeError:
                raise NotImplementedError

        query = query.order_by(
            Build.number.desc(),
            (array_agg(TestCase.result).label("results").contains(
                [Result.failed])).desc(),
            TestCase.name.asc(),
        )

        schema = AggregateTestCaseSummarySchema(many=True,
                                                strict=True,
                                                context={"repo": repo})
        return self.paginate_with_schema(schema, query)