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
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
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)
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))
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)
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)
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))
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))
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))
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})))
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))
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))