if notify_formset.is_valid(): test_plan = form.save() notify_formset.instance = test_plan notify_formset.save() return HttpResponseRedirect(test_plan.get_absolute_url()) # taken from FormMixin.form_invalid() return self.render_to_response( self.get_context_data(notify_formset=notify_formset) ) @method_decorator( object_permission_required( "testplans.change_testplan", (TestPlan, "pk", "pk"), accept_global_perms=True ), name="dispatch", ) class Edit(UpdateView): model = TestPlan form_class = NewPlanForm template_name = "testplans/mutable.html" def get_form(self, form_class=None): form = super().get_form(form_class) if self.request.POST.get("product"): form.populate(product_id=self.request.POST["product"]) else: form.populate(product_id=self.object.product_id) return form
from django.urls import reverse from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from django.views.generic import DetailView from django.views.generic.base import TemplateView, View from django.views.generic.edit import CreateView, UpdateView from guardian.decorators import permission_required as object_permission_required from tcms.bugs.forms import BugCommentForm, NewBugForm from tcms.bugs.models import Bug from tcms.core.helpers.comments import add_comment from tcms.management.models import Component @method_decorator( object_permission_required("bugs.view_bug", (Bug, "pk", "pk"), accept_global_perms=True), name="dispatch", ) class Get(DetailView): model = Bug template_name = "bugs/get.html" http_method_names = ["get"] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["comment_form"] = BugCommentForm() context["comment_form"].populate(self.object.pk) context["executions"] = self.object.executions.all() context["OBJECT_MENU_ITEMS"] = [( "...", [
tester_ids = set() assignee_ids = set() for case_run in case_runs: if case_run.tested_by_id: tester_ids.add(case_run.tested_by_id) if case_run.assignee_id: assignee_ids.add(case_run.assignee_id) testers = User.objects.filter(pk__in=tester_ids).values_list( 'pk', 'username') assignees = User.objects.filter(pk__in=assignee_ids).values_list( 'pk', 'username') return (dict(testers.iterator()), dict(assignees.iterator())) @method_decorator(object_permission_required('testruns.view_testrun', (TestRun, 'pk', 'pk'), accept_global_perms=True), name='dispatch') class GetTestRunView(TemplateView): """Display testrun's details""" template_name = 'run/get.html' def get_context_data(self, **kwargs): # Get the test run try: # todo: this is redundant b/c we've got self.object pointing to the # same object and we don't have to read it twice from the DB # todo: self.object however isn't present b/c this is not a DetailsView # and we're not calling super() anywhere test_run = TestRun.objects.select_related().get(pk=kwargs['pk'])
from django.utils.translation import gettext_lazy as _ from django.views.generic import DetailView from django.views.generic.base import TemplateView, View from django.views.generic.edit import CreateView, UpdateView from guardian.decorators import permission_required as object_permission_required from tcms.bugs.forms import BugCommentForm, NewBugForm from tcms.bugs.models import Bug from tcms.core.helpers.comments import add_comment from tcms.core.response import ModifySettingsTemplateResponse from tcms.management.models import Component @method_decorator( object_permission_required('bugs.view_bug', (Bug, 'pk', 'pk'), accept_global_perms=True), name='dispatch') class Get(DetailView): model = Bug template_name = 'bugs/get.html' http_method_names = ['get'] response_class = ModifySettingsTemplateResponse def render_to_response(self, context, **response_kwargs): self.response_class.modify_settings = modify_settings( MENU_ITEMS={'append': [ ('...', [ ( _('Edit'), reverse('bugs-edit', args=[self.object.pk]) ),
def get_context_data(self, **kwargs): form = SearchCaseForm(self.request.GET) if self.request.GET.get("product"): form.populate(product_id=self.request.GET["product"]) else: form.populate() return { "form": form, } @method_decorator( object_permission_required("testcases.view_testcase", (TestCase, "pk", "pk"), accept_global_perms=True), name="dispatch", ) class TestCaseGetView(DetailView): model = TestCase template_name = "testcases/get.html" http_method_names = ["get"] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["executions"] = self.object.executions.select_related( "run", "tested_by", "assignee", "case", "status").order_by("run__plan", "run") context["OBJECT_MENU_ITEMS"] = [(
data.update({ 'test_case': case, 'test_case_text': test_case_text, 'execution': execution, 'comments_count': len(execution_comments), 'execution_comments': execution_comments, 'execution_logs': execution.history.all(), 'execution_status': execution_status, }) return data @method_decorator(object_permission_required('testcases.view_testcase', (TestCase, 'pk', 'pk'), accept_global_perms=True), name='dispatch') class TestCaseGetView(DetailView): model = TestCase template_name = 'testcases/get.html' http_method_names = ['get'] response_class = ModifySettingsTemplateResponse def render_to_response(self, context, **response_kwargs): self.response_class.modify_settings = modify_settings( MENU_ITEMS={ 'append': [( '...', [(_('Edit'), reverse('testcases-edit', args=[self.object.pk])),
name="dispatch") class SearchTestRunView(TemplateView): template_name = "testruns/search.html" def get_context_data(self, **kwargs): form = SearchRunForm(self.request.GET) form.populate(product_id=self.request.GET.get("product")) return { "form": form, } @method_decorator( object_permission_required("testruns.view_testrun", (TestRun, "pk", "pk"), accept_global_perms=True), name="dispatch", ) class GetTestRunView(DetailView): template_name = "testruns/get.html" http_method_names = ["get"] model = TestRun def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["execution_statuses"] = TestExecutionStatus.objects.order_by( "-weight", "name") context["confirmed_statuses"] = TestCaseStatus.objects.filter( is_confirmed=True) context["link_form"] = LinkReferenceForm()