Ejemplo n.º 1
0
    def filter_plans(self):
        search_form = SearchPlanForm(self.request.GET)
        product_id = self.request.GET.get('product')
        search_form.populate(int(product_id) if product_id else None)

        plans = TestPlan.objects.none()

        if search_form.is_valid():
            # Determine the query is the user's plans and change the sub module value
            author = self.request.GET.get('author__email__startswith')
            req_user = self.request.user
            if req_user.is_authenticated and author in (req_user.username,
                                                        req_user.email):
                self.SUB_MODULE_NAME = "my_plans"

            plans = (TestPlan.list(search_form.cleaned_data).select_related(
                'author', 'type', 'product').order_by('-create_date'))

            plans = TestPlan.apply_subtotal(
                plans,
                cases_count=True,
                runs_count=True,
                children_count=True,
            )

        return search_form, plans
Ejemplo n.º 2
0
def recent(request, username):
    """List the recent plan/run"""

    if username != request.user.username:
        return http.HttpResponseRedirect(reverse('nitrate-login'))

    plans_subtotal = {
        item['is_active']: item['count']
        for item in TestPlan.objects.values('is_active').annotate(
            count=Count('pk'))
    }
    plans_count = sum(plans_subtotal.values())
    disabled_plans_count = plans_subtotal.get(False, 0)

    plans = (TestPlan.objects.filter(
        Q(author=request.user) | Q(owner=request.user),
        is_active=True).select_related('product',
                                       'type').order_by('-plan_id').only(
                                           'name', 'is_active', 'type__name',
                                           'product__name'))

    plans = TestPlan.apply_subtotal(plans, runs_count=True)

    runs = (TestRun.list({
        'people': request.user,
        'is_active': True,
        'status': 'running'
    }).only('summary', 'start_date').order_by('-run_id'))

    first_15_runs = runs[:15]

    subtotal = stats_case_runs_status([item.pk for item in first_15_runs])
    for run in first_15_runs:
        run.case_runs_subtotal = subtotal[run.pk]

    return render(request,
                  'profile/recent.html',
                  context={
                      'module': MODULE_NAME,
                      'user_profile': {
                          'user': request.user
                      },
                      'test_plans_count': plans_count,
                      'test_plans_disable_count': disabled_plans_count,
                      'test_runs_count': runs.count(),
                      'last_15_test_plans': plans[:15],
                      'last_15_test_runs': first_15_runs,
                  })
Ejemplo n.º 3
0
def construct_plans_treeview(request, plan_id):
    """Construct a plan's tree view"""
    plan = get_object_or_404(TestPlan, pk=plan_id)

    tree_plan_ids = plan.get_ancestor_ids() + plan.get_descendant_ids()
    tree_plan_ids.append(plan.pk)

    plans = (TestPlan.objects.filter(pk__in=tree_plan_ids).only(
        'pk', 'name', 'parent_id').order_by('parent_id', 'pk'))

    plans = TestPlan.apply_subtotal(plans,
                                    cases_count=True,
                                    runs_count=True,
                                    children_count=True)

    return render(request,
                  'plan/get_treeview.html',
                  context={
                      'current_plan_id': plan_id,
                      'plans': plans
                  })
Ejemplo n.º 4
0
def sum_orm_queries(plans: SmartDjangoQuery, cases: SmartDjangoQuery,
                    runs: SmartDjangoQuery, target: str) -> QuerySet:
    """Search target objects together with selected relatives

    :return: a QuerySet object representing queried target objects.
    :rtype: QuerySet
    """
    plans = plans.evaluate()
    cases = cases.evaluate()
    runs = runs.evaluate()

    if target == 'run':
        if plans is None and cases is None:
            if runs is None:
                runs = TestRun.objects.none()
        if runs is None:
            runs = TestRun.objects.all()
        if cases is not None:
            runs = runs.filter(case_run__case__in=cases).distinct()
        if plans is not None:
            runs = runs.filter(plan__in=plans).distinct()
        runs = runs.extra(select={'cases_count': RawSQL.total_num_caseruns})
        return (runs.select_related('manager', 'default_tester',
                                    'build__product', 'product_version').only(
                                        'pk', 'summary', 'stop_date',
                                        'manager__username',
                                        'default_tester__username',
                                        'build__product__name',
                                        'product_version__value'))

    if target == 'plan':
        if cases is None and runs is None:
            if plans is None:
                plans = TestPlan.objects.none()
        if plans is None:
            plans = TestPlan.objects.all()
        if cases is not None:
            plans = plans.filter(case__in=cases).distinct()
        if runs is not None:
            plans = plans.filter(run__in=runs).distinct()
        return (TestPlan.apply_subtotal(
            plans, cases_count=True, runs_count=True).select_related(
                'author', 'owner', 'type',
                'product').only('pk', 'name', 'is_active', 'author__username',
                                'owner__username', 'product__name',
                                'type__name'))

    if target == 'case':
        if plans is None and runs is None:
            if cases is None:
                cases = TestCase.objects.none()
        if cases is None:
            cases = TestCase.objects.all()
        if runs is not None:
            cases = cases.filter(case_run__run__in=runs).distinct()
        if plans is not None:
            cases = cases.filter(plan__in=plans).distinct()
        return (cases.select_related(
            'author', 'default_tester', 'case_status', 'category',
            'priority').only('pk', 'summary', 'create_date', 'is_automated',
                             'is_automated_proposed', 'author__username',
                             'default_tester__username', 'case_status__name',
                             'category__name', 'priority__value'))