def add_text(self, author, plan_text, create_date=datetime.now(), plan_text_version=None, text_checksum=None): if not plan_text_version: latest_text = self.latest_text() if latest_text: plan_text_version = latest_text.plan_text_version + 1 else: plan_text_version = 1 if not text_checksum: old_checksum = self.text_checksum() new_checksum = checksum(plan_text) if old_checksum == new_checksum: return self.latest_text() return self.text.create( plan_text_version=plan_text_version, author=author, create_date=create_date, plan_text=plan_text, checksum=text_checksum or checksum(plan_text) )
def setUpTestData(cls): super(TestGetPlainText, cls).setUpTestData() cls.action = '<p>First step:</p>' cls.effect = '''<ul> <li>effect 1</li> <li>effect 2</li> </ul>''' cls.setup = '<p><a href="/setup_guide">setup</a></p>' cls.breakdown = '<span>breakdown</span>' cls.text_author = User.objects.create_user(username='******', email='*****@*****.**') TestCaseText.objects.create( case=cls.case, case_text_version=1, author=cls.text_author, action=cls.action, effect=cls.effect, setup=cls.setup, breakdown=cls.breakdown, action_checksum=checksum(cls.action), effect_checksum=checksum(cls.effect), setup_checksum=checksum(cls.setup), breakdown_checksum=checksum(cls.breakdown))
def add_text(self, action, effect, setup, breakdown, author=None, create_date=datetime.now(), case_text_version=1): if not author: author = self.author new_checksum = checksum(action + effect + setup + breakdown) latest_text = self.latest_text() old_checksum = checksum(latest_text.action + latest_text.effect + latest_text.setup + latest_text.breakdown) if old_checksum == new_checksum: return latest_text case_text_version = self.latest_text_version() + 1 return TestCaseText.objects.create(case=self, case_text_version=case_text_version, create_date=create_date, author=author, action=action, effect=effect, setup=setup, breakdown=breakdown)
def add_text(self, author, plan_text): latest_text = self.latest_text() old_checksum = None if latest_text is not None: old_checksum = checksum(latest_text.plan_text) if old_checksum == checksum(plan_text): return self.latest_text() return self.text.create(author=author, plan_text=plan_text)
def add_text( self, action, effect, setup, breakdown, author=None, create_date=datetime.now(), case_text_version=1, action_checksum=None, effect_checksum=None, setup_checksum=None, breakdown_checksum=None): if not author: author = self.author new_action_checksum = checksum(action) new_effect_checksum = checksum(effect) new_setup_checksum = checksum(setup) new_breakdown_checksum = checksum(breakdown) old_action, old_effect, old_setup, old_breakdown = self.text_checksum() if old_action != new_action_checksum \ or old_effect != new_effect_checksum \ or old_setup != new_setup_checksum \ or old_breakdown != new_breakdown_checksum: case_text_version = self.latest_text_version() + 1 try: latest_text = TestCaseText.objects.create( case=self, case_text_version=case_text_version, create_date=create_date, author=author, action=action, effect=effect, setup=setup, breakdown=breakdown, action_checksum=action_checksum or new_action_checksum, effect_checksum=effect_checksum or new_effect_checksum, setup_checksum=setup_checksum or new_setup_checksum, breakdown_checksum=breakdown_checksum or new_breakdown_checksum) except: raise else: latest_text = self.latest_text() return latest_text
class TestCaseTextFactory(DjangoModelFactory): class Meta: model = 'testcases.TestCaseText' case = factory.SubFactory(TestCaseFactory) case_text_version = 1 author = factory.SubFactory(UserFactory) action = 'action' effect = 'effect' setup = 'setup' breakdown = 'breakdown' action_checksum = factory.LazyAttribute(lambda obj: checksum(obj.action)) effect_checksum = factory.LazyAttribute(lambda obj: checksum(obj.effect)) setup_checksum = factory.LazyAttribute(lambda obj: checksum(obj.setup)) breakdown_checksum = factory.LazyAttribute( lambda obj: checksum(obj.breakdown))
class TestPlanTextFactory(DjangoModelFactory): class Meta: model = 'testplans.TestPlanText' plan = factory.SubFactory(TestPlanFactory) plan_text_version = 1 author = factory.SubFactory(UserFactory) create_date = factory.LazyFunction(datetime.now) plan_text = factory.Sequence(lambda n: 'Plan text %d' % n) checksum = factory.LazyAttribute(lambda obj: checksum(obj.plan_text))
def edit(request, plan_id, template_name='plan/edit.html'): '''Edit test plan view''' try: tp = TestPlan.objects.select_related().get(plan_id=plan_id) except ObjectDoesNotExist: raise Http404 # If the form is submitted if request.method == "POST": form = EditPlanForm(request.POST, request.FILES) if request.POST.get('product'): form.populate(product_id=request.POST['product']) else: form.populate() # FIXME: Error handle if form.is_valid(): if form.cleaned_data.get('upload_plan_text'): # Set the summary form field to the uploaded text form.data['text'] = form.cleaned_data['text'] # Generate the form context_data = { 'form': form, 'test_plan': tp, } return render(template_name, context_data) if request.user.has_perm('testplans.change_testplan'): tp.name = form.cleaned_data['name'] tp.parent = form.cleaned_data['parent'] tp.product = form.cleaned_data['product'] tp.product_version = form.cleaned_data['product_version'] tp.type = form.cleaned_data['type'] tp.is_active = form.cleaned_data['is_active'] tp.extra_link = form.cleaned_data['extra_link'] tp.owner = form.cleaned_data['owner'] # IMPORTANT! tp.current_user is an instance attribute, # added so that in post_save, current logged-in user info # can be accessed. # Instance attribute is usually not a desirable solution. tp.current_user = request.user tp.save() if request.user.has_perm('testplans.add_testplantext'): new_text = request.POST.get('text') text_checksum = checksum(new_text) if not tp.text_exist() or text_checksum != tp.text_checksum(): tp.add_text(author=request.user, plan_text=request.POST.get('text'), text_checksum=text_checksum) if request.user.has_perm('testplans.change_envplanmap'): tp.clear_env_groups() if request.POST.get('env_group'): env_groups = EnvGroup.objects.filter( id__in=request.POST.getlist('env_group')) for env_group in env_groups: tp.add_env_group(env_group=env_group) # Update plan email settings update_plan_email_settings(tp, form) return HttpResponseRedirect( reverse('test_plan_url', args=[plan_id, slugify(tp.name)])) else: # Generate a blank form # Temporary use one environment group in this case if tp.env_group.all(): for env_group in tp.env_group.all(): env_group_id = env_group.id break else: env_group_id = None form = EditPlanForm(initial={ 'name': tp.name, 'product': tp.product_id, 'product_version': tp.product_version_id, 'type': tp.type_id, 'text': tp.latest_text() and tp.latest_text().plan_text or '', 'parent': tp.parent_id, 'env_group': env_group_id, 'is_active': tp.is_active, 'extra_link': tp.extra_link, 'owner': tp.owner, 'auto_to_plan_owner': tp.emailing.auto_to_plan_owner, 'auto_to_plan_author': tp.emailing.auto_to_plan_author, 'auto_to_case_owner': tp.emailing.auto_to_case_owner, 'auto_to_case_default_tester': tp.emailing.auto_to_case_default_tester, 'notify_on_plan_update': tp.emailing.notify_on_plan_update, 'notify_on_case_update': tp.emailing.notify_on_case_update, }) form.populate(product_id=tp.product_id) context_data = { 'test_plan': tp, 'form': form, } return render(request, template_name, context_data)
def edit(request, plan_id, template_name='plan/edit.html'): '''Edit test plan view''' # Define the default sub module SUB_MODULE_NAME = 'plans' try: tp = TestPlan.objects.select_related().get(plan_id=plan_id) except ObjectDoesNotExist: raise Http404 # If the form is submitted if request.method == "POST": form = EditPlanForm(request.POST, request.FILES) if request.POST.get('product'): form.populate(product_id=request.POST['product']) else: form.populate() # FIXME: Error handle if form.is_valid(): if form.cleaned_data.get('upload_plan_text'): # Set the summary form field to the uploaded text form.data['text'] = form.cleaned_data['text'] # Generate the form context_data = { 'module': MODULE_NAME, 'sub_module': SUB_MODULE_NAME, 'form': form, 'test_plan': tp, } return render_to_response(template_name, context_data, context_instance=RequestContext(request)) if request.user.has_perm('testplans.change_testplan'): tp.name = form.cleaned_data['name'] tp.parent = form.cleaned_data['parent'] tp.product = form.cleaned_data['product'] tp.product_version = form.cleaned_data['product_version'] tp.type = form.cleaned_data['type'] tp.is_active = form.cleaned_data['is_active'] tp.extra_link = form.cleaned_data['extra_link'] tp.owner = form.cleaned_data['owner'] # IMPORTANT! tp.current_user is an instance attribute, # added so that in post_save, current logged-in user info # can be accessed. # Instance attribute is usually not a desirable solution. tp.current_user = request.user tp.save() if request.user.has_perm('testplans.add_testplantext'): new_text = request.POST.get('text') text_checksum = checksum(new_text) if not tp.text_exist() or text_checksum != tp.text_checksum(): tp.add_text(author=request.user, plan_text=request.POST.get('text'), text_checksum=text_checksum) if request.user.has_perm('management.change_tcmsenvplanmap'): tp.clear_env_groups() if request.POST.get('env_group'): env_groups = TCMSEnvGroup.objects.filter( id__in=request.POST.getlist('env_group')) for env_group in env_groups: tp.add_env_group(env_group=env_group) # Update plan email settings update_plan_email_settings(tp, form) return HttpResponseRedirect( reverse('tcms.testplans.views.get', args=[plan_id, slugify(tp.name)])) else: # Generate a blank form # Temporary use one environment group in this case if tp.env_group.all(): for env_group in tp.env_group.all(): env_group_id = env_group.id break else: env_group_id = None form = EditPlanForm(initial={ 'name': tp.name, 'product': tp.product_id, 'product_version': tp.product_version_id, 'type': tp.type_id, 'text': tp.latest_text() and tp.latest_text().plan_text or '', 'parent': tp.parent_id, 'env_group': env_group_id, 'is_active': tp.is_active, 'extra_link': tp.extra_link, 'owner': tp.owner, 'auto_to_plan_owner': tp.emailing.auto_to_plan_owner, 'auto_to_plan_author': tp.emailing.auto_to_plan_author, 'auto_to_case_owner': tp.emailing.auto_to_case_owner, 'auto_to_case_default_tester': tp.emailing.auto_to_case_default_tester, 'notify_on_plan_update': tp.emailing.notify_on_plan_update, 'notify_on_case_update': tp.emailing.notify_on_case_update, 'notify_on_plan_delete': tp.emailing.notify_on_plan_delete, }) form.populate(product_id=tp.product_id) context_data = { 'module': MODULE_NAME, 'sub_module': SUB_MODULE_NAME, 'test_plan': tp, 'form': form, } return render_to_response(template_name, context_data, context_instance=RequestContext(request))