blob: b8afb0a6b4fd8ead31d2a2b622256c772ffb4c43 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from django.contrib.auth.models import User
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework import status
from ...models import (
Component,
Milestone,
Product,
Ticket,
Version,
)
from ..serializers import (
ComponentSerializer,
MilestoneSerializer,
TicketSerializer,
VersionSerializer,
)
class TicketApiTest(APITestCase):
"""Tests for ticket API"""
def setUp(self):
self.product = Product.objects.create(prefix="BH", name="Bloodhound")
self.record1 = Ticket.objects.create(product=self.product, summary="BH #1")
self.record2 = Ticket.objects.create(product=self.product, summary="BH #2")
self.request_data = {
"summary": "Example Summary",
}
self.bad_request_data = {
"summary": "",
}
def test_get_all_tickets(self):
response = self.client.get(
reverse("product-tickets-list", kwargs={"product_prefix": "BH"})
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
len(response.data),
Ticket.objects.count(),
)
def test_get_ticket(self):
response = self.client.get(
reverse(
"product-tickets-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"product_ticket_id": self.record1.product_ticket_id,
},
)
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['summary'], self.record1.summary)
def test_get_invalid_ticket(self):
response = self.client.get(
reverse(
"product-tickets-detail",
kwargs={
"product_prefix": "BH",
"product_ticket_id": 9999,
},
)
)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_create_ticket(self):
response = self.client.post(
reverse("product-tickets-list", kwargs={"product_prefix": "BH"}),
self.request_data,
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
record = Ticket.objects.get(
product=self.product,
product_ticket_id=response.data['product_ticket_id']
)
self.assertEqual(response.data['summary'], record.summary)
def test_create_invalid_product(self):
response = self.client.post(
reverse(
'product-tickets-list',
kwargs={"product_prefix": "INVALID"}
),
self.request_data,
)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_create_missing_summary(self):
response = self.client.post(
reverse('product-tickets-list', kwargs={"product_prefix": "BH"}),
self.bad_request_data,
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_update_ticket(self):
response = self.client.put(
reverse(
"product-tickets-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"product_ticket_id": self.record1.product_ticket_id,
},
),
{"summary": "new summary"},
)
old_summary = self.record1.summary
record = Ticket.objects.get(
product=self.product,
product_ticket_id=response.data['product_ticket_id']
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['summary'], record.summary)
self.assertNotEqual(old_summary, record.summary)
def test_update_ticket_bad_data(self):
response = self.client.put(
reverse(
"product-tickets-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"product_ticket_id": self.record1.product_ticket_id,
},
),
{"summary": ""},
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_delete_ticket(self):
response = self.client.delete(
reverse(
'product-tickets-detail',
kwargs={
"product_prefix": self.record1.product.prefix,
"product_ticket_id": self.record1.product_ticket_id,
}
),
)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
with self.assertRaises(Ticket.DoesNotExist):
Ticket.objects.get(
product=self.record1.product.prefix,
product_ticket_id=self.record1.product_ticket_id,
)
class ComponentApiTest(APITestCase):
"""Tests for component API"""
def setUp(self):
self.product = Product.objects.create(prefix="BH", name="Bloodhound")
self.record1 = Component.objects.create(product=self.product, name="Component 1")
self.record2 = Component.objects.create(product=self.product, name="Component 2")
self.request_data = {
"name": "Example Name",
}
self.bad_request_data = {
"summary": "",
}
def test_get_all_components(self):
response = self.client.get(
reverse("product-components-list", kwargs={"product_prefix": "BH"})
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
len(response.data),
Component.objects.count(),
)
def test_get_component(self):
response = self.client.get(
reverse(
"product-components-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
},
)
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['name'], self.record1.name)
def test_get_missing_component(self):
response = self.client.get(
reverse(
"product-components-detail",
kwargs={
"product_prefix": "BH",
"name": "not here",
},
)
)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_create_component(self):
response = self.client.post(
reverse(
"product-components-list",
kwargs={"product_prefix": "BH"}
),
self.request_data,
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
record = Component.objects.get(
product=self.product,
name=response.data['name']
)
self.assertEqual(response.data['name'], record.name)
def test_create_component_with_invalid_product(self):
response = self.client.post(
reverse(
'product-components-list',
kwargs={"product_prefix": "INVALID"}
),
self.request_data,
)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_update_component(self):
new_name = "new name"
response = self.client.put(
reverse(
"product-components-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
},
),
{"name": new_name},
)
record = Component.objects.get(
product=self.product,
name=new_name,
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertNotEqual(new_name, self.record1.name)
self.assertEqual(record.name, new_name)
def test_update_component_bad_data(self):
response = self.client.put(
reverse(
"product-components-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
},
),
{"summary": ""},
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_delete_component(self):
response = self.client.delete(
reverse(
'product-components-detail',
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
}
),
)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
with self.assertRaises(Component.DoesNotExist):
Component.objects.get(
product=self.record1.product.prefix,
name=self.record1.name,
)
class MilestoneApiTest(APITestCase):
"""Tests for component API"""
def setUp(self):
self.product = Product.objects.create(prefix="BH", name="Bloodhound")
self.record1 = Milestone.objects.create(product=self.product, name="Milestone 1")
self.record2 = Milestone.objects.create(product=self.product, name="Milestone 2")
self.request_data = {
"name": "Example Name",
"description": "Example Description",
}
self.bad_request_data = {
"summary": "",
}
def test_get_all_milestones(self):
response = self.client.get(
reverse("product-milestones-list", kwargs={"product_prefix": "BH"})
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
len(response.data),
Milestone.objects.count(),
)
def test_get_milestone(self):
response = self.client.get(
reverse(
"product-milestones-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
},
)
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['name'], self.record1.name)
def test_get_missing_milestone(self):
response = self.client.get(
reverse(
"product-milestones-detail",
kwargs={
"product_prefix": "BH",
"name": "not here",
},
)
)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_create_milestone(self):
response = self.client.post(
reverse(
"product-milestones-list",
kwargs={"product_prefix": "BH"}
),
self.request_data,
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
record = Milestone.objects.get(
product=self.product,
name=response.data['name']
)
self.assertEqual(response.data['description'], record.description)
def test_create_milestone_with_invalid_product(self):
response = self.client.post(
reverse(
'product-milestones-list',
kwargs={"product_prefix": "INVALID"}
),
self.request_data,
)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_update_component(self):
response = self.client.put(
reverse(
"product-milestones-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
},
),
{"name": "new name"},
)
old_name = self.record1.name
record = Milestone.objects.get(
product=self.product,
name=response.data['name']
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['description'], record.description)
self.assertNotEqual(old_name, record.name)
def test_update_milestone_bad_data(self):
response = self.client.put(
reverse(
"product-milestones-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
},
),
{"summary": ""},
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_delete_milestone(self):
response = self.client.delete(
reverse(
'product-milestones-detail',
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
}
),
)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
with self.assertRaises(Milestone.DoesNotExist):
Milestone.objects.get(
product=self.record1.product.prefix,
name=self.record1.name,
)
class VersionApiTest(APITestCase):
"""Tests for component API"""
def setUp(self):
self.product = Product.objects.create(prefix="BH", name="Bloodhound")
self.record1 = Version.objects.create(product=self.product, name="Version 1")
self.record2 = Version.objects.create(product=self.product, name="Version 2")
self.request_data = {
"name": "Example Name",
"description": "Example description",
}
self.bad_request_data = {
"summary": "",
}
def test_get_all_versions(self):
response = self.client.get(
reverse("product-versions-list", kwargs={"product_prefix": "BH"})
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
len(response.data),
Version.objects.count(),
)
def test_get_version(self):
response = self.client.get(
reverse(
"product-versions-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
},
)
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['name'], self.record1.name)
def test_get_missing_version(self):
response = self.client.get(
reverse(
"product-versions-detail",
kwargs={
"product_prefix": "BH",
"name": "not here",
},
)
)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_create_version(self):
response = self.client.post(
reverse(
"product-versions-list",
kwargs={"product_prefix": "BH"}
),
self.request_data,
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
record = Version.objects.get(
product=self.product,
name=response.data['name']
)
self.assertEqual(response.data['description'], record.description)
def test_create_version_with_invalid_product(self):
response = self.client.post(
reverse(
'product-versions-list',
kwargs={"product_prefix": "INVALID"}
),
self.request_data,
)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_update_version(self):
new_name = "new name"
response = self.client.put(
reverse(
"product-versions-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
},
),
{"name": new_name},
)
old_name = self.record1.name
record = Version.objects.get(
product=self.product,
name=response.data['name']
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertNotEqual(new_name, old_name)
self.assertEqual(record.name, new_name)
def test_update_version_bad_data(self):
response = self.client.put(
reverse(
"product-versions-detail",
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
},
),
{"summary": ""},
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_delete_version(self):
response = self.client.delete(
reverse(
'product-versions-detail',
kwargs={
"product_prefix": self.record1.product.prefix,
"name": self.record1.name,
}
),
)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
with self.assertRaises(Version.DoesNotExist):
Version.objects.get(
product=self.record1.product.prefix,
name=self.record1.name,
)