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"]
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)
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")
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)
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)
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)