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"]] )
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)
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)
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
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()
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
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()
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()
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)