Exemple #1
0
def test_get_chats_by_user_id__offer_responses():
    user = create_user("00")
    other_party = create_user("10")
    chat_room = create_chat_room("01")
    create_user_chat_room_association("02",
                                      user_id=user["id"],
                                      chat_room_id=chat_room["id"],
                                      is_archived=False)
    create_user_chat_room_association("12",
                                      user_id=other_party["id"],
                                      chat_room_id=chat_room["id"])
    offer = create_offer("03",
                         chat_room_id=chat_room["id"],
                         author_id=user["id"])
    resp = create_offer_response("04", offer_id=offer["id"])

    res = chat_service.get_chats_by_user_id(user_id=user["id"],
                                            as_buyer=True,
                                            as_seller=True)

    res_room = res["unarchived"][chat_room["id"]]
    chat_room.pop("disband_by_user_id")
    chat_room.pop("disband_time")
    assert_dict_in(chat_room, res_room)

    res_chats = res_room["chats"]
    assert {**offer, "type": "offer"} in res_chats
    assert {
        **offer,
        **resp,
        "author_id": other_party["id"],
        "is_deal_closed": False,
        "type": "offer_response",
    } in res_chats
Exemple #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)
Exemple #3
0
def test_create__is_sell():
    user_params = {
        "email": "*****@*****.**",
        "full_name": "Ben",
        "provider_user_id": "testing",
        "display_image_url": "http://blah",
        "is_buy": False,
        "auth_token": None,
    }

    committee_email = create_user(is_committee=True)["email"]

    with patch("src.services.EmailService.send_email") as mock:
        user_service.create_if_not_exists(**user_params)
        mock.assert_any_call(emails=[user_params["email"]],
                             template="register_seller")
        mock.assert_any_call(emails=[committee_email],
                             template="new_user_review")

    with session_scope() as session:
        user = session.query(User).filter_by(email="*****@*****.**").one().asdict()
        req = session.query(UserRequest).one().asdict()

    user_expected = user_params
    user_expected.pop("is_buy")
    user_expected.update({"can_buy": "NO", "can_sell": "UNAPPROVED"})
    assert_dict_in(user_expected, user)

    assert_dict_in({"user_id": user["id"], "is_buy": False}, req)
Exemple #4
0
def test_get_chats_by_user_id__chats():
    user = create_user("00")
    other_party = create_user("10")
    chat_room = create_chat_room("01")
    create_user_chat_room_association("02",
                                      user_id=user["id"],
                                      chat_room_id=chat_room["id"],
                                      is_archived=False)
    create_user_chat_room_association("12",
                                      user_id=other_party["id"],
                                      chat_room_id=chat_room["id"])
    chat = create_chat("03",
                       chat_room_id=chat_room["id"],
                       author_id=user["id"])
    other_chat = create_chat("13",
                             chat_room_id=chat_room["id"],
                             author_id=other_party["id"])

    res = chat_service.get_chats_by_user_id(user_id=user["id"],
                                            as_buyer=True,
                                            as_seller=True)

    res_room = res["unarchived"][chat_room["id"]]
    chat_room.pop("disband_by_user_id")
    chat_room.pop("disband_time")
    assert_dict_in(chat_room, res_room)

    res_chats = res_room["chats"]
    assert {**chat, "type": "chat"} in res_chats
    assert {**other_chat, "type": "chat"} in res_chats
Exemple #5
0
def test_create__user_exists():
    user_params = {
        "email": "*****@*****.**",
        "full_name": "Ben",
        "provider_user_id": "testing",
        "display_image_url": "http://blah",
        "is_buy": True,
        "auth_token": None,
    }
    with patch("src.services.EmailService.send_email"):
        user_service.create_if_not_exists(
            **{
                **user_params,
                "email": "*****@*****.**",
                "full_name": "Boo",
                "display_image_url": "old",
            })

    with patch("src.services.EmailService.send_email") as mock:
        user_service.create_if_not_exists(**user_params)
        mock.assert_not_called()

    with session_scope() as session:
        user = session.query(User).one().asdict()

    user_expected = user_params
    user_expected.pop("is_buy")
    user_expected.update({"can_buy": "UNAPPROVED", "can_sell": "NO"})
    assert_dict_in(user_expected, user)
Exemple #6
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)
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
Exemple #8
0
def test_edit_order():
    user = create_user()
    user_id = user["id"]
    buy_order = create_buy_order(user_id=user_id)

    with patch("src.services.EmailService.send_email") as email_mock:
        buy_order_service.edit_order(
            id=buy_order["id"], subject_id=user_id, new_number_of_shares=50
        )
        email_mock.assert_called_with(emails=[user["email"]], template="edit_buy_order")

    with session_scope() as session:
        new_buy_order = session.query(BuyOrder).get(buy_order["id"]).asdict()

    test_dict = {**buy_order, "number_of_shares": 50}
    del test_dict["updated_at"]
    assert_dict_in(test_dict, new_buy_order)
Exemple #9
0
def test_get_chats_by_user_id__archived():
    user = create_user("00")
    other_party = create_user("10")
    chat_room = create_chat_room("01")
    create_user_chat_room_association("02",
                                      user_id=user["id"],
                                      chat_room_id=chat_room["id"],
                                      is_archived=True)
    create_user_chat_room_association("12",
                                      user_id=other_party["id"],
                                      chat_room_id=chat_room["id"])

    res = chat_service.get_chats_by_user_id(user_id=user["id"],
                                            as_buyer=True,
                                            as_seller=True)

    res_room = res["archived"][chat_room["id"]]
    chat_room.pop("disband_by_user_id")
    chat_room.pop("disband_time")
    assert_dict_in(chat_room, res_room)
Exemple #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)
Exemple #11
0
def test_asdict():
    assert_dict_in({"a": 2}, DummyClass().asdict())