test_work_record.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. """Tests for WorkRecord API endpoints."""
  2. import pytest
  3. from datetime import date
  4. class TestWorkRecordAPI:
  5. """Test cases for WorkRecord API."""
  6. def test_create_work_record_success(self, client, db_session, auth_headers):
  7. """Test creating a work record with valid data."""
  8. person_resp = client.post('/api/persons/create', json={'name': 'Test Worker'}, headers=auth_headers)
  9. person_id = person_resp.get_json()['data']['id']
  10. item_resp = client.post('/api/items/create', json={'name': 'Test Item', 'unit_price': 10.50}, headers=auth_headers)
  11. item_id = item_resp.get_json()['data']['id']
  12. response = client.post('/api/work-records/create', json={
  13. 'person_id': person_id,
  14. 'item_id': item_id,
  15. 'work_date': '2024-01-15',
  16. 'quantity': 5
  17. }, headers=auth_headers)
  18. assert response.status_code == 200
  19. data = response.get_json()
  20. assert data['success'] is True
  21. assert data['data']['person_id'] == person_id
  22. assert data['data']['item_id'] == item_id
  23. assert data['data']['quantity'] == 5
  24. assert data['data']['total_price'] == 52.50
  25. def test_get_all_work_records(self, client, db_session, auth_headers):
  26. """Test getting all work records with pagination."""
  27. person_resp = client.post('/api/persons/create', json={'name': 'Test Worker'}, headers=auth_headers)
  28. person_id = person_resp.get_json()['data']['id']
  29. item_resp = client.post('/api/items/create', json={'name': 'Test Item', 'unit_price': 10.0}, headers=auth_headers)
  30. item_id = item_resp.get_json()['data']['id']
  31. client.post('/api/work-records/create', json={
  32. 'person_id': person_id,
  33. 'item_id': item_id,
  34. 'work_date': '2024-01-15',
  35. 'quantity': 5
  36. }, headers=auth_headers)
  37. response = client.get('/api/work-records', headers=auth_headers)
  38. assert response.status_code == 200
  39. data = response.get_json()
  40. assert data['success'] is True
  41. assert len(data['data']) >= 1
  42. # Verify pagination metadata is present
  43. assert 'pagination' in data
  44. assert 'total' in data['pagination']
  45. assert 'page' in data['pagination']
  46. assert 'page_size' in data['pagination']
  47. assert 'total_pages' in data['pagination']
  48. assert data['pagination']['page'] == 1
  49. assert data['pagination']['page_size'] == 20
  50. def test_get_work_record_not_found(self, client, db_session, auth_headers):
  51. """Test getting a non-existent work record."""
  52. response = client.get('/api/work-records/99999', headers=auth_headers)
  53. assert response.status_code == 404
  54. data = response.get_json()
  55. assert data['success'] is False
  56. def test_unauthorized_access(self, client, db_session):
  57. """Test that endpoints require authentication."""
  58. response = client.get('/api/work-records')
  59. assert response.status_code == 401
  60. data = response.get_json()
  61. assert data['success'] is False
  62. assert data['code'] == 'UNAUTHORIZED'
  63. def test_get_work_records_with_pagination_params(self, client, db_session, auth_headers):
  64. """Test getting work records with custom pagination parameters."""
  65. person_resp = client.post('/api/persons/create', json={'name': 'Test Worker'}, headers=auth_headers)
  66. person_id = person_resp.get_json()['data']['id']
  67. item_resp = client.post('/api/items/create', json={'name': 'Test Item', 'unit_price': 10.0}, headers=auth_headers)
  68. item_id = item_resp.get_json()['data']['id']
  69. # Create multiple work records
  70. for i in range(5):
  71. client.post('/api/work-records/create', json={
  72. 'person_id': person_id,
  73. 'item_id': item_id,
  74. 'work_date': f'2024-01-{15+i:02d}',
  75. 'quantity': i + 1
  76. }, headers=auth_headers)
  77. # Test with custom page_size
  78. response = client.get('/api/work-records?page=1&page_size=2', headers=auth_headers)
  79. assert response.status_code == 200
  80. data = response.get_json()
  81. assert data['success'] is True
  82. assert len(data['data']) == 2
  83. assert data['pagination']['page'] == 1
  84. assert data['pagination']['page_size'] == 2
  85. assert data['pagination']['total'] >= 5
  86. assert data['pagination']['total_pages'] >= 3
  87. # Test page 2
  88. response = client.get('/api/work-records?page=2&page_size=2', headers=auth_headers)
  89. data = response.get_json()
  90. assert data['pagination']['page'] == 2
  91. assert len(data['data']) == 2