예제 #1
0
    def test_find_buildflow(self, user, data):
        assign_perm("plan.view_builds", user, data["planrepo"])

        request = self.req_factory.get("/testresults/something")
        request.user = user

        # Flow name needs to match name created in data fixture
        build_flow = utils.find_buildflow(request, data["build"].id,
                                          "flow_one")
        assert build_flow is data["buildflow"]
예제 #2
0
def build_flow_compare_to(request, build_id, flow):
    """ allows the user to select a build_flow to compare against the one they are on. """
    build_flow = find_buildflow(request, build_id, flow)
    # get a list of build_flows that could be compared to
    possible_comparisons = (
        BuildFlow.objects.filter(
            build__repo__exact=build_flow.build.repo,
            status__in=["success", "fail", "error"],
        )
        .exclude(pk=build_flow.id)
        .order_by("build")
    )
    # use a BuildFlowFilter to dynamically filter the queryset (and generate a form to display them)
    comparison_filter = BuildFlowFilter(request.GET, queryset=possible_comparisons)
    # LIMIT 10
    records = comparison_filter.qs[:10]

    data = {"build_flow": build_flow, "filter": comparison_filter, "records": records}
    return render(request, "testresults/build_flow_compare_to.html", data)
예제 #3
0
    def test_find_buildflow__no_user_perms(self, user, data):
        request = self.req_factory.get("/testresults/something")
        request.user = user

        with pytest.raises(PermissionDenied):
            utils.find_buildflow(request, data["build"].id, "random_flow_name")
예제 #4
0
def build_flow_tests(request, build_id, flow):
    build_flow = find_buildflow(request, build_id, flow)
    data = {"build_flow": build_flow}

    last_class = None
    results_by_class = []
    current_class_results = []

    results_query = build_flow.test_results.select_related(
        "method", "method__testclass")

    # Handle configurable display columns
    columns = request.GET.get("columns", "worst_limit,worst_limit_percent")
    columns = columns.split(",")

    data["columns"] = columns

    # Handle sorting and queryset filtering via GET parameter 'sort'
    sort = request.GET.get("sort", None)
    custom_sort = False
    if sort is None:
        sort = "method__testclass__name,method__name"
    else:
        custom_sort = True
    sort = sort.split(",")

    results_query = results_query.order_by(*sort)

    if custom_sort:
        for sort_field in sort:
            # Handle stripping '-' from start of sort field to handle DESC sorts
            actual_field = sort_field
            if sort_field.startswith("-"):
                actual_field = sort_field[1:]

            # Ensure that the sort field is not null
            results_query = results_query.filter(
                **{"%s__isnull" % actual_field: False})

    # Group results by Apex Class for display in template
    for result in results_query:

        # If we're entering a new class, add the last class's results to the results_by_class list
        if result.method.testclass != last_class:
            if current_class_results:
                results_by_class.append({
                    "class": last_class,
                    "results": current_class_results
                })
                current_class_results = []

        result_data = {"result": result, "columns": []}
        for column in columns:
            column_data = {
                "heading": column,
                "value": getattr(result, column),
                "status": "active",
            }
            percent = None
            if column.find("percent") != -1:
                percent = column_data["value"]
            elif column.find("used") != -1:
                percent = getattr(result, column.replace("_used", "_percent"))

            if percent is not None:
                if percent < 50:
                    column_data["status"] = "success"
                elif percent < 70:
                    column_data["status"] = "info"
                elif percent < 80:
                    column_data["status"] = "warning"
                else:
                    column_data["status"] = "danger"
            result_data["columns"].append(column_data)
        current_class_results.append(result_data)
        last_class = result.method.testclass

    # Add the last class's results to the results_by_class list
    if current_class_results:
        results_by_class.append({
            "class": last_class,
            "results": current_class_results
        })

    data["results_by_class"] = results_by_class
    data["sort"] = sort
    data["custom_sort"] = custom_sort
    data["columns"] = columns

    return render(request, "testresults/build_flow_tests.html", data)
예제 #5
0
파일: views.py 프로젝트: carlosvl/MetaCI
def build_flow_tests(request, build_id, flow):
    build_flow = find_buildflow(request, build_id, flow)
    data = {'build_flow': build_flow}

    last_class = None
    results_by_class = []
    current_class_results = []

    results_query = build_flow.test_results.select_related(
        "method", "method__testclass")

    # Handle configurable display columns
    columns = request.GET.get('columns', 'worst_limit,worst_limit_percent')
    columns = columns.split(',')

    data['columns'] = columns

    # Handle sorting and queryset filtering via GET parameter 'sort'
    sort = request.GET.get('sort', None)
    custom_sort = False
    if sort is None:
        sort = 'method__testclass__name,method__name'
    else:
        custom_sort = True
    sort = sort.split(',')

    results_query = results_query.order_by(*sort)

    if custom_sort:
        for sort_field in sort:
            # Handle stripping '-' from start of sort field to handle DESC sorts
            actual_field = sort_field
            if sort_field.startswith('-'):
                actual_field = sort_field[1:]

            # Ensure that the sort field is not null
            results_query = results_query.filter(
                **{'%s__isnull' % actual_field: False})

    # Group results by Apex Class for display in template
    for result in results_query:

        # If we're entering a new class, add the last class's results to the results_by_class list
        if result.method.testclass != last_class:
            if current_class_results:
                results_by_class.append({
                    'class': last_class,
                    'results': current_class_results
                })
                current_class_results = []

        result_data = {'result': result, 'columns': []}
        for column in columns:
            column_data = {
                'heading': column,
                'value': getattr(result, column),
                'status': 'active',
            }
            percent = None
            if column.find('percent') != -1:
                percent = column_data['value']
            elif column.find('used') != -1:
                percent = getattr(result, column.replace('_used', '_percent'))

            if percent is not None:
                if percent < 50:
                    column_data['status'] = 'success'
                elif percent < 70:
                    column_data['status'] = 'info'
                elif percent < 80:
                    column_data['status'] = 'warning'
                else:
                    column_data['status'] = 'danger'
            result_data['columns'].append(column_data)
        current_class_results.append(result_data)
        last_class = result.method.testclass

    # Add the last class's results to the results_by_class list
    if current_class_results:
        results_by_class.append({
            'class': last_class,
            'results': current_class_results
        })

    data['results_by_class'] = results_by_class
    data['sort'] = sort
    data['custom_sort'] = custom_sort
    data['columns'] = columns

    return render(request, 'testresults/build_flow_tests.html', data)
예제 #6
0
def build_flow_download_asset(request, build_id, flow, category):
    build_flow = find_buildflow(request, build_id, flow)
    asset = build_flow.assets.get(category=category)
    return redirect(asset.asset.url)