Exemple #1
0
def test_cancel_auction_admin(initdb):
    datetime_now = datetime(2000, 1, 2, 3, 4, 5, tzinfo=timezone.utc)
    datetime_end = datetime(2000, 12, 11, 10, 9, 8, tzinfo=timezone.utc)

    app = create_app({
        "MYSQL_CONNECT_KWARGS":
        testdb.MYSQL_CONNECT_KWARGS,
        "YAMI_ADMIN_PASSWORD":
        "******"
    })

    with app.app_context():
        g.datetime_now = datetime_now
        auction_id, _ = logic.new_auction({
            "itemname": "foo",
            "quantity": 1,
            "username": "******",
            "datetime_end": datetime_end,
            "price_start": 456,
            "price_prompt": None,
            "price_step_min": 111,
            "location": "anyware",
            "description": "something",
        })

        g.datetime_now = datetime_now + timedelta(minutes=30)
        result = logic.cancel_auction(auction_id, "password")
        auction, _ = logic.get_auction_info(auction_id, for_update=False)
        logic.commit()

    assert result == logic.CancelErrorCodes.CANCEL_OK
    assert auction["ended"] == 1
    assert auction["endtype"] == logic.EndType.ENDTYPE_CANCELED_BY_ADMIN
    assert auction["datetime_update"] == datetime_now + timedelta(minutes=30)
Exemple #2
0
def test_cancel_auction_seller(initdb):
    datetime_now = datetime(2000, 1, 2, 3, 4, 5, tzinfo=timezone.utc)
    datetime_end = datetime(2000, 12, 11, 10, 9, 8, tzinfo=timezone.utc)

    app = create_app({
        "MYSQL_CONNECT_KWARGS": testdb.MYSQL_CONNECT_KWARGS,
    })

    with app.app_context():
        g.datetime_now = datetime_now
        auction_id, password = logic.new_auction({
            "itemname": "foo",
            "quantity": 1,
            "username": "******",
            "datetime_end": datetime_end,
            "price_start": 456,
            "price_prompt": None,
            "price_step_min": 111,
            "location": "anyware",
            "description": "something",
        })

        g.datetime_now = datetime_now + timedelta(minutes=30)
        result = logic.cancel_auction(auction_id, password)
        auction, _ = logic.get_auction_info(auction_id, for_update=False)
        logic.commit()

    assert result == logic.CancelErrorCodes.CANCEL_OK
    assert auction["ended"] == 1
    assert auction["endtype"] == logic.EndType.ENDTYPE_CANCELED_BY_SELLER
    assert auction["datetime_update"] == datetime_now + timedelta(minutes=30)
Exemple #3
0
def test_cancel_auction_badpassword(initdb):
    datetime_now = datetime(2000, 1, 2, 3, 4, 5, tzinfo=timezone.utc)
    datetime_end = datetime(2000, 12, 11, 10, 9, 8, tzinfo=timezone.utc)

    app = create_app({
        "MYSQL_CONNECT_KWARGS": testdb.MYSQL_CONNECT_KWARGS,
    })

    with app.app_context():
        g.datetime_now = datetime_now
        auction_id, _ = logic.new_auction({
            "itemname": "foo",
            "quantity": 1,
            "username": "******",
            "datetime_end": datetime_end,
            "price_start": 456,
            "price_prompt": None,
            "price_step_min": 111,
            "location": "anyware",
            "description": "something",
        })

        g.datetime_now = datetime_now + timedelta(minutes=30)
        result = logic.cancel_auction(auction_id, "")

    assert result == logic.CancelErrorCodes.CANCEL_ERROR_BAD_PASSWORD
Exemple #4
0
def test_cancel_auction_badpassword():
    datetime_now = datetime(2000, 1, 2, 3, 4, 5, tzinfo=timezone.utc)
    #datetime_now_naive = datetime_now.replace(tzinfo=None)

    app = create_app({})

    cursor_mock1 = create_cursor_mock()
    cursor_mock1.fetchone.return_value = [""]
    cursor_mock2 = create_cursor_mock()
    db_mock = mock.MagicMock()
    db_mock.cursor.side_effect = [cursor_mock1, cursor_mock2]

    with app.app_context():
        g.datetime_now = datetime_now
        g.db = db_mock
        result = logic.cancel_auction(42, "password")

    assert result == logic.CancelErrorCodes.CANCEL_ERROR_BAD_PASSWORD

    assert db_mock.cursor.mock_calls == [
        mock.call(),
    ]

    assert cursor_mock1.mock_calls == [
        mock.call.execute(
            "SELECT password FROM t_auction_password WHERE auction_id = %s",
            (42, )),
        mock.call.fetchone(),
        mock.call.close(),
    ]
Exemple #5
0
def test_cancel_auction_ok(isadmin, monkeypatch):
    datetime_now = datetime(2000, 1, 2, 3, 4, 5, tzinfo=timezone.utc)
    #datetime_now_naive = datetime_now.replace(tzinfo=None)

    app = create_app({
        "YAMI_ADMIN_PASSWORD":
        "******"
        if isadmin else ""
    })

    get_auction_info_mock = mock.MagicMock()
    get_auction_info_mock.return_value = ({}, [])
    monkeypatch.setattr(
        logic, "get_auction_info",
        lambda auction_id, for_update: get_auction_info_mock(
            auction_id, for_update))

    cursor_mock1 = create_cursor_mock()
    cursor_mock1.fetchone.return_value = [
        "pbkdf2_sha256$100000$salt$A5Si7eMyyaE+uC6bJGMWBMMd+Xi04vD70sVJlE+deaU="
        if not isadmin else ""
    ]
    cursor_mock2 = create_cursor_mock()
    db_mock = mock.MagicMock()
    db_mock.cursor.side_effect = [cursor_mock1, cursor_mock2]

    with app.app_context():
        g.datetime_now = datetime_now
        g.db = db_mock
        result = logic.cancel_auction(42, "password")

    assert result == logic.CancelErrorCodes.CANCEL_OK

    assert db_mock.cursor.mock_calls == [
        mock.call(),
        mock.call(),
    ]

    assert cursor_mock1.mock_calls == [
        mock.call.execute(
            "SELECT password FROM t_auction_password WHERE auction_id = %s",
            (42, )),
        mock.call.fetchone(),
        mock.call.close(),
    ]

    assert cursor_mock2.mock_calls == [
        mock.call.execute(
            "UPDATE t_auction SET ended = 1, endtype = %s, datetime_update = %s WHERE auction_id = %s",
            (logic.EndType.ENDTYPE_CANCELED_BY_ADMIN if isadmin else
             logic.EndType.ENDTYPE_CANCELED_BY_SELLER, datetime_now, 42)),
        mock.call.close(),
    ]
Exemple #6
0
def test_cancel_auction_notfound(initdb):
    datetime_now = datetime(2000, 1, 2, 3, 4, 5, tzinfo=timezone.utc)
    datetime_end = datetime(2000, 12, 11, 10, 9, 8, tzinfo=timezone.utc)

    app = create_app({
        "MYSQL_CONNECT_KWARGS": testdb.MYSQL_CONNECT_KWARGS,
    })

    with app.app_context():
        g.datetime_now = datetime_now
        result = logic.cancel_auction(42, "")
        logic.commit()

    assert result == logic.CancelErrorCodes.CANCEL_ERROR_NOT_FOUND