2
0
mirror of https://github.com/inventree/InvenTree.git synced 2026-05-23 09:35:30 +00:00

Improve unit testing for StockItem API

This commit is contained in:
Oliver Walters
2021-01-04 01:17:05 +11:00
parent a0c95579b4
commit d1ce0f062e
7 changed files with 189 additions and 12 deletions
+175 -5
View File
@@ -1,11 +1,21 @@
"""
Unit testing for the Stock API
"""
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from datetime import datetime, timedelta
from rest_framework.test import APITestCase
from rest_framework import status
from django.urls import reverse
from django.contrib.auth import get_user_model
from InvenTree.helpers import addUserPermissions
from InvenTree.status_codes import StockStatus
from .models import StockLocation
from .models import StockItem, StockLocation
class StockAPITestCase(APITestCase):
@@ -76,6 +86,170 @@ class StockLocationTest(StockAPITestCase):
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
class StockItemListTest(StockAPITestCase):
"""
Tests for the StockItem API LIST endpoint
"""
list_url = reverse('api-stock-list')
def get_stock(self, **kwargs):
"""
Filter stock and return JSON object
"""
response = self.client.get(self.list_url, format='json', data=kwargs)
self.assertEqual(response.status_code, status.HTTP_200_OK)
# Return JSON-ified data
return response.data
def test_get_stock_list(self):
"""
List *all* StockItem objects.
"""
response = self.get_stock()
self.assertEqual(len(response), 19)
def test_filter_by_part(self):
"""
Filter StockItem by Part reference
"""
response = self.get_stock(part=25)
self.assertEqual(len(response), 7)
response = self.get_stock(part=10004)
self.assertEqual(len(response), 12)
def test_filter_by_IPN(self):
"""
Filter StockItem by IPN reference
"""
response = self.get_stock(IPN="R.CH")
self.assertEqual(len(response), 3)
def test_filter_by_location(self):
"""
Filter StockItem by StockLocation reference
"""
response = self.get_stock(location=5)
self.assertEqual(len(response), 1)
response = self.get_stock(location=1, cascade=0)
self.assertEqual(len(response), 0)
response = self.get_stock(location=1, cascade=1)
self.assertEqual(len(response), 2)
response = self.get_stock(location=7)
self.assertEqual(len(response), 16)
def test_filter_by_depleted(self):
"""
Filter StockItem by depleted status
"""
response = self.get_stock(depleted=1)
self.assertEqual(len(response), 1)
response = self.get_stock(depleted=0)
self.assertEqual(len(response), 18)
def test_filter_by_in_stock(self):
"""
Filter StockItem by 'in stock' status
"""
response = self.get_stock(in_stock=1)
self.assertEqual(len(response), 16)
response = self.get_stock(in_stock=0)
self.assertEqual(len(response), 3)
def test_filter_by_status(self):
"""
Filter StockItem by 'status' field
"""
codes = {
StockStatus.OK: 17,
StockStatus.DESTROYED: 1,
StockStatus.LOST: 1,
StockStatus.DAMAGED: 0,
StockStatus.REJECTED: 0,
}
for code in codes.keys():
num = codes[code]
response = self.get_stock(status=code)
self.assertEqual(len(response), num)
def test_filter_by_batch(self):
"""
Filter StockItem by batch code
"""
response = self.get_stock(batch='B123')
self.assertEqual(len(response), 1)
def test_filter_by_serialized(self):
"""
Filter StockItem by serialized status
"""
response = self.get_stock(serialized=1)
self.assertEqual(len(response), 12)
for item in response:
self.assertIsNotNone(item['serial'])
response = self.get_stock(serialized=0)
self.assertEqual(len(response), 7)
for item in response:
self.assertIsNone(item['serial'])
def test_filter_by_expired(self):
"""
Filter StockItem by expiry status
"""
response = self.get_stock(expired=1)
self.assertEqual(len(response), 1)
for item in response:
self.assertTrue(item['expired'])
response = self.get_stock(expired=0)
self.assertEqual(len(response), 18)
for item in response:
self.assertFalse(item['expired'])
# Mark some other stock items as expired
today = datetime.now().date()
for pk in [510, 511, 512]:
item = StockItem.objects.get(pk=pk)
item.expiry_date = today - timedelta(days=pk)
item.save()
response = self.get_stock(expired=1)
self.assertEqual(len(response), 4)
response = self.get_stock(expired=0)
self.assertEqual(len(response), 15)
class StockItemTest(StockAPITestCase):
"""
Series of API tests for the StockItem API
@@ -94,10 +268,6 @@ class StockItemTest(StockAPITestCase):
StockLocation.objects.create(name='B', description='location b', parent=top)
StockLocation.objects.create(name='C', description='location c', parent=top)
def test_get_stock_list(self):
response = self.client.get(self.list_url, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_create_default_location(self):
"""
Test the default location functionality,