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()
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'])
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()
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()
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()
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)
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())
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')
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)
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())