Example #1
0
    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)
        )
Example #2
0
    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))
Example #3
0
    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)
Example #4
0
    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)
        )
Example #5
0
    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))
Example #6
0
    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)
Example #7
0
    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
Example #8
0
    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
Example #9
0
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))
Example #10
0
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))
Example #11
0
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)
Example #12
0
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))