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