forked from erp-dev/erp
fix: by-process-node do not filter current state and added datr_from + date_to
This commit is contained in:
@@ -747,22 +747,16 @@ class PlateOrderByProcessNodeV2APITest(TestCase):
|
||||
self.assertTrue(any(p['key'] == 'temperature' and p['value'] == '25' for p in resp.data['parameters']))
|
||||
|
||||
ids = [item['id'] for item in resp.data['results']]
|
||||
self.assertEqual(set(ids), {self.po_state2_old.id, self.po_state2_new.id})
|
||||
self.assertEqual(set(ids), {self.po_state3.id})
|
||||
|
||||
# results 必须包含“订单维度”的参数值(同一节点下不同订单可不同)
|
||||
by_id = {item['id']: item for item in resp.data['results']}
|
||||
self.assertIn('created_by', by_id[self.po_state2_old.id])
|
||||
self.assertIn('created_by', by_id[self.po_state2_new.id])
|
||||
self.assertIn('process_parameters', by_id[self.po_state2_old.id])
|
||||
self.assertIn('process_parameters', by_id[self.po_state2_new.id])
|
||||
self.assertIn('created_by', by_id[self.po_state3.id])
|
||||
self.assertIn('process_parameters', by_id[self.po_state3.id])
|
||||
|
||||
# po_state2_old:来自已撤销的 state2 提交记录
|
||||
# po_state3:已完成 state2,但未提交参数,value 应为 null
|
||||
self.assertTrue(
|
||||
any(p['key'] == 'temperature' and p['value'] == '30' for p in by_id[self.po_state2_old.id]['process_parameters'])
|
||||
)
|
||||
# po_state2_new:从未提交过 state2 参数,value 应为 null
|
||||
self.assertTrue(
|
||||
any(p['key'] == 'temperature' and p['value'] is None for p in by_id[self.po_state2_new.id]['process_parameters'])
|
||||
any(p['key'] == 'temperature' and p['value'] is None for p in by_id[self.po_state3.id]['process_parameters'])
|
||||
)
|
||||
|
||||
def test_process_parameters_schema_and_keys_align_with_template(self):
|
||||
@@ -788,40 +782,40 @@ class PlateOrderByProcessNodeV2APITest(TestCase):
|
||||
resp = self.client.get(self.url, {'process_node_id': self.node1.id})
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(resp.data['parameters'], [])
|
||||
self.assertEqual(len(resp.data['results']), 1)
|
||||
self.assertEqual(resp.data['results'][0]['id'], self.po_state1.id)
|
||||
self.assertEqual(resp.data['results'][0]['process_parameters'], [])
|
||||
self.assertEqual(len(resp.data['results']), 3)
|
||||
ids = {item['id'] for item in resp.data['results']}
|
||||
self.assertEqual(ids, {self.po_state2_old.id, self.po_state2_new.id, self.po_state3.id})
|
||||
for item in resp.data['results']:
|
||||
self.assertEqual(item['process_parameters'], [])
|
||||
|
||||
def test_default_ordering_is_minus_created_at(self):
|
||||
resp = self.client.get(self.url, {'process_node_id': self.node2.id})
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
ids = [item['id'] for item in resp.data['results']]
|
||||
self.assertEqual(ids[0], self.po_state2_new.id)
|
||||
self.assertEqual(ids[1], self.po_state2_old.id)
|
||||
self.assertEqual(ids[0], self.po_state3.id)
|
||||
|
||||
def test_ordering_param_created_at_asc(self):
|
||||
resp = self.client.get(self.url, {'process_node_id': self.node2.id, 'ordering': 'created_at'})
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
ids = [item['id'] for item in resp.data['results']]
|
||||
self.assertEqual(ids[0], self.po_state2_old.id)
|
||||
self.assertEqual(ids[1], self.po_state2_new.id)
|
||||
self.assertEqual(ids[0], self.po_state3.id)
|
||||
|
||||
def test_search_supports_design_code_icontains(self):
|
||||
resp = self.client.get(self.url, {'process_node_id': self.node2.id, 'search': 'abc'})
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
ids = [item['id'] for item in resp.data['results']]
|
||||
self.assertEqual(ids, [self.po_state2_new.id])
|
||||
self.assertEqual(ids, [])
|
||||
|
||||
def test_search_supports_pk_without_extra_param(self):
|
||||
resp = self.client.get(self.url, {'process_node_id': self.node2.id, 'search': str(self.po_state2_old.id)})
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
ids = [item['id'] for item in resp.data['results']]
|
||||
self.assertEqual(ids, [self.po_state2_old.id])
|
||||
self.assertEqual(ids, [])
|
||||
|
||||
def test_pagination_limit_offset(self):
|
||||
resp = self.client.get(self.url, {'process_node_id': self.node2.id, 'limit': 1, 'offset': 0})
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(resp.data['count'], 2)
|
||||
self.assertEqual(resp.data['count'], 1)
|
||||
self.assertEqual(len(resp.data['results']), 1)
|
||||
|
||||
def test_param_filter_requires_both_key_and_value(self):
|
||||
@@ -846,6 +840,43 @@ class PlateOrderByProcessNodeV2APITest(TestCase):
|
||||
self.assertEqual(resp.data['count'], 0)
|
||||
self.assertEqual(resp.data['results'], [])
|
||||
|
||||
def test_date_filter_requires_both(self):
|
||||
resp = self.client.get(self.url, {'process_node_id': self.node2.id, 'date_from': '2026-02-01'})
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
self.assertIn('date_from', resp.data.get('detail', ''))
|
||||
|
||||
resp = self.client.get(self.url, {'process_node_id': self.node2.id, 'date_to': '2026-02-01'})
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
self.assertIn('date_to', resp.data.get('detail', ''))
|
||||
|
||||
def test_date_filter_applies(self):
|
||||
tz = timezone.get_default_timezone()
|
||||
target_dt = timezone.make_aware(datetime.datetime(2025, 12, 3, 10, 0, 0), tz)
|
||||
printing_models.PlateOrder.objects.filter(id=self.po_state3.id).update(created_at=target_dt)
|
||||
|
||||
resp = self.client.get(
|
||||
self.url,
|
||||
{
|
||||
'process_node_id': self.node2.id,
|
||||
'date_from': '2025-12-03',
|
||||
'date_to': '2025-12-03',
|
||||
},
|
||||
)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
ids = [item['id'] for item in resp.data['results']]
|
||||
self.assertEqual(ids, [self.po_state3.id])
|
||||
|
||||
resp = self.client.get(
|
||||
self.url,
|
||||
{
|
||||
'process_node_id': self.node2.id,
|
||||
'date_from': '2025-12-04',
|
||||
'date_to': '2025-12-04',
|
||||
},
|
||||
)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(resp.data['results'], [])
|
||||
|
||||
|
||||
class PlateOrderByProcessV2APITest(TestCase):
|
||||
def setUp(self):
|
||||
|
||||
Reference in New Issue
Block a user