Beispiel #1
0
    def setUp(self):
        self.topic = Topic(name='topic1', grant=Grant.objects.create(full_name='g', short_name='g', slug='g'))
        self.topic.save()

        self.ticket1 = Ticket(name='foo', requested_text='req1', topic=self.topic, description='foo foo')
        self.ticket1.save()

        self.ticket2 = Ticket(name='bar', requested_text='req2', topic=self.topic, description='bar bar')
        self.ticket2.save()
Beispiel #2
0
    def test_empty_ticket(self):
        empty_ticket = Ticket(topic=self.topic, requested_text='someone', name='empty ticket')
        empty_ticket.save()

        self.assertEqual(0, empty_ticket.media_count())
        self.assertEqual(0, empty_ticket.expeditures()['count'])
        self.assertEqual(0, self.topic.media_count())
        self.assertEqual(0, self.topic.expeditures()['count'])
Beispiel #3
0
    def setUp(self):
        self.topic = Topic(name='test_topic', open_for_tickets=True, ticket_media=True, grant=Grant.objects.create(full_name='g', short_name='g', slug='g'))
        self.topic.save()

        self.user = User(username='******')
        self.user.save()

        self.ticket = Ticket(name='foo', requested_user=self.user, topic=self.topic, description='foo foo')
        self.ticket.save()
Beispiel #4
0
    def setUp(self):
        self.topic = Topic(name='topic', grant=Grant.objects.create(full_name='g', short_name='g', slug='g'))
        self.topic.save()

        self.password = '******'
        self.user = User(username='******')
        self.user.set_password(self.password)
        self.user.save()

        self.ticket = Ticket(name='ticket', topic=self.topic, requested_user=None, requested_text='foo')
        self.ticket.save()
Beispiel #5
0
    def handle(self, *args, **options):
        # if Ticket.objects.exists():
        #     print('Already loaded exiting')
        #     return
        print('Loading data...')

        for row in DictReader(open('incidentseed.csv')):
            ticket = Ticket()
            ticket.status = row['status']
            ticket.number = row['number']
            ticket.assigned = row['assigned']
            ticket.save()
Beispiel #6
0
    def generate_and_add_tickets(self, amount=60):
        name_prefix = "Example ticket number "
        try:
            last_example_ticket = Ticket.objects.filter(name__startswith=name_prefix).order_by('pk').reverse()[0]
        except IndexError:
            start_num = 1
        else:
            start_num = int(search(r'(\d+)$', last_example_ticket.name).group(0)) + 1

        def generate_random_date():
            year_today = datetime.today().year
            # probably shouldn't matter, but preventing future dates.
            year = randint(year_today - 3, year_today - 1)
            month = randint(1, 12)
            # february only has 28 days, making this harder by
            # including 29-31 is unnecessary
            day = randint(1, 28)
            hour = randint(1, 23)
            minute = randint(1, 59)
            return datetime(year, month, day, hour, minute, tzinfo=UTC)

        user_objects = User.objects.filter(username__startswith=USERNAME_PREFIX)
        if not user_objects.exists():
            raise DataError('To create example tickets, at least one example user has to be created.')
        topic_objects = Topic.objects.all()
        subtopic_objects = Subtopic.objects.all()
        ticket_query_list = []
        for n in range(start_num, start_num + amount):
            created_and_updated = generate_random_date()
            topic = choice(topic_objects)
            try:
                subtopic = choice(subtopic_objects.filter(topic=topic))
            except IndexError:
                # topic has no subtopics
                subtopic = None

            ticket_query_list.append(Ticket(
                created=created_and_updated,
                updated=created_and_updated,
                event_date=generate_random_date(),
                requested_user=choice(user_objects),
                name="{}{}".format(name_prefix, n),
                topic=topic,
                subtopic=subtopic,
                rating_percentage=randint(0, 100),
                mandatory_report=choice([True, False]),
                description=("Space for further notes. If you're entering a trip "
                             "tell us where did you go and what you did there."),
                supervisor_notes=("This space is for notes of project "
                                  "supervisors and accounting staff."),
            ))
        Ticket.objects.bulk_create(ticket_query_list)
Beispiel #7
0
    def test_full_ticket(self):
        full_ticket = Ticket(topic=self.topic, requested_text='someone', name='full ticket')
        full_ticket.save()
        full_ticket.mediainfoold_set.create(description='Vague pictures')
        full_ticket.mediainfoold_set.create(description='Counted pictures', count=15)
        full_ticket.mediainfoold_set.create(description='Even more pictures', count=16)
        full_ticket.mediainfo_set.create(name='test.jpg')
        full_ticket.expediture_set.create(description='Some expense', amount=99)
        full_ticket.expediture_set.create(description='Some other expense', amount=101)

        self.assertEqual(32, full_ticket.media_count())
        self.assertEqual({'count': 2, 'amount': 200}, full_ticket.expeditures())
        self.assertEqual(32, self.topic.media_count())
        self.assertEqual({'count': 2, 'amount': 200}, self.topic.expeditures())
Beispiel #8
0
    def setUp(self):
        self.user = User(username='******')
        self.user.save()

        self.topic = Topic(name='test_topic', ticket_expenses=True, grant=Grant.objects.create(full_name='g', short_name='g', slug='g'))
        self.topic.save()

        self.ticket = Ticket(name='foo', requested_user=self.user, topic=self.topic, rating_percentage=50)
        self.ticket.save()
        self.ticket.add_acks('content', 'docs', 'archive')
        self.ticket.expediture_set.create(description='foo', amount=200)
        self.ticket.expediture_set.create(description='foo', amount=100)
        self.ticket.mediainfoold_set.create(description='foo', count=5)
        self.ticket.mediainfo_set.create(name='test.jpg')
        self.ticket.mediainfo_set.create(name='test2.jpg')

        self.ticket2 = Ticket(name='foo', requested_user=self.user, topic=self.topic, rating_percentage=100)
        self.ticket2.save()
        self.ticket2.add_acks('content', 'docs', 'archive')
        self.ticket2.expediture_set.create(description='foo', amount=600)
        self.ticket2.expediture_set.create(description='foo', amount=10)
        self.ticket2.mediainfoold_set.create(description='foo', count=5)
        self.ticket2.mediainfoold_set.create(description='foo', count=3)
        self.ticket2.mediainfo_set.create(name='test.jpg')
Beispiel #9
0
    def test_correct_choices(self):
        grant = Grant.objects.create(full_name='g', short_name='g', slug='g')
        t_closed = Topic(name='t1', open_for_tickets=False, grant=grant)
        t_closed.save()
        t_open = Topic(name='t2', open_for_tickets=True, grant=grant)
        t_open.save()
        t_assigned = Topic(name='t3', open_for_tickets=False, grant=grant)
        t_assigned.save()
        ticket = Ticket(name='ticket', topic=t_assigned)
        ticket.save()

        from tracker.views import get_edit_ticket_form_class
        EditForm = get_edit_ticket_form_class(ticket)
        choices = {t.id for t in EditForm().fields['topic'].queryset.all()}
        wanted_choices = {t_open.id, t_assigned.id}
        self.assertEqual(wanted_choices, choices)
Beispiel #10
0
    def test_ticket_edit(self):
        topic = Topic(name='topic', grant=Grant.objects.create(full_name='g', short_name='g', slug='g'))
        topic.save()

        statutory_topic = Topic(name='statutory_topic', ticket_statutory_declaration=True, grant=Grant.objects.get(short_name='g'))
        statutory_topic.save()

        subtopic = Subtopic(name='subtopic', topic=topic)
        subtopic2 = Subtopic(name='subtopic2', topic=statutory_topic)
        subtopic.save()
        subtopic2.save()

        password = '******'
        user = User(username='******')
        user.set_password(password)
        user.save()

        ticket = Ticket(name='ticket', topic=topic, requested_user=None, requested_text='foo')
        ticket.save()
        ticket.add_acks('close')

        c = Client()
        response = c.get(reverse('edit_ticket', kwargs={'pk': ticket.id}))
        self.assertEqual(302, response.status_code)  # should be redirect to login page

        c.login(username=user.username, password=password)
        response = c.get(reverse('edit_ticket', kwargs={'pk': ticket.id}))
        self.assertEqual(403, response.status_code)  # denies edit of non-own ticket

        ticket.requested_user = user
        ticket.requested_text = ''
        ticket.save()
        response = c.get(reverse('edit_ticket', kwargs={'pk': ticket.id}))
        self.assertEqual(403, response.status_code)  # still deny edit, ticket locked

        ticket.ticketack_set.filter(ack_type='close').delete()
        response = c.get(reverse('edit_ticket', kwargs={'pk': ticket.id}))
        self.assertEqual(200, response.status_code)  # now it should pass

        # try to submit the form
        response = c.post(reverse('edit_ticket', kwargs={'pk': ticket.id}), {
            'name': 'new name',
            'topic': ticket.topic.id,
            'description': 'new desc',
            'deposit': '0',
            'expediture-INITIAL_FORMS': '0',
            'expediture-TOTAL_FORMS': '0',
            'preexpediture-INITIAL_FORMS': '0',
            'preexpediture-TOTAL_FORMS': '0',
        })
        self.assertRedirects(response, reverse('ticket_detail', kwargs={'pk': ticket.id}))

        # check changed ticket data
        ticket = Ticket.objects.get(id=ticket.id)
        self.assertEqual(user, ticket.requested_user)
        self.assertEqual('new name', ticket.name)
        self.assertEqual('new desc', ticket.description)

        # b0rked expediture items aborts the submit
        response = c.post(reverse('edit_ticket', kwargs={'pk': ticket.id}), {
            'name': 'ticket',
            'topic': ticket.topic.id,
            'description': 'some desc',
            'deposit': '0',
            'expediture-INITIAL_FORMS': '0',
            'expediture-TOTAL_FORMS': '1',
            'expediture-0-description': 'foo',
            'expediture-0-amount': '',
            'preexpediture-INITIAL_FORMS': '0',
            'preexpediture-TOTAL_FORMS': '0',
        })
        self.assertEqual(200, response.status_code)
        self.assertEqual('This field is required.', response.context['expeditures'].forms[0].errors['amount'][0])

        # add some inline items
        response = c.post(reverse('edit_ticket', kwargs={'pk': ticket.id}), {
            'name': 'new name',
            'topic': ticket.topic.id,
            'description': 'new desc',
            'deposit': '0',
            'expediture-INITIAL_FORMS': '0',
            'expediture-TOTAL_FORMS': '2',
            'expediture-0-description': 'ten fifty',
            'expediture-0-amount': '10.50',
            'expediture-1-description': 'hundred',
            'expediture-1-amount': '100',
            'preexpediture-INITIAL_FORMS': '0',
            'preexpediture-TOTAL_FORMS': '0',
        })
        self.assertRedirects(response, reverse('ticket_detail', kwargs={'pk': ticket.id}))
        expeditures = ticket.expediture_set.order_by('amount')
        self.assertEqual(2, len(expeditures))
        self.assertEqual('ten fifty', expeditures[0].description)
        self.assertEqual(10.5, expeditures[0].amount)
        self.assertEqual('hundred', expeditures[1].description)
        self.assertEqual(100, expeditures[1].amount)

        # edit inline items
        response = c.post(reverse('edit_ticket', kwargs={'pk': ticket.id}), {
            'name': 'new name',
            'topic': ticket.topic.id,
            'description': 'new desc',
            'deposit': '0',
            'expediture-INITIAL_FORMS': '2',
            'expediture-TOTAL_FORMS': '3',
            'expediture-0-id': expeditures[0].id,
            'expediture-0-description': 'ten fifty',
            'expediture-0-amount': '10.50',
            'expediture-0-DELETE': 'on',
            'expediture-1-id': expeditures[1].id,
            'expediture-1-description': 'hundred+1',
            'expediture-1-amount': '101',
            'expediture-2-description': '',
            'expediture-2-amount': '',
            'preexpediture-INITIAL_FORMS': '0',
            'preexpediture-TOTAL_FORMS': '0',
        })
        self.assertRedirects(response, reverse('ticket_detail', kwargs={'pk': ticket.id}))
        expeditures = ticket.expediture_set.order_by('amount')
        self.assertEqual(1, len(expeditures))
        self.assertEqual('hundred+1', expeditures[0].description)
        self.assertEqual(101, expeditures[0].amount)

        # add preexpeditures, and amount flag preack
        deposit_amount = Decimal('12324.37')
        ticket = Ticket.objects.get(id=ticket.id)
        ticket.deposit = deposit_amount
        ticket.preexpediture_set.create(description='some preexp', amount=15)
        ticket.save()
        ticket.add_acks('precontent')

        # edit should work and ignore new data
        response = c.post(reverse('edit_ticket', kwargs={'pk': ticket.id}), {
            'name': 'new name',
            'topic': ticket.topic.id,
            'description': 'new desc',
            'deposit': '333',
            'expediture-INITIAL_FORMS': '0',
            'expediture-TOTAL_FORMS': '0',
            'preexpediture-INITIAL_FORMS': '0',
            'preexpediture-TOTAL_FORMS': '0',
        })
        self.assertRedirects(response, reverse('ticket_detail', kwargs={'pk': ticket.id}))
        ticket = Ticket.objects.get(id=ticket.id)
        self.assertEqual(deposit_amount, ticket.deposit)
        self.assertEqual(1, ticket.preexpediture_set.count())

        # also, edit should work and not fail on missing preack-ignored fields
        response = c.post(reverse('edit_ticket', kwargs={'pk': ticket.id}), {
            'name': 'new name',
            'topic': ticket.topic.id,
            'description': 'new desc',
            'expediture-INITIAL_FORMS': '0',
            'expediture-TOTAL_FORMS': '0',
        })
        self.assertRedirects(response, reverse('ticket_detail', kwargs={'pk': ticket.id}))
        ticket = Ticket.objects.get(id=ticket.id)
        self.assertEqual(deposit_amount, ticket.deposit)
        self.assertEqual(1, ticket.preexpediture_set.count())