Exemple #1
0
def query_testcases_from_request(request, plan=None):
    """Query TestCases according to criterias coming within REQUEST

    :param request: the REQUEST object.
    :param plan: instance of TestPlan to restrict only those TestCases belongs to
                 the TestPlan. Can be None. As you know, query from all TestCases.
    """
    search_form = build_cases_search_form(request)

    action = request.POST.get('a')
    if action == 'initial':
        # todo: build_cases_search_form will also check TESTCASE_OPERATION_ACTIONS
        # and return slightly different values in case of initialization
        # move the check there and just execute the query here if the data
        # is valid
        d_status = get_case_status(request.POST.get('template_type'))
        tcs = TestCase.objects.filter(case_status__in=d_status)
    elif action in TESTCASE_OPERATION_ACTIONS and search_form.is_valid():
        tcs = TestCase.list(search_form.cleaned_data, plan)
    else:
        tcs = TestCase.objects.none()

    # Search the relationship
    if plan:
        tcs = tcs.filter(plan=plan)

    tcs = tcs.select_related('author', 'default_tester', 'case_status',
                             'priority', 'category', 'reviewer')
    return tcs, search_form
Exemple #2
0
def query_testcases_from_request(request, plan=None):  # pylint: disable=missing-permission-required
    """Query TestCases according to criterias coming within REQUEST

    :param request: the REQUEST object.
    :type request: :class:`django.http.HttpRequest`

    :param plan: instance of TestPlan to restrict only those TestCases belongs to
                 the TestPlan. Can be None. As you know, query from all TestCases.
    :type plan: :class:`tcms.testplans.models.TestPlan`

    :return: Queryset with testcases and search form
    :rtype: :class:`django.db.models.query.QuerySet`, dict
    """
    search_form = build_cases_search_form(request, True, plan)

    action = request.POST.get('a')
    if action == 'initial':
        # todo: build_cases_search_form will also check TESTCASE_OPERATION_ACTIONS
        # and return slightly different values in case of initialization
        # move the check there and just execute the query here if the data
        # is valid
        d_status = get_case_status(request.POST.get('template_type'))
        tcs = TestCase.objects.filter(case_status__in=d_status)
    elif action in TESTCASE_OPERATION_ACTIONS and search_form.is_valid():
        tcs = TestCase.list(search_form.cleaned_data, plan)
    else:
        tcs = TestCase.objects.none()

    # Search the relationship
    if plan:
        tcs = tcs.filter(plan=plan)

    tcs = tcs.select_related('author', 'default_tester', 'case_status',
                             'priority', 'category', 'reviewer')
    return tcs, search_form
Exemple #3
0
    def post(self, request, plan_id):
        plan = get_object_or_404(TestPlan, pk=int(plan_id))

        search_mode = request.POST.get('search_mode')
        if search_mode == 'quick':
            form = quick_form = QuickSearchCaseForm(request.POST)
            normal_form = SearchCaseForm()
        else:
            form = normal_form = SearchCaseForm(request.POST)
            form.populate(product_id=request.POST.get('product'))
            quick_form = QuickSearchCaseForm()

        cases = []
        if form.is_valid():
            cases = TestCase.list(form.cleaned_data)
            cases = cases.select_related(
                'author', 'default_tester', 'case_status', 'priority'
            ).only(
                'pk', 'summary', 'create_date', 'author__email',
                'default_tester__email', 'case_status__name',
                'priority__value'
            ).exclude(
                case_id__in=plan.case.values_list('case_id', flat=True))

        context = {
            'test_plan': plan,
            'test_cases': cases,
            'search_form': normal_form,
            'quick_form': quick_form,
            'search_mode': search_mode
        }
        return render(request, self.template_name, context=context)
Exemple #4
0
 def test_list_by_multiple_criteria(self):
     cases = TestCase.list({
         'category':
         TestCaseCategory.objects.get(name='functional'),
         'issue_key': ['2000'],
     })
     self.assertEqual([self.case_1], list(cases))
Exemple #5
0
    def post(self, request, plan_id):
        plan = get_object_or_404(TestPlan, pk=int(plan_id))

        search_mode = request.POST.get('search_mode')
        if search_mode == 'quick':
            form = quick_form = QuickSearchCaseForm(request.POST)
            normal_form = SearchCaseForm()
        else:
            form = normal_form = SearchCaseForm(request.POST)
            form.populate(product_id=request.POST.get('product'))
            quick_form = QuickSearchCaseForm()

        if form.is_valid():
            cases = TestCase.list(form.cleaned_data)
            cases = cases.select_related(
                'author', 'default_tester', 'case_status', 'priority'
            ).only(
                'pk', 'summary', 'create_date', 'author__email',
                'default_tester__email', 'case_status__name',
                'priority__value'
            ).exclude(
                case_id__in=plan.case.values_list('case_id', flat=True))

        context = {
            'module': MODULE_NAME,
            'sub_module': self.SUB_MODULE_NAME,
            'test_plan': plan,
            'test_cases': cases,
            'search_form': normal_form,
            'quick_form': quick_form,
            'search_mode': search_mode
        }
        return render(request, self.template_name, context=context)
Exemple #6
0
        def link_cases(self, template_name='plan/search_case.html'):
            """Handle to form to add case to plans"""
            SUB_MODULE_NAME = 'plans'
            tcs = None

            if request.POST.get('action') == 'add_to_plan':
                if request.user.has_perm('testcases.add_testcaseplan'):
                    tcs = TestCase.objects.filter(
                        case_id__in=request.POST.getlist('case'))
                    for tc in tcs:
                        tp.add_case(tc)
                else:
                    return HttpResponse("Permission Denied")

                return HttpResponseRedirect(
                    reverse('test_plan_url_short', args=[plan_id]))

            search_mode = request.POST.get('search_mode')
            if request.POST.get('action') == 'search':

                if search_mode == 'quick':
                    form = quick_form = QuickSearchCaseForm(request.POST)
                    normal_form = SearchCaseForm()
                else:
                    form = normal_form = SearchCaseForm(request.POST)
                    form.populate(product_id=request.POST.get('product'))
                    quick_form = QuickSearchCaseForm()

                if form.is_valid():
                    tcs = TestCase.list(form.cleaned_data)
                    tcs = tcs.select_related(
                        'author', 'default_tester', 'case_status',
                        'priority').only('pk', 'summary', 'create_date',
                                         'author__email',
                                         'default_tester__email',
                                         'case_status__name',
                                         'priority__value')
                    tcs = tcs.exclude(
                        case_id__in=tp.case.values_list('case_id', flat=True))
            else:
                normal_form = SearchCaseForm(
                    initial={
                        'product': tp.product_id,
                        'product_version': tp.product_version_id,
                        'case_status_id': TestCaseStatus.get_CONFIRMED()
                    })
                quick_form = QuickSearchCaseForm()

            context_data = {
                'module': MODULE_NAME,
                'sub_module': SUB_MODULE_NAME,
                'test_plan': tp,
                'test_cases': tcs,
                'search_form': normal_form,
                'quick_form': quick_form,
                'search_mode': search_mode
            }
            return render(request, template_name, context_data)
Exemple #7
0
        def link_cases(self, template_name='plan/search_case.html'):
            """Handle to form to add case to plans"""
            SUB_MODULE_NAME = 'plans'
            tcs = None

            if request.POST.get('action') == 'add_to_plan':
                if request.user.has_perm('testcases.add_testcaseplan'):
                    tcs = TestCase.objects.filter(case_id__in=request.POST.getlist('case'))
                    for tc in tcs:
                        tp.add_case(tc)
                else:
                    return HttpResponse("Permission Denied")

                return HttpResponseRedirect(
                    reverse('tcms.testplans.views.get', args=[plan_id]))

            search_mode = request.POST.get('search_mode')
            if request.POST.get('action') == 'search':

                if search_mode == 'quick':
                    form = quick_form = QuickSearchCaseForm(request.POST)
                    normal_form = SearchCaseForm()
                else:
                    form = normal_form = SearchCaseForm(request.POST)
                    form.populate(product_id=request.POST.get('product'))
                    quick_form = QuickSearchCaseForm()

                if form.is_valid():
                    tcs = TestCase.list(form.cleaned_data)
                    tcs = tcs.select_related(
                        'author', 'default_tester', 'case_status', 'priority').only(
                            'pk', 'summary', 'create_date', 'author__email',
                            'default_tester__email', 'case_status__name', 'priority__value')
                    tcs = tcs.exclude(case_id__in=tp.case.values_list('case_id', flat=True))
            else:
                normal_form = SearchCaseForm(initial={
                    'product': tp.product_id,
                    'product_version': tp.product_version_id,
                    'case_status_id': TestCaseStatus.get_CONFIRMED()
                })
                quick_form = QuickSearchCaseForm()

            context_data = {
                'module': MODULE_NAME,
                'sub_module': SUB_MODULE_NAME,
                'test_plan': tp,
                'test_cases': tcs,
                'search_form': normal_form,
                'quick_form': quick_form,
                'search_mode': search_mode
            }
            return render_to_response(template_name, context_data,
                                      context_instance=RequestContext(request))
Exemple #8
0
    def test_list_by_search_keyword(self):
        criteria = [
            {
                'search': 'Test list'
            },
            {
                'search': self.case_author.email.split('@')[0]
            },
        ]

        for item in criteria:
            cases = TestCase.list(item)
            self.assertEqual([self.case_1], list(cases))
Exemple #9
0
    def test_simple_list_by_property(self):
        criteria = [
            {
                'summary': 'list case'
            },
            {
                'author': self.case_1.author.username
            },
            {
                'author': self.case_1.author.email
            },
            {
                'default_tester': self.case_1.default_tester.username
            },
            {
                'default_tester': self.case_1.default_tester.email
            },
            {
                'tag__name__in': ['python']
            },
            {
                'category': TestCaseCategory.objects.get(name='functional')
            },
            {
                'priority': [Priority.objects.get(value='P3')]
            },
            {
                'case_status': [TestCaseStatus.objects.first()]
            },
            {
                'component': Component.objects.get(name='db')
            },
            {
                'is_automated': 1
            },
            {
                'is_automated_proposed': True
            },
            {
                'product': self.product.pk
            },
            {
                'issue_key': ['2000', '1000']
            },
        ]

        for item in criteria:
            cases = TestCase.list(item)
            self.assertEqual([self.case_1], list(cases))
Exemple #10
0
 def test_get_empty_result(self):
     result = Product.objects.aggregate(max_pk=Max('pk'))
     unknown_pk = result['max_pk'] + 1
     self.assertListEqual([], list(TestCase.list({'product': unknown_pk})))
Exemple #11
0
 def test_list_by_plan(self):
     cases = TestCase.list({
         'product': self.product.pk
     }, plan=self.plan).order_by('pk')
     self.assertEqual([self.case_1], list(cases))
Exemple #12
0
 def test_list_a_set_of_cases(self):
     cases = TestCase.list(
         {'case_id_set': [self.case_2.pk, self.case_5.pk]})
     self.assertEqual([self.case_2, self.case_5], list(cases))