add /matches endpoint ad return match information in tickets and /item endpoints
This commit is contained in:
parent
26255fadec
commit
f2647f0dbd
12 changed files with 339 additions and 61 deletions
149
core/tickets/tests/v2/test_matches.py
Normal file
149
core/tickets/tests/v2/test_matches.py
Normal file
|
@ -0,0 +1,149 @@
|
|||
from datetime import datetime, timedelta
|
||||
|
||||
from django.test import TestCase, Client
|
||||
|
||||
from authentication.models import ExtendedUser
|
||||
from inventory.models import Event, Container, Item
|
||||
from mail.models import Email, EmailAttachment
|
||||
from tickets.models import IssueThread, StateChange, Comment, ItemRelation
|
||||
from django.contrib.auth.models import Permission
|
||||
from knox.models import AuthToken
|
||||
|
||||
from base64 import b64encode
|
||||
|
||||
|
||||
class IssueItemMatchApiTest(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.user = ExtendedUser.objects.create_user('testuser', 'test', 'test')
|
||||
self.user.user_permissions.add(*Permission.objects.all())
|
||||
self.user.save()
|
||||
self.event = Event.objects.create(slug='evt')
|
||||
self.box = Container.objects.create(name='box1')
|
||||
self.item = Item.objects.create(container=self.box, description="foo", event=self.event)
|
||||
self.token = AuthToken.objects.create(user=self.user)
|
||||
self.client = Client(headers={'Authorization': 'Token ' + self.token[1]})
|
||||
now = datetime.now()
|
||||
self.issue = IssueThread.objects.create(
|
||||
name="test issue",
|
||||
event=self.event,
|
||||
)
|
||||
self.mail1 = Email.objects.create(
|
||||
subject='test',
|
||||
body='test',
|
||||
sender='test',
|
||||
recipient='test',
|
||||
issue_thread=self.issue,
|
||||
timestamp=now,
|
||||
)
|
||||
self.comment = Comment.objects.create(
|
||||
issue_thread=self.issue,
|
||||
comment="test",
|
||||
timestamp=now + timedelta(seconds=3),
|
||||
)
|
||||
self.match = ItemRelation.objects.create(
|
||||
issue_thread=self.issue,
|
||||
item=self.item,
|
||||
timestamp=now + timedelta(seconds=5),
|
||||
)
|
||||
|
||||
def test_issues(self):
|
||||
response = self.client.get('/api/2/tickets/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(len(response.json()), 1)
|
||||
self.assertEqual(response.json()[0]['id'], self.issue.id)
|
||||
self.assertEqual(response.json()[0]['name'], "test issue")
|
||||
self.assertEqual(response.json()[0]['state'], "pending_new")
|
||||
self.assertEqual(response.json()[0]['event'], "evt")
|
||||
self.assertEqual(response.json()[0]['assigned_to'], None)
|
||||
self.assertEqual(response.json()[0]['uuid'], self.issue.uuid)
|
||||
self.assertEqual(response.json()[0]['last_activity'], self.match.timestamp.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
|
||||
self.assertEqual(len(response.json()[0]['timeline']), 4)
|
||||
self.assertEqual(response.json()[0]['timeline'][0]['type'], 'state')
|
||||
self.assertEqual(response.json()[0]['timeline'][1]['type'], 'mail')
|
||||
self.assertEqual(response.json()[0]['timeline'][2]['type'], 'comment')
|
||||
self.assertEqual(response.json()[0]['timeline'][1]['id'], self.mail1.id)
|
||||
self.assertEqual(response.json()[0]['timeline'][2]['id'], self.comment.id)
|
||||
self.assertEqual(response.json()[0]['timeline'][0]['state'], 'pending_new')
|
||||
self.assertEqual(response.json()[0]['timeline'][1]['sender'], 'test')
|
||||
self.assertEqual(response.json()[0]['timeline'][1]['recipient'], 'test')
|
||||
self.assertEqual(response.json()[0]['timeline'][1]['subject'], 'test')
|
||||
self.assertEqual(response.json()[0]['timeline'][1]['body'], 'test')
|
||||
self.assertEqual(response.json()[0]['timeline'][1]['timestamp'],
|
||||
self.mail1.timestamp.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
|
||||
self.assertEqual(response.json()[0]['timeline'][2]['comment'], 'test')
|
||||
self.assertEqual(response.json()[0]['timeline'][2]['timestamp'],
|
||||
self.comment.timestamp.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
|
||||
self.assertEqual(response.json()[0]['timeline'][3]['status'], 'possible')
|
||||
self.assertEqual(response.json()[0]['timeline'][3]['timestamp'],
|
||||
self.match.timestamp.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
|
||||
self.assertEqual(response.json()[0]['timeline'][3]['item']['description'], "foo")
|
||||
self.assertEqual(response.json()[0]['timeline'][3]['item']['event'], "evt")
|
||||
self.assertEqual(response.json()[0]['timeline'][3]['item']['box'], "box1")
|
||||
self.assertEqual(response.json()[0]['related_items'][0]['description'], "foo")
|
||||
self.assertEqual(response.json()[0]['related_items'][0]['event'], "evt")
|
||||
self.assertEqual(response.json()[0]['related_items'][0]['box'], "box1")
|
||||
|
||||
def test_members(self):
|
||||
response = self.client.get(f'/api/2/{self.event.slug}/item/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(len(response.json()), 1)
|
||||
self.assertEqual(response.json()[0]['id'], self.item.id)
|
||||
self.assertEqual(response.json()[0]['description'], 'foo')
|
||||
self.assertEqual(response.json()[0]['box'], 'box1')
|
||||
self.assertEqual(response.json()[0]['cid'], self.box.id)
|
||||
self.assertEqual(response.json()[0]['file'], None)
|
||||
self.assertEqual(response.json()[0]['returned'], False)
|
||||
self.assertEqual(response.json()[0]['event'], self.event.slug)
|
||||
self.assertEqual(len(response.json()[0]['related_issues']), 1)
|
||||
self.assertEqual(response.json()[0]['related_issues'][0]['id'], self.issue.id)
|
||||
self.assertEqual(response.json()[0]['related_issues'][0]['name'], "test issue")
|
||||
|
||||
def test_add_match(self):
|
||||
response = self.client.get('/api/2/matches/')
|
||||
self.assertEqual(1, len(response.json()))
|
||||
item = Item.objects.create(container=self.box, event=self.event, description='1')
|
||||
issue = IssueThread.objects.create(name="test issue", event=self.event)
|
||||
|
||||
response = self.client.post(f'/api/2/matches/',
|
||||
{'item': item.id, 'issue_thread': issue.id},
|
||||
content_type='application/json')
|
||||
self.assertEqual(response.status_code, 201)
|
||||
|
||||
response = self.client.get('/api/2/matches/')
|
||||
self.assertEqual(2, len(response.json()))
|
||||
|
||||
response = self.client.get('/api/2/tickets/')
|
||||
self.assertEqual(4, len(response.json()[0]['timeline']))
|
||||
self.assertEqual('item_relation', response.json()[0]['timeline'][3]['type'])
|
||||
self.assertEqual('possible', response.json()[0]['timeline'][3]['status'])
|
||||
self.assertEqual(1, len(response.json()[0]['related_items']))
|
||||
|
||||
def test_change_match_state(self):
|
||||
response = self.client.get('/api/2/matches/')
|
||||
self.assertEqual(1, len(response.json()))
|
||||
|
||||
response = self.client.get('/api/2/tickets/')
|
||||
self.assertEqual(4, len(response.json()[0]['timeline']))
|
||||
self.assertEqual('item_relation', response.json()[0]['timeline'][3]['type'])
|
||||
self.assertEqual('possible', response.json()[0]['timeline'][3]['status'])
|
||||
self.assertEqual(1, len(response.json()[0]['related_items']))
|
||||
|
||||
response = self.client.post(f'/api/2/matches/',
|
||||
{'item': self.item.id, 'issue_thread': self.issue.id, 'status': 'confirmed'},
|
||||
content_type='application/json')
|
||||
self.assertEqual(response.status_code, 201)
|
||||
self.assertEqual(response.json()['status'], 'confirmed')
|
||||
self.assertEqual(response.json()['id'], 2)
|
||||
|
||||
response = self.client.get('/api/2/matches/')
|
||||
self.assertEqual(2, len(response.json()))
|
||||
|
||||
response = self.client.get('/api/2/tickets/')
|
||||
self.assertEqual(5, len(response.json()[0]['timeline']))
|
||||
self.assertEqual('item_relation', response.json()[0]['timeline'][3]['type'])
|
||||
self.assertEqual('possible', response.json()[0]['timeline'][3]['status'])
|
||||
self.assertEqual('item_relation', response.json()[0]['timeline'][4]['type'])
|
||||
self.assertEqual('confirmed', response.json()[0]['timeline'][4]['status'])
|
||||
self.assertEqual(1, len(response.json()[0]['related_items']))
|
|
@ -3,9 +3,9 @@ from datetime import datetime, timedelta
|
|||
from django.test import TestCase, Client
|
||||
|
||||
from authentication.models import ExtendedUser
|
||||
from inventory.models import Event
|
||||
from inventory.models import Event, Container, Item
|
||||
from mail.models import Email, EmailAttachment
|
||||
from tickets.models import IssueThread, StateChange, Comment
|
||||
from tickets.models import IssueThread, StateChange, Comment, ItemRelation
|
||||
from django.contrib.auth.models import Permission
|
||||
from knox.models import AuthToken
|
||||
|
||||
|
@ -18,6 +18,8 @@ class IssueApiTest(TestCase):
|
|||
self.user.user_permissions.add(*Permission.objects.all())
|
||||
self.user.save()
|
||||
self.event = Event.objects.create(slug='evt')
|
||||
self.box = Container.objects.create(name='box1')
|
||||
self.item = Item.objects.create(container=self.box, description="foo", event=self.event)
|
||||
self.token = AuthToken.objects.create(user=self.user)
|
||||
self.client = Client(headers={'Authorization': 'Token ' + self.token[1]})
|
||||
|
||||
|
@ -54,6 +56,11 @@ class IssueApiTest(TestCase):
|
|||
comment="test",
|
||||
timestamp=now + timedelta(seconds=3),
|
||||
)
|
||||
match = ItemRelation.objects.create(
|
||||
issue_thread=issue,
|
||||
item = self.item,
|
||||
timestamp=now + timedelta(seconds=5),
|
||||
)
|
||||
self.assertEqual('pending_new', issue.state)
|
||||
self.assertEqual('test issue', issue.name)
|
||||
self.assertEqual(None, issue.assigned_to)
|
||||
|
@ -67,8 +74,8 @@ class IssueApiTest(TestCase):
|
|||
self.assertEqual(response.json()[0]['event'], "evt")
|
||||
self.assertEqual(response.json()[0]['assigned_to'], None)
|
||||
self.assertEqual(response.json()[0]['uuid'], issue.uuid)
|
||||
self.assertEqual(response.json()[0]['last_activity'], comment.timestamp.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
|
||||
self.assertEqual(len(response.json()[0]['timeline']), 4)
|
||||
self.assertEqual(response.json()[0]['last_activity'], match.timestamp.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
|
||||
self.assertEqual(len(response.json()[0]['timeline']), 5)
|
||||
self.assertEqual(response.json()[0]['timeline'][0]['type'], 'state')
|
||||
self.assertEqual(response.json()[0]['timeline'][1]['type'], 'mail')
|
||||
self.assertEqual(response.json()[0]['timeline'][2]['type'], 'mail')
|
||||
|
@ -92,6 +99,15 @@ class IssueApiTest(TestCase):
|
|||
self.assertEqual(response.json()[0]['timeline'][3]['comment'], 'test')
|
||||
self.assertEqual(response.json()[0]['timeline'][3]['timestamp'],
|
||||
comment.timestamp.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
|
||||
self.assertEqual(response.json()[0]['timeline'][4]['status'], 'possible')
|
||||
self.assertEqual(response.json()[0]['timeline'][4]['timestamp'],
|
||||
match.timestamp.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
|
||||
self.assertEqual(response.json()[0]['timeline'][4]['item']['description'], "foo")
|
||||
self.assertEqual(response.json()[0]['timeline'][4]['item']['event'], "evt")
|
||||
self.assertEqual(response.json()[0]['timeline'][4]['item']['box'], "box1")
|
||||
self.assertEqual(response.json()[0]['related_items'][0]['description'], "foo")
|
||||
self.assertEqual(response.json()[0]['related_items'][0]['event'], "evt")
|
||||
self.assertEqual(response.json()[0]['related_items'][0]['box'], "box1")
|
||||
|
||||
def test_issues_incomplete_timeline(self):
|
||||
now = datetime.now()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue