def test_create_multi_orders_with_reseller(self, normal_user):
        code_1 = random_lower_string()
        date_1 = datetime.date.today()
        value_1 = 542.54
        cpf = normal_user.cpf

        code_2 = random_lower_string()
        date_2 = datetime.date.today()
        value_2 = 1044

        order_in_1 = OrderCreate(
            code=code_1,
            date=date_1,
            value=value_1,
            cpf=cpf,
        )
        order_in_2 = OrderCreate(
            code=code_2,
            date=date_2,
            value=value_2,
            cpf=cpf,
        )

        order_1 = crud.order.create_with_reseller(db_session,
                                                  obj_in=order_in_1)
        order_2 = crud.order.create_with_reseller(db_session,
                                                  obj_in=order_in_2)

        assert order_1.reseller.cpf == order_2.reseller.cpf
    def test_error_create_order_without_reseller(self):
        code = random_lower_string()
        date = datetime.date.today()
        value = 343.11
        cpf = random_cpf()

        order_in = OrderCreate(code=code, date=date, value=value, cpf=cpf)
        with pytest.raises(IntegrityError):
            crud.order.create_with_reseller(db_session, obj_in=order_in)
    def test_create_order_with_reseller(self, normal_user):
        code = random_lower_string()
        date = datetime.date.today()
        value = 203.99

        order_in = OrderCreate(code=code,
                               date=date,
                               value=value,
                               cpf=normal_user.cpf)
        order = crud.order.create_with_reseller(db_session, obj_in=order_in)
        assert order.reseller.cpf == normalize_cpf(normal_user.cpf)
    def test_error_in_calculate_cashbach_value(self, normal_user):
        code = random_lower_string()
        date = datetime.date.today()
        value = 5345379857943875984798375

        order_in = OrderCreate(code=code,
                               date=date,
                               value=value,
                               cpf=normal_user.cpf)

        with pytest.raises(DataError):
            crud.order.create_with_reseller(db_session, obj_in=order_in)
    def test_create_order_and_validate_status_with_approved(self):
        code = random_lower_string()
        date = datetime.date.today()
        value = 254.65
        cpf = config.CPFS_WITH_AUTO_APPROVE[0]

        user, _ = create_random_user(cpf=cpf)

        order_in = OrderCreate(code=code, date=date, value=value, cpf=cpf)
        order = crud.order.create_with_reseller(db_session, obj_in=order_in)

        assert user.cpf == order.reseller_cpf
        assert order.status.name == "APPROVED"
    def test_create_order_and_validate_status_with_in_validation(
            self, normal_user):
        code = random_lower_string()
        date = datetime.date.today()
        value = 254.65

        order_in = OrderCreate(code=code,
                               date=date,
                               value=value,
                               cpf=normal_user.cpf)
        order = crud.order.create_with_reseller(db_session, obj_in=order_in)

        assert order.status.name == "IN_VALIDATION"
    def test_calculate_cashbach_value_with_10_percent(self, normal_user):
        code = random_lower_string()
        date = datetime.date.today()
        value_1 = 577.65
        value_2 = 999.98

        order_in_1 = OrderCreate(code=code,
                                 date=date,
                                 value=value_1,
                                 cpf=normal_user.cpf)
        order_in_2 = OrderCreate(code=code,
                                 date=date,
                                 value=value_2,
                                 cpf=normal_user.cpf)
        order_1 = crud.order.create_with_reseller(db_session,
                                                  obj_in=order_in_1)
        order_2 = crud.order.create_with_reseller(db_session,
                                                  obj_in=order_in_2)

        assert order_1.cashback_value == Decimal("57.76")
        assert order_2.cashback_value == Decimal("100.00")
        assert order_1.cashback_percentage == 10
        assert order_2.cashback_percentage == 10
    def test_calculate_cashbach_value_with_20_percent(self, normal_user):
        code = random_lower_string()
        date = datetime.date.today()
        value_1 = 1501.20
        value_2 = 3482

        order_in_1 = OrderCreate(code=code,
                                 date=date,
                                 value=value_1,
                                 cpf=normal_user.cpf)
        order_in_2 = OrderCreate(code=code,
                                 date=date,
                                 value=value_2,
                                 cpf=normal_user.cpf)
        order_1 = crud.order.create_with_reseller(db_session,
                                                  obj_in=order_in_1)
        order_2 = crud.order.create_with_reseller(db_session,
                                                  obj_in=order_in_2)

        assert order_1.cashback_value == Decimal("300.24")
        assert order_2.cashback_value == Decimal("696.40")
        assert order_1.cashback_percentage == 20
        assert order_2.cashback_percentage == 20
    def test_calculate_cashbach_value_with_15_percent(self, normal_user):
        code = random_lower_string()
        date = datetime.date.today()
        value_1 = 1250
        value_2 = 1499.99

        order_in_1 = OrderCreate(code=code,
                                 date=date,
                                 value=value_1,
                                 cpf=normal_user.cpf)
        order_in_2 = OrderCreate(code=code,
                                 date=date,
                                 value=value_2,
                                 cpf=normal_user.cpf)
        order_1 = crud.order.create_with_reseller(db_session,
                                                  obj_in=order_in_1)
        order_2 = crud.order.create_with_reseller(db_session,
                                                  obj_in=order_in_2)

        assert order_1.cashback_value == Decimal("187.50")
        assert order_2.cashback_value == Decimal("225.00")
        assert order_1.cashback_percentage == 15
        assert order_2.cashback_percentage == 15