Beispiel #1
0
def test_get_all():
    security = create_security("1")
    security2 = create_security("2")
    securities = security_service.get_all()
    assert len(securities) == 2
    assert frozenset([s["name"] for s in securities]) == frozenset(
        [security["name"], security2["name"]]
    )
Beispiel #2
0
def test_create_order__authorized():
    user = create_user()
    user_id = user["id"]
    security_id = create_security()["id"]

    sell_order_params = {
        "user_id": user_id,
        "number_of_shares": 20,
        "price": 30,
        "security_id": security_id,
    }

    with patch("src.services.RoundService.get_active", return_value=None), patch(
        "src.services.RoundService.should_round_start", return_value=False
    ), patch("src.services.EmailService.send_email") as email_mock:
        sell_order_id = sell_order_service.create_order(
            **sell_order_params, scheduler=None
        )["id"]
        email_mock.assert_called_with(
            emails=[user["email"]], template="create_sell_order"
        )

    with session_scope() as session:
        sell_order = session.query(SellOrder).get(sell_order_id).asdict()

    assert_dict_in({**sell_order_params, "round_id": None}, sell_order)
Beispiel #3
0
def test_create_order__pending():
    user = create_user(can_buy=False)
    user_id = user["id"]
    security_id = create_security()["id"]
    create_user_request(user_id=user_id, is_buy=True)
    round = create_round()

    buy_order_params = {
        "user_id": user_id,
        "number_of_shares": 20,
        "price": 30,
        "security_id": security_id,
    }

    with patch("src.services.RoundService.get_active", return_value=round), patch(
        "src.services.RoundService.should_round_start", return_value=False
    ), patch("src.services.EmailService.send_email") as email_mock:
        buy_order_id = buy_order_service.create_order(**buy_order_params)["id"]
        email_mock.assert_called_with(
            emails=[user["email"]], template="create_buy_order"
        )

    with session_scope() as session:
        buy_order = session.query(BuyOrder).get(buy_order_id).asdict()

    assert_dict_in({**buy_order_params, "round_id": round["id"]}, buy_order)
Beispiel #4
0
def test_edit_market_price__unauthorized():
    security = create_security()
    committee = create_user(is_committee=False)

    with pytest.raises(UnauthorizedException):
        security_service.edit_market_price(
            id=security["id"], subject_id=committee["id"], market_price=10
        )
def test_create_order__add_new_round():
    user = create_user()
    security_id = create_security()["id"]

    user_id = user["id"]

    sell_order_params = {
        "user_id": user_id,
        "number_of_shares": 20,
        "price": 30,
        "security_id": security_id,
    }
    create_buy_order(round_id=None, user_id=user_id)

    with patch("src.services.RoundService.get_active",
               return_value=None), patch(
                   "src.services.RoundService.should_round_start",
                   return_value=False), patch(
                       "src.services.EmailService.send_email") as email_mock:
        sell_order_id = sell_order_service.create_order(**sell_order_params,
                                                        scheduler=None)["id"]

    with patch("src.services.RoundService.get_active",
               return_value=None), patch(
                   "src.services.RoundService.should_round_start",
                   return_value=True), patch(
                       "src.services.EmailService.send_email") as email_mock:
        scheduler_mock = MagicMock()

        class SchedulerMock(BaseScheduler):
            shutdown = MagicMock()
            wakeup = MagicMock()
            add_job = scheduler_mock

        sell_order_id2 = sell_order_service.create_order(
            **sell_order_params, scheduler=SchedulerMock())["id"]

        email_mock.assert_any_call([user["email"]], template="round_opened")
        email_mock.assert_any_call(emails=[user["email"]],
                                   template="create_sell_order")

    scheduler_args = scheduler_mock.call_args
    assert scheduler_args[0][1] == "date"

    with session_scope() as session:
        assert scheduler_args[1]["run_date"] == session.query(
            Round).one().end_time

        sell_order = session.query(SellOrder).get(sell_order_id).asdict()
        sell_order2 = session.query(SellOrder).get(sell_order_id2).asdict()
        buy_order = session.query(BuyOrder).one().asdict()

    assert_dict_in(sell_order_params, sell_order)
    assert sell_order["round_id"] is not None
    assert_dict_in(sell_order_params, sell_order2)
    assert sell_order2["round_id"] is not None
    assert buy_order["round_id"] is not None
Beispiel #6
0
def test_create_order__unauthorized():
    user_id = create_user(can_buy=False)["id"]
    security_id = create_security()["id"]

    with pytest.raises(UnauthorizedException), patch(
        "src.services.EmailService.send_email"
    ) as email_mock:
        buy_order_service.create_order(
            user_id=user_id, number_of_shares=20, price=30, security_id=security_id
        )
        email_mock.assert_not_called()
Beispiel #7
0
def test_edit_market_price():
    security = create_security()
    committee = create_user(is_committee=True)

    security_service.edit_market_price(
        id=security["id"], subject_id=committee["id"], market_price=10
    )
    with session_scope() as session:
        assert session.query(Security).one().market_price == 10

    security_service.edit_market_price(
        id=security["id"], subject_id=committee["id"], market_price=None
    )
    with session_scope() as session:
        assert session.query(Security).one().market_price is None
Beispiel #8
0
def test_create_order__pending():
    user = create_user(can_sell=False)
    user_id = user["id"]
    security_id = create_security()["id"]
    create_user_request(user_id=user_id, is_buy=False)

    with pytest.raises(UnauthorizedException), patch(
        "src.services.EmailService.send_email"
    ) as email_mock:
        sell_order_service.create_order(
            user_id=user_id,
            number_of_shares=20,
            price=30,
            security_id=security_id,
            scheduler=None,
        )
        email_mock.assert_not_called()
Beispiel #9
0
def test_create_order__limit_reached():
    user_id = create_user()["id"]
    security_id = create_security()["id"]

    sell_order_params = {
        "user_id": user_id,
        "number_of_shares": 20,
        "price": 30,
        "security_id": security_id,
    }

    with patch("src.services.EmailService.send_email"):
        for _ in range(APP_CONFIG["ACQUITY_SELL_ORDER_PER_ROUND_LIMIT"]):
            sell_order_service.create_order(**sell_order_params, scheduler=None)
    with pytest.raises(UnauthorizedException), patch(
        "src.services.EmailService.send_email"
    ) as email_mock:
        sell_order_service.create_order(**sell_order_params, scheduler=None)
        email_mock.assert_not_called()
Beispiel #10
0
def test_create_order__authorized_no_active_rounds():
    user = create_user()
    user_id = user["id"]
    security_id = create_security()["id"]

    buy_order_params = {
        "user_id": user_id,
        "number_of_shares": 20,
        "price": 30,
        "security_id": security_id,
    }

    with patch("src.services.RoundService.get_active", return_value=None), patch(
        "src.services.EmailService.send_email"
    ) as email_mock:
        buy_order_id = buy_order_service.create_order(**buy_order_params)["id"]
        email_mock.assert_called_with(
            emails=[user["email"]], template="create_buy_order"
        )

    with session_scope() as session:
        buy_order = session.query(BuyOrder).get(buy_order_id).asdict()

    assert_dict_in({**buy_order_params, "round_id": None}, buy_order)