def test_assign_hostname_skips_hostname_when_its_already_set(self): # hostname must include country-code to be skipped during assigning hostname = 'the-same-hostname-across-transitions-{}'.format('USA') self.bo_asset = BackOfficeAssetFactory( model=self.model, hostname=hostname, region=self.region_us, ) _, transition, _ = self._create_transition( model=self.bo_asset, name='assign_hostname_if_empty_or_country_not_match', source=[BackOfficeAssetStatus.new.id], target=BackOfficeAssetStatus.used.id, actions=['assign_hostname_if_empty_or_country_not_match'] ) self.assertEquals(self.bo_asset.hostname, hostname) run_field_transition( [self.bo_asset], field='status', transition_obj_or_name=transition, data={}, requester=self.request.user ) self.assertEquals(self.bo_asset.hostname, hostname)
def test_run_non_existent_transition(self): transition_name = 'non_existent_transition' order = Order.objects.create() with self.assertRaises(Transition.DoesNotExist): run_field_transition( [order], transition_name, requester=self.request.user, field='status' )
def test_assign_hostname_assigns_hostname_when_its_empty(self): hostname = '' self.bo_asset = BackOfficeAssetFactory( model=self.model, hostname=hostname, region=self.region_us, ) _, transition, _ = self._create_transition( model=self.bo_asset, name='assign_hostname_if_empty_or_country_not_match', source=[BackOfficeAssetStatus.new.id], target=BackOfficeAssetStatus.used.id, actions=['assign_hostname_if_empty_or_country_not_match'] ) self.assertEquals(self.bo_asset.hostname, hostname) run_field_transition( [self.bo_asset], field='status', transition_obj_or_name=transition, data={}, requester=self.request.user ) self.assertNotEquals(self.bo_asset.hostname, hostname)
def test_run_action_during_transition(self): order = Order.objects.create(status=OrderStatus.to_send.id) _, transition, actions = self._create_transition( model=order, name='send', source=[OrderStatus.to_send.id], target=OrderStatus.sended.id, actions=['go_to_post_office'] ) order.__class__.go_to_post_office = mocked_action run_field_transition( [order], transition, requester=self.request.user, field='status' ) self.assertTrue(order.go_to_post_office.runned)
def test_assign_owner(self): _, transition, _ = self._create_transition( model=self.bo_asset, name='test', source=[BackOfficeAssetStatus.new.id], target=BackOfficeAssetStatus.used.id, actions=['assign_owner']) run_field_transition([self.bo_asset], field='status', transition_obj_or_name=transition, data={'assign_owner__owner': self.user_pl.id}, requester=self.request.user)
def test_transition_change_status(self): order = Order.objects.create() _, transition, _ = self._create_transition( model=order, name='prepare', source=[OrderStatus.new.id], target=OrderStatus.to_send.id, actions=['go_to_post_office'] ) self.assertEqual(order.status, OrderStatus.new.id) run_field_transition( [order], transition, requester=self.request.user, field='status' ) self.assertEqual(order.status, OrderStatus.to_send.id)
def test_change_hostname(self): _, transition, _ = self._create_transition( model=self.bo_asset, name='test', source=[BackOfficeAssetStatus.new.id], target=BackOfficeAssetStatus.used.id, actions=['change_hostname']) run_field_transition([self.bo_asset], field='status', transition_obj_or_name=transition, data={'change_hostname__country': Country.pl}, requester=self.request.user) self.assertEqual(self.bo_asset.hostname, 'POLPC01001')
def test_transition_runs_action_registered_on_model(self): # action is registered in tests/models.py order = Order.objects.create() _, transition, _ = self._create_transition( model=order, name='action_name', source=[OrderStatus.new.id], target=OrderStatus.to_send.id, actions=['action_registered_on_model'] ) self.assertNotEqual(order.remarks, 'done') run_field_transition( [order], transition, requester=self.request.user, field='status' ) self.assertEqual(order.remarks, 'done')
def test_forbidden_transition(self): order = Order.objects.create() transition = Transition.objects.create( name='send', model=TransitionModel.get_for_field(order, 'status'), source=[OrderStatus.to_send.id], target=OrderStatus.sended.id, ) self.assertEqual( list(order.get_available_transitions_for_status()), [] ) with self.assertRaises(TransitionNotAllowedError): run_field_transition( [order], transition, requester=self.request.user, field='status' )
def test_transition_exception(self): order = Order.objects.create() _, transition, actions = self._create_transition( model=order, name='generate_exception', source=[OrderStatus.new.id], target=OrderStatus.sended.id, actions=['generate_exception'] ) result, _ = run_field_transition( [order], transition, requester=self.request.user, field='status' ) self.assertFalse(result)
def test_run_transition_from_string(self): transition_name = 'send' order = Order.objects.create(status=OrderStatus.to_send.id) Transition.objects.create( name=transition_name, model=TransitionModel.get_for_field(order, 'status'), source=[OrderStatus.to_send.id], target=OrderStatus.sended.id, ) self.assertTrue( run_field_transition( [order], transition_name, requester=self.request.user, field='status' ) )