Пример #1
0
def test_send_order(create_account):
    transaction = Transaction(
        concepto_pago='PRUEBA',
        institucion_ordenante='90646',
        cuenta_beneficiario='072691004495711499',
        institucion_beneficiaria='40072',
        monto=1020,
        nombre_beneficiario='Ricardo Sánchez Castillo de la Mancha S.A. de CV',
        nombre_ordenante='   Ricardo Sánchez Castillo de la Mancha S.A. de CV',
        cuenta_ordenante='646180157000000004',
        rfc_curp_ordenante='ND',
        speid_id='speid_id',
        tipo_cuenta_beneficiario=40,
    )

    order = transaction.create_order()

    assert order.institucionOperante == transaction.institucion_ordenante
    assert order.institucionContraparte == transaction.institucion_beneficiaria
    assert order.monto == 10.20
    assert transaction.clave_rastreo == order.claveRastreo
    assert transaction.tipo_cuenta_beneficiario == order.tipoCuentaBeneficiario
    assert transaction.rfc_curp_beneficiario == order.rfcCurpBeneficiario
    assert transaction.referencia_numerica == order.referenciaNumerica
    assert order.nombreBeneficiario == ('Ricardo Sanchez Castillo de la Mancha'
                                        ' S')
    assert order.nombreOrdenante == 'Ricardo Sanchez Castillo de la Mancha S'
    assert len(order.nombreBeneficiario) == 39
    assert len(order.nombreOrdenante) == 39

    order = transaction.create_order()
    assert transaction.stp_id == order.id

    transaction.delete()
Пример #2
0
def execute(order_val: dict):
    # Get version
    version = 0
    if "version" in order_val:
        version = order_val['version']
    if time_in_range(START_DOWNTIME, STOP_DOWNTIME, datetime.utcnow().time()):
        raise ScheduleError
    transaction = Transaction()
    try:
        input = factory.create(version, **order_val)
        transaction = input.transform()

        if not clabe.validate_clabe(transaction.cuenta_beneficiario) and (
                not luhnmod10.valid(transaction.cuenta_beneficiario)):
            raise MalformedOrderException()
    except (MalformedOrderException, TypeError, ValueError):
        transaction.set_state(Estado.error)
        transaction.save()
        raise MalformedOrderException()

    try:
        prev_trx = Transaction.objects.get(speid_id=transaction.speid_id)
        # Si la transacción ya esta como succeeded termina
        # Puede suceder cuando se corre la misma tarea tiempo después
        # Y la transacción ya fue confirmada por stp
        assert prev_trx.estado != Estado.succeeded
        transaction = prev_trx
        transaction.events.append(Event(type=EventType.retry))
    except DoesNotExist:
        transaction.events.append(Event(type=EventType.created))
        transaction.save()
        pass
    except AssertionError:
        # Para evitar que se vuelva a mandar o regresar se manda la excepción
        raise ResendSuccessOrderException()

    if transaction.monto > MAX_AMOUNT:
        transaction.events.append(Event(type=EventType.error))
        transaction.save()
        raise MalformedOrderException()

    now = datetime.utcnow()
    try:
        # Return transaction after 2 hours of creation
        assert (now - transaction.created_at) < timedelta(hours=2)
        transaction.create_order()
    except (
            AssertionError,
            InvalidAccountType,
            InvalidAmount,
            InvalidInstitution,
            InvalidTrackingKey,
            PldRejected,
            ValidationError,
    ):
        transaction.set_state(Estado.failed)
        transaction.save()
Пример #3
0
def test_fail_send_order_no_account_registered():
    transaction = Transaction(
        concepto_pago='PRUEBA',
        institucion_ordenante='90646',
        cuenta_beneficiario='072691004495711499',
        institucion_beneficiaria='40072',
        monto=1020,
        nombre_beneficiario='Ricardo Sánchez Castillo de la Mancha S.A. de CV',
        nombre_ordenante='   Ricardo Sánchez Castillo de la Mancha S.A. de CV',
        cuenta_ordenante='646180157000000004',
        rfc_curp_ordenante='ND',
        speid_id='speid_id',
        tipo_cuenta_beneficiario=40,
    )
    transaction_id = transaction.save().id

    with pytest.raises(MalformedOrderException):
        transaction.create_order()

    transaction = Transaction.objects.get(id=transaction_id)
    assert transaction.estado is Estado.error
    transaction.delete()