"""Test GET /manual_adjustment pagination by hitting the URL.""" import json import unittest import application from manualadjustment import constants from utils import db_ops class TestOffsetLimit(unittest.TestCase): """Test various scenarios for pagination, including .""" def setUp(self): """Test setup procedure.""" self.app = application.app.test_client() db_ops.create_tables() db_ops.seed_art_relations() def tearDown(self): """Test teardown procedure.""" # create_tables will also clear data db_ops.create_tables() def test_man_adj_get_limit_of_zero(self): """Verify that page_limit=0 returns 0 records.""" params = { 'parent_id': 4321, 'parent_type': 'vendor', 'page_offset': 0, 'page_limit': 0} res = self.app.get('/manual_adjustment', query_string=params) self.assertEqual(res.status_code, 200) json_data = json.loads(res.data.decode('utf-8')) self.assertEqual(len(json_data['manual_adjustments']), 0) self.assertEqual(json_data['pagination']['offset'], 0) self.assertEqual(json_data['pagination']['limit'], 0) self.assertEqual(json_data['pagination']['count'], 2) def test_man_adj_get_limit_of_one(self): """Verify that page_limit=1 returns only 1 record.""" params = { 'parent_id': 4321, 'parent_type': 'vendor', 'page_offset': 0, 'page_limit': 1} res = self.app.get('/manual_adjustment', query_string=params) self.assertEqual(res.status_code, 200) json_data = json.loads(res.data.decode('utf-8')) self.assertEqual(len(json_data['manual_adjustments']), 1) self.assertEqual(json_data['pagination']['offset'], 0) self.assertEqual(json_data['pagination']['limit'], 1) self.assertEqual(json_data['pagination']['count'], 2) def test_man_adj_get_limit_of_two(self): """Verify that page_limit=2 returns 2 records.""" params = { 'parent_id': 4321, 'parent_type': 'vendor', 'page_offset': 0, 'page_limit': 2} res = self.app.get('/manual_adjustment', query_string=params) self.assertEqual(res.status_code, 200) json_data = json.loads(res.data.decode('utf-8')) self.assertEqual(len(json_data['manual_adjustments']), 2) self.assertEqual(json_data['pagination']['offset'], 0) self.assertEqual(json_data['pagination']['limit'], 2) self.assertEqual(json_data['pagination']['count'], 2) def test_man_adj_get_limit_of_max(self): """Verify that max page_limit still returns 2 records.""" params = { 'parent_id': 4321, 'parent_type': 'vendor', 'page_offset': 0, 'page_limit': constants.PAGE_LIMIT_MAX_ACCEPTABLE} res = self.app.get('/manual_adjustment', query_string=params) self.assertEqual(res.status_code, 200) json_data = json.loads(res.data.decode('utf-8')) self.assertEqual(len(json_data['manual_adjustments']), 2) self.assertEqual(json_data['pagination']['offset'], 0) self.assertEqual( json_data['pagination']['limit'], constants.PAGE_LIMIT_MAX_ACCEPTABLE) self.assertEqual(json_data['pagination']['count'], 2) def test_man_adj_get_offset_of_one(self): """Verify that page_offset of 1 returns second record in set.""" params = { 'parent_id': 4321, 'parent_type': 'vendor', 'page_offset': 1, 'page_limit': 1} res = self.app.get('/manual_adjustment', query_string=params) self.assertEqual(res.status_code, 200) json_data = json.loads(res.data.decode('utf-8')) amount = json_data['manual_adjustments'][0]['amount'] # second record has this amount self.assertEqual(amount, -234.560000) self.assertEqual(json_data['pagination']['offset'], 1) self.assertEqual(json_data['pagination']['limit'], 1) self.assertEqual(json_data['pagination']['count'], 2) def test_man_adj_get_offset_greater_than_count(self): """Verify when page_offset returns no records.""" params = { 'parent_id': 4321, 'parent_type': 'vendor', 'page_offset': 30000, 'page_limit': 1} res = self.app.get('/manual_adjustment', query_string=params) self.assertEqual(res.status_code, 200) json_data = json.loads(res.data.decode('utf-8')) self.assertEqual(len(json_data['manual_adjustments']), 0) self.assertEqual(json_data['pagination']['offset'], 30000) self.assertEqual(json_data['pagination']['limit'], 1) self.assertEqual(json_data['pagination']['count'], 2) def test_man_adj_get_negative_offset(self): """Verify negative page_offset raises 400 error.""" params = { 'parent_id': 4321, 'parent_type': 'vendor', 'page_offset': -1, 'page_limit': 1} res = self.app.get('/manual_adjustment', query_string=params) self.assertEqual(res.status_code, 400) json_data = json.loads(res.data.decode('utf-8')) self.assertIn('error', json_data) self.assertIn('error_detail', json_data) def test_man_adj_get_negative_limit(self): """Verify negative page_limit raises 400 error.""" params = { 'parent_id': 4321, 'parent_type': 'vendor', 'page_offset': 1, 'page_limit': -1} res = self.app.get('/manual_adjustment', query_string=params) self.assertEqual(res.status_code, 400) json_data = json.loads(res.data.decode('utf-8')) self.assertIn('error', json_data) self.assertIn('error_detail', json_data) def test_man_adj_get_over_max_page_limit(self): """Verify exceeding max page_limit raises 400 error.""" params = { 'parent_id': 4321, 'parent_type': 'vendor', 'page_offset': 1, 'page_limit': constants.PAGE_LIMIT_MAX_ACCEPTABLE + 1} res = self.app.get('/manual_adjustment', query_string=params) self.assertEqual(res.status_code, 400) json_data = json.loads(res.data.decode('utf-8')) self.assertIn('error', json_data) self.assertIn('error_detail', json_data)