diff --git a/tests/workflow/test_workflow_spec_category_reorder.py b/tests/workflow/test_workflow_spec_category_reorder.py new file mode 100644 index 00000000..50175360 --- /dev/null +++ b/tests/workflow/test_workflow_spec_category_reorder.py @@ -0,0 +1,109 @@ +from tests.base_test import BaseTest + +from crc import session +from crc.api.common import ApiError +from crc.models.workflow import WorkflowSpecCategoryModel + +import json + + +class TestWorkflowSpecCategoryReorder(BaseTest): + + @staticmethod + def _load_test_categories(): + category_model_1 = WorkflowSpecCategoryModel( + id=1, + name='test_category_1', + display_name='Test Category 1', + display_order=1 + ) + category_model_2 = WorkflowSpecCategoryModel( + id=2, + name='test_category_2', + display_name='Test Category 2', + display_order=2 + ) + category_model_3 = WorkflowSpecCategoryModel( + id=3, + name='test_category_3', + display_name='Test Category 3', + display_order=3 + ) + session.add(category_model_1) + session.add(category_model_2) + session.add(category_model_3) + session.commit() + + def test_initial_order(self): + self.load_example_data() + self._load_test_categories() + initial_order = session.query(WorkflowSpecCategoryModel).order_by(WorkflowSpecCategoryModel.display_order).all() + self.assertEqual(0, initial_order[0].id) + self.assertEqual(1, initial_order[1].id) + self.assertEqual(2, initial_order[2].id) + self.assertEqual(3, initial_order[3].id) + + def test_workflow_spec_category_reorder_up(self): + self.load_example_data() + self._load_test_categories() + + # Move category 2 up + rv = self.app.put(f"/v1.0/workflow-specification-category/2/reorder?direction=up", + headers=self.logged_in_headers()) + + # Make sure category 2 is in position 1 now + self.assertEqual(2, rv.json[1]['id']) + + ordered = session.query(WorkflowSpecCategoryModel).\ + order_by(WorkflowSpecCategoryModel.display_order).all() + self.assertEqual(2, ordered[1].id) + + def test_workflow_spec_category_reorder_down(self): + self.load_example_data() + self._load_test_categories() + + # Move category 2 down + rv = self.app.put(f"/v1.0/workflow-specification-category/2/reorder?direction=down", + headers=self.logged_in_headers()) + + # Make sure category 2 is in position 3 now + self.assertEqual(2, rv.json[3]['id']) + + ordered = session.query(WorkflowSpecCategoryModel). \ + order_by(WorkflowSpecCategoryModel.display_order).all() + self.assertEqual(2, ordered[3].id) + + def test_workflow_spec_category_reorder_bad_direction(self): + self.load_example_data() + self._load_test_categories() + + rv = self.app.put(f"/v1.0/workflow-specification-category/2/reorder?direction=asdf", + headers=self.logged_in_headers()) + self.assertEqual('bad_direction', rv.json['code']) + self.assertEqual('The direction must be `up` or `down`.', rv.json['message']) + + def test_workflow_spec_category_reorder_bad_category_id(self): + self.load_example_data() + self._load_test_categories() + + # with self.assertRaises(ApiError): + rv = self.app.put(f"/v1.0/workflow-specification-category/10/reorder?direction=down", + headers=self.logged_in_headers()) + self.assertEqual('bad_category_id', rv.json['code']) + self.assertEqual('The category id 10 did not return a Workflow Spec Category. Make sure it is a valid ID.', rv.json['message']) + + def test_workflow_spec_category_down_too_far(self): + self.load_example_data() + self._load_test_categories() + ordered = session.query(WorkflowSpecCategoryModel).order_by(WorkflowSpecCategoryModel.display_order).all() + + # Try to move 3 down + rv = self.app.put(f"/v1.0/workflow-specification-category/3/reorder?direction=down", + headers=self.logged_in_headers()) + # Make sure we don't get an error + self.assert_success(rv) + + # Make sure we get the original list back. + reordered = session.query(WorkflowSpecCategoryModel).order_by(WorkflowSpecCategoryModel.display_order).all() + self.assertEqual(ordered, reordered) +