def then_a_new_loan_request_with_the_account_number_and_desired_value_is_created(
        step, account_number, desired_value):
    #Processes are nodes that use the company as the source node, and the client as destination
    world.the_company = Machine()
    world.a_client = Person()
    #now the business process starts to be assembled
    world.an_individual_credit_operation = Process(world.the_company,
                                                   world.a_client)
    world.loan_request_creation = Transformation(
        world.credit_analyst.decorated, world.credit_analyst.decorated)
    world.loan_request_creation.set_action(
        world.credit_analyst.create_loan_request)
    world.loan_request_creation.action | should | equal_to(
        world.credit_analyst.create_loan_request)
    #associates the transformation to the process
    world.an_individual_credit_operation.insert_movement(
        'loan request creation', world.loan_request_creation)
    world.an_individual_credit_operation.movements | should | contain(
        'loan request creation')
    #finally it runs the transformation...
    world.an_individual_credit_operation.movements[
        'loan request creation'].perform(world.account, desired_value)
    #checks if the loan request is stored in the Node's input_area
    world.credit_analyst.decorated.input_area | should | contain(
        account_number)
def when_i_pick_to_analyse_the_loan_request_of_account_account_number(
        step, account_number):
    #creates a new transformation to register the analysis
    world.loan_request_analysis = Transformation(
        world.credit_analyst.decorated, world.credit_analyst.decorated)
    #associates analyse operation to the transformation
    world.loan_request_analysis.set_action(world.credit_analyst.analyse)
    #associates the transformation to the process
    world.an_individual_credit_operation.insert_movement(
        'loan request analysis', world.loan_request_analysis)
    #finally it runs the transformation...
    #must refactor process.movements to make it easier to find operations => use a dictionary
    world.an_individual_credit_operation.movements[
        'loan request analysis'].perform(world.account.number)
    #if everything is ok the loan request was stored in the Node's output_area
    world.credit_analyst.decorated.output_area | should | contain(
        account_number)
def when_i_pick_and_perfom_this_loan(step):
    #picking...
    loan_request = world.credit_analyst.decorated.output_area[
        world.account.number]
    #preparing to perform...
    world.create_loan = Transformation(world.credit_analyst.decorated,
                                       world.credit_analyst.decorated)
    world.create_loan.set_action(world.credit_analyst.create_loan)
    world.an_individual_credit_operation.insert_movement(
        'loan creation', world.create_loan)
    #performing!
    world.an_individual_credit_operation.movements['loan creation'].perform(
        loan_request)
    #given that I am using datetime to generate the key, I cannot access the newly
    #created loan through its key
    #output_area must have at least the loan_request and the newly created loan
    world.credit_analyst.decorated.output_area.values() | should | have(
        2).itens
class TransformationSpec(unittest.TestCase):
    def setUp(self):
        self.a_person = Person()
        self.a_transformation = Transformation(self.a_person, self.a_person)

    @operation(category='business')
    def an_operation(self, argument):
        ''' operations must be documented'''
        return argument

    def non_operation(self):
        return 0

    def it_sets_its_action(self):
        #should not work
        self.a_transformation.set_action(
            self.non_operation) | should | be(False)
        #should work
        self.a_transformation.set_action(self.an_operation)
        self.a_transformation.action | should | equal_to(self.an_operation)

    def it_performs(self):
        self.a_transformation.set_action(self.an_operation)
        self.a_transformation.perform(10)
class TransformationSpec(unittest.TestCase):

    def setUp(self):
        self.a_person = Person()
        self.a_transformation = Transformation(self.a_person, self.a_person)

    @operation(category='business')
    def an_operation(self, argument):
        ''' operations must be documented'''
        return argument

    def non_operation(self):
        return 0

    def it_sets_its_action(self):
        #should not work
        self.a_transformation.set_action(self.non_operation) |should| be(False)
        #should work
        self.a_transformation.set_action(self.an_operation)
        self.a_transformation.action |should| equal_to(self.an_operation)

    def it_performs(self):
        self.a_transformation.set_action(self.an_operation)
        self.a_transformation.perform(10)
 def setUp(self):
     self.a_person = Person()
     self.a_transformation = Transformation(self.a_person, self.a_person)
 def setUp(self):
     self.a_person = Person()
     self.a_transformation = Transformation(self.a_person, self.a_person)