chore(trading): refactor tests (#5835)
This commit is contained in:
parent
53ac2dadee
commit
196ba78806
60
apps/trading/e2e/tests/fees/fees_test_ids.py
Normal file
60
apps/trading/e2e/tests/fees/fees_test_ids.py
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# test_ids.py
|
||||||
|
|
||||||
|
# Constants for test IDs
|
||||||
|
ADJUSTED_FEES = "adjusted-fees"
|
||||||
|
TOTAL_FEE_BEFORE_DISCOUNT = "total-fee-before-discount"
|
||||||
|
INFRASTRUCTURE_FEES = "infrastructure-fees"
|
||||||
|
MAKER_FEES = "maker-fees"
|
||||||
|
LIQUIDITY_FEES = "liquidity-fees"
|
||||||
|
TOTAL_DISCOUNT = "total-discount"
|
||||||
|
VOLUME_DISCOUNT_ROW = "volume-discount-row"
|
||||||
|
REFERRAL_DISCOUNT_ROW = "referral-discount-row"
|
||||||
|
PAST_EPOCHS_VOLUME = "past-epochs-volume"
|
||||||
|
REQUIRED_FOR_NEXT_TIER = "required-for-next-tier"
|
||||||
|
TIER_VALUE_0 = "tier-value-0"
|
||||||
|
TIER_VALUE_1 = "tier-value-1"
|
||||||
|
DISCOUNT_VALUE_0 = "discount-value-0"
|
||||||
|
DISCOUNT_VALUE_1 = "discount-value-1"
|
||||||
|
MIN_VOLUME_VALUE_0 = "min-volume-value-0"
|
||||||
|
MIN_VOLUME_VALUE_1 = "min-volume-value-1"
|
||||||
|
MY_VOLUME_VALUE_0 = "my-volume-value-0"
|
||||||
|
MY_VOLUME_VALUE_1 = "my-volume-value-1"
|
||||||
|
ORDER_SIZE = "order-size"
|
||||||
|
ORDER_PRICE = "order-price"
|
||||||
|
DISCOUNT_PILL = "discount-pill"
|
||||||
|
FEES_TEXT = "fees-text"
|
||||||
|
TOOLTIP_CONTENT = "tooltip-content"
|
||||||
|
INFRASTRUCTURE_FEE_FACTOR = "infrastructure-fee-factor"
|
||||||
|
INFRASTRUCTURE_FEE_VALUE = "infrastructure-fee-value"
|
||||||
|
LIQUIDITY_FEE_FACTOR = "liquidity-fee-factor"
|
||||||
|
LIQUIDITY_FEE_VALUE = "liquidity-fee-value"
|
||||||
|
MAKER_FEE_FACTOR = "maker-fee-factor"
|
||||||
|
MAKER_FEE_VALUE = "maker-fee-value"
|
||||||
|
SUBTOTAL_FEE_FACTOR = "subtotal-fee-factor"
|
||||||
|
SUBTOTAL_FEE_VALUE = "subtotal-fee-value"
|
||||||
|
DISCOUNT_FEE_FACTOR = "discount-fee-factor"
|
||||||
|
DISCOUNT_FEE_VALUE = "discount-fee-value"
|
||||||
|
TOTAL_FEE_VALUE = "total-fee-value"
|
||||||
|
RUNNING_NOTIONAL_TAKER_VOLUME = "running-notional-taker-volume"
|
||||||
|
EPOCHS_IN_REFERRAL_SET = "epochs-in-referral-set"
|
||||||
|
REQUIRED_EPOCHS_VALUE_0 = "required-epochs-value-0"
|
||||||
|
REQUIRED_EPOCHS_VALUE_1 = "required-epochs-value-1"
|
||||||
|
FILLS = "Fills"
|
||||||
|
TAB_FILLS = "tab-fills"
|
||||||
|
FEE_BREAKDOWN_TOOLTIP = "fee-breakdown-tooltip"
|
||||||
|
PINNED_ROW_LOCATOR = ".ag-pinned-left-cols-container .ag-row"
|
||||||
|
ROW_LOCATOR = ".ag-center-cols-container .ag-row"
|
||||||
|
# Col-Ids:
|
||||||
|
COL_INSTRUMENT_CODE = '[data-testid="market-code"]'
|
||||||
|
COL_CODE = '[col-id="code"]'
|
||||||
|
COL_SIZE = '[col-id="size"]'
|
||||||
|
COL_PRICE = '[col-id="price"]'
|
||||||
|
COL_PRICE_1 = '[col-id="price_1"]'
|
||||||
|
COL_AGGRESSOR = '[col-id="aggressor"]'
|
||||||
|
COL_FEE = '[col-id="fee"]'
|
||||||
|
COL_FEE_DISCOUNT = '[col-id="fee-discount"]'
|
||||||
|
COL_FEE_AFTER_DISCOUNT = '[col-id="feeAfterDiscount"]'
|
||||||
|
COL_INFRA_FEE = '[col-id="infraFee"]'
|
||||||
|
COL_MAKER_FEE = '[col-id="makerFee"]'
|
||||||
|
COL_LIQUIDITY_FEE = '[col-id="liquidityFee"]'
|
||||||
|
COL_TOTAL_FEE = '[col-id="totalFee"]'
|
@ -1,689 +0,0 @@
|
|||||||
import pytest
|
|
||||||
|
|
||||||
from playwright.sync_api import Page, expect
|
|
||||||
from vega_sim.null_service import VegaServiceNull
|
|
||||||
from actions.vega import submit_order
|
|
||||||
from wallet_config import MM_WALLET
|
|
||||||
from conftest import init_vega, init_page, auth_setup, cleanup_container
|
|
||||||
from actions.utils import next_epoch, change_keys, forward_time
|
|
||||||
from fixtures.market import market_exists, setup_continuous_market
|
|
||||||
|
|
||||||
# region Constants for test IDs
|
|
||||||
ADJUSTED_FEES = "adjusted-fees"
|
|
||||||
TOTAL_FEE_BEFORE_DISCOUNT = "total-fee-before-discount"
|
|
||||||
INFRASTRUCTURE_FEES = "infrastructure-fees"
|
|
||||||
MAKER_FEES = "maker-fees"
|
|
||||||
LIQUIDITY_FEES = "liquidity-fees"
|
|
||||||
TOTAL_DISCOUNT = "total-discount"
|
|
||||||
VOLUME_DISCOUNT_ROW = "volume-discount-row"
|
|
||||||
REFERRAL_DISCOUNT_ROW = "referral-discount-row"
|
|
||||||
PAST_EPOCHS_VOLUME = "past-epochs-volume"
|
|
||||||
REQUIRED_FOR_NEXT_TIER = "required-for-next-tier"
|
|
||||||
TIER_VALUE_0 = "tier-value-0"
|
|
||||||
TIER_VALUE_1 = "tier-value-1"
|
|
||||||
DISCOUNT_VALUE_0 = "discount-value-0"
|
|
||||||
DISCOUNT_VALUE_1 = "discount-value-1"
|
|
||||||
MIN_VOLUME_VALUE_0 = "min-volume-value-0"
|
|
||||||
MIN_VOLUME_VALUE_1 = "min-volume-value-1"
|
|
||||||
MY_VOLUME_VALUE_0 = "my-volume-value-0"
|
|
||||||
MY_VOLUME_VALUE_1 = "my-volume-value-1"
|
|
||||||
ORDER_SIZE = "order-size"
|
|
||||||
ORDER_PRICE = "order-price"
|
|
||||||
DISCOUNT_PILL = "discount-pill"
|
|
||||||
FEES_TEXT = "fees-text"
|
|
||||||
TOOLTIP_CONTENT = "tooltip-content"
|
|
||||||
INFRASTRUCTURE_FEE_FACTOR = "infrastructure-fee-factor"
|
|
||||||
INFRASTRUCTURE_FEE_VALUE = "infrastructure-fee-value"
|
|
||||||
LIQUIDITY_FEE_FACTOR = "liquidity-fee-factor"
|
|
||||||
LIQUIDITY_FEE_VALUE = "liquidity-fee-value"
|
|
||||||
MAKER_FEE_FACTOR = "maker-fee-factor"
|
|
||||||
MAKER_FEE_VALUE = "maker-fee-value"
|
|
||||||
SUBTOTAL_FEE_FACTOR = "subtotal-fee-factor"
|
|
||||||
SUBTOTAL_FEE_VALUE = "subtotal-fee-value"
|
|
||||||
DISCOUNT_FEE_FACTOR = "discount-fee-factor"
|
|
||||||
DISCOUNT_FEE_VALUE = "discount-fee-value"
|
|
||||||
TOTAL_FEE_VALUE = "total-fee-value"
|
|
||||||
RUNNING_NOTIONAL_TAKER_VOLUME = "running-notional-taker-volume"
|
|
||||||
EPOCHS_IN_REFERRAL_SET = "epochs-in-referral-set"
|
|
||||||
REQUIRED_EPOCHS_VALUE_0 = "required-epochs-value-0"
|
|
||||||
REQUIRED_EPOCHS_VALUE_1 = "required-epochs-value-1"
|
|
||||||
FILLS = "Fills"
|
|
||||||
TAB_FILLS = "tab-fills"
|
|
||||||
FEE_BREAKDOWN_TOOLTIP = "fee-breakdown-tooltip"
|
|
||||||
PINNED_ROW_LOCATOR = ".ag-pinned-left-cols-container .ag-row"
|
|
||||||
ROW_LOCATOR = ".ag-center-cols-container .ag-row"
|
|
||||||
# Col-Ids:
|
|
||||||
COL_INSTRUMENT_CODE = '[data-testid="market-code"]'
|
|
||||||
COL_CODE = '[col-id="code"]'
|
|
||||||
COL_SIZE = '[col-id="size"]'
|
|
||||||
COL_PRICE = '[col-id="price"]'
|
|
||||||
COL_PRICE_1 = '[col-id="price_1"]'
|
|
||||||
COL_AGGRESSOR = '[col-id="aggressor"]'
|
|
||||||
COL_FEE = '[col-id="fee"]'
|
|
||||||
COL_FEE_DISCOUNT = '[col-id="fee-discount"]'
|
|
||||||
COL_FEE_AFTER_DISCOUNT = '[col-id="feeAfterDiscount"]'
|
|
||||||
COL_INFRA_FEE = '[col-id="infraFee"]'
|
|
||||||
COL_MAKER_FEE = '[col-id="makerFee"]'
|
|
||||||
COL_LIQUIDITY_FEE = '[col-id="liquidityFee"]'
|
|
||||||
COL_TOTAL_FEE = '[col-id="totalFee"]'
|
|
||||||
# endregion
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def market_ids():
|
|
||||||
return {
|
|
||||||
"tier_1_volume": "default_id",
|
|
||||||
"tier_2_volume": "default_id",
|
|
||||||
"tier_1_referral": "default_id",
|
|
||||||
"tier_2_referral": "default_id",
|
|
||||||
"combo": "default_id",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_volume_discount_tier_1(request):
|
|
||||||
with init_vega(request) as vega_volume_discount_tier_1:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_volume_discount_tier_1)) # Register the cleanup function
|
|
||||||
yield vega_volume_discount_tier_1
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_volume_discount_tier_2(request):
|
|
||||||
with init_vega(request) as vega_volume_discount_tier_2:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_volume_discount_tier_2)) # Register the cleanup function
|
|
||||||
yield vega_volume_discount_tier_2
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_referral_discount_tier_1(request):
|
|
||||||
with init_vega(request) as vega_referral_discount_tier_1:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_referral_discount_tier_1)) # Register the cleanup function
|
|
||||||
yield vega_referral_discount_tier_1
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_referral_discount_tier_2(request):
|
|
||||||
with init_vega(request) as vega_referral_discount_tier_2:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_referral_discount_tier_2)) # Register the cleanup function
|
|
||||||
yield vega_referral_discount_tier_2
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_referral_and_volume_discount(request):
|
|
||||||
with init_vega(request) as vega_referral_and_volume_discount:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_referral_and_volume_discount)) # Register the cleanup function
|
|
||||||
yield vega_referral_and_volume_discount
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def page(vega_instance, browser, request):
|
|
||||||
with init_page(vega_instance, browser, request) as page_instance:
|
|
||||||
yield page_instance
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def vega_instance(
|
|
||||||
tier,
|
|
||||||
discount_program,
|
|
||||||
vega_volume_discount_tier_1,
|
|
||||||
vega_volume_discount_tier_2,
|
|
||||||
vega_referral_discount_tier_1,
|
|
||||||
vega_referral_discount_tier_2,
|
|
||||||
vega_referral_and_volume_discount,
|
|
||||||
):
|
|
||||||
if discount_program == "volume":
|
|
||||||
return vega_volume_discount_tier_1 if tier == 1 else vega_volume_discount_tier_2
|
|
||||||
elif discount_program == "referral":
|
|
||||||
return (
|
|
||||||
vega_referral_discount_tier_1
|
|
||||||
if tier == 1
|
|
||||||
else vega_referral_discount_tier_2
|
|
||||||
)
|
|
||||||
elif discount_program == "combo":
|
|
||||||
return vega_referral_and_volume_discount
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def auth(vega_instance, page):
|
|
||||||
return auth_setup(vega_instance, page)
|
|
||||||
|
|
||||||
|
|
||||||
def setup_market_with_volume_discount_program(vega: VegaServiceNull, tier: int):
|
|
||||||
market = setup_continuous_market(vega, custom_quantum=100000)
|
|
||||||
vega.update_volume_discount_program(
|
|
||||||
proposal_key=MM_WALLET.name,
|
|
||||||
benefit_tiers=[
|
|
||||||
{
|
|
||||||
"minimum_running_notional_taker_volume": 100,
|
|
||||||
"volume_discount_factor": 0.1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"minimum_running_notional_taker_volume": 200,
|
|
||||||
"volume_discount_factor": 0.2,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
window_length=7,
|
|
||||||
)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
|
|
||||||
order_count = 2 if tier == 1 else 3
|
|
||||||
for _ in range(order_count):
|
|
||||||
submit_order(vega, "Key 1", market, "SIDE_BUY", 1, 110)
|
|
||||||
forward_time(vega, True if _ < order_count - 1 else False)
|
|
||||||
|
|
||||||
return market
|
|
||||||
|
|
||||||
|
|
||||||
def setup_market_with_referral_discount_program(vega: VegaServiceNull, tier: int):
|
|
||||||
market = setup_continuous_market(vega, custom_quantum=100000)
|
|
||||||
vega.update_referral_program(
|
|
||||||
proposal_key=MM_WALLET.name,
|
|
||||||
benefit_tiers=[
|
|
||||||
{
|
|
||||||
"minimum_running_notional_taker_volume": 100,
|
|
||||||
"minimum_epochs": 1,
|
|
||||||
"referral_reward_factor": 0.1,
|
|
||||||
"referral_discount_factor": 0.1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"minimum_running_notional_taker_volume": 200,
|
|
||||||
"minimum_epochs": 2,
|
|
||||||
"referral_reward_factor": 0.2,
|
|
||||||
"referral_discount_factor": 0.2,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
staking_tiers=[
|
|
||||||
{"minimum_staked_tokens": 100, "referral_reward_multiplier": 1.1},
|
|
||||||
{"minimum_staked_tokens": 200, "referral_reward_multiplier": 1.2},
|
|
||||||
],
|
|
||||||
window_length=1,
|
|
||||||
)
|
|
||||||
vega.create_referral_set(key_name=MM_WALLET.name)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
referral_set_id = list(vega.list_referral_sets().keys())[0]
|
|
||||||
vega.apply_referral_code(key_name="Key 1", id=referral_set_id)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
|
|
||||||
order_count = 2
|
|
||||||
order_size = 1 if tier == 1 else 2
|
|
||||||
for _ in range(order_count):
|
|
||||||
submit_order(vega, "Key 1", market, "SIDE_BUY", order_size, 110)
|
|
||||||
forward_time(vega, True if _ < order_count - 1 else False)
|
|
||||||
|
|
||||||
return market
|
|
||||||
|
|
||||||
|
|
||||||
def setup_combined_market(vega: VegaServiceNull):
|
|
||||||
market = setup_continuous_market(vega, custom_quantum=100000)
|
|
||||||
vega.update_volume_discount_program(
|
|
||||||
proposal_key=MM_WALLET.name,
|
|
||||||
benefit_tiers=[
|
|
||||||
{
|
|
||||||
"minimum_running_notional_taker_volume": 100,
|
|
||||||
"volume_discount_factor": 0.1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"minimum_running_notional_taker_volume": 200,
|
|
||||||
"volume_discount_factor": 0.2,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
window_length=7,
|
|
||||||
)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
|
|
||||||
vega.update_referral_program(
|
|
||||||
proposal_key=MM_WALLET.name,
|
|
||||||
benefit_tiers=[
|
|
||||||
{
|
|
||||||
"minimum_running_notional_taker_volume": 100,
|
|
||||||
"minimum_epochs": 1,
|
|
||||||
"referral_reward_factor": 0.1,
|
|
||||||
"referral_discount_factor": 0.1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"minimum_running_notional_taker_volume": 200,
|
|
||||||
"minimum_epochs": 2,
|
|
||||||
"referral_reward_factor": 0.2,
|
|
||||||
"referral_discount_factor": 0.2,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
staking_tiers=[
|
|
||||||
{"minimum_staked_tokens": 100, "referral_reward_multiplier": 1.1},
|
|
||||||
{"minimum_staked_tokens": 200, "referral_reward_multiplier": 1.2},
|
|
||||||
],
|
|
||||||
window_length=1,
|
|
||||||
)
|
|
||||||
vega.create_referral_set(key_name=MM_WALLET.name)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
referral_set_id = list(vega.list_referral_sets().keys())[0]
|
|
||||||
vega.apply_referral_code(key_name="Key 1", id=referral_set_id)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
|
|
||||||
order_count = 2
|
|
||||||
order_size = 2
|
|
||||||
for _ in range(order_count):
|
|
||||||
submit_order(vega, "Key 1", market, "SIDE_BUY", order_size, 110)
|
|
||||||
forward_time(vega, True if _ < order_count - 1 else False)
|
|
||||||
return market
|
|
||||||
|
|
||||||
|
|
||||||
def set_market_volume_discount(vega, tier, discount_program, market_ids):
|
|
||||||
market_id_key = f"tier_{tier}_{discount_program}"
|
|
||||||
if discount_program == "combo":
|
|
||||||
market_id_key = "combo"
|
|
||||||
|
|
||||||
market_id = market_ids.get(market_id_key, "default_id")
|
|
||||||
|
|
||||||
print(f"Checking if market exists: {market_id}")
|
|
||||||
if not market_exists(vega, market_id):
|
|
||||||
print(
|
|
||||||
f"Market doesn't exist for {discount_program} tier {tier}. Setting up new market."
|
|
||||||
)
|
|
||||||
|
|
||||||
if discount_program == "volume":
|
|
||||||
market_id = setup_market_with_volume_discount_program(vega, tier)
|
|
||||||
elif discount_program == "referral":
|
|
||||||
market_id = setup_market_with_referral_discount_program(vega, tier)
|
|
||||||
elif discount_program == "combo":
|
|
||||||
market_id = setup_combined_market(vega)
|
|
||||||
|
|
||||||
market_ids[market_id_key] = market_id
|
|
||||||
|
|
||||||
print(f"Using market ID: {market_id}")
|
|
||||||
return market_ids
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, expected_text",
|
|
||||||
[
|
|
||||||
(1, "volume", "9.045%-9.045%"),
|
|
||||||
(2, "volume", "8.04%-8.04%"),
|
|
||||||
(1, "referral", "9.045%-9.045%"),
|
|
||||||
(2, "referral", "8.04%-8.04%"),
|
|
||||||
(2, "combo", "6.432%-6.432%"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_fees_page_discount_program_my_trading_fees(
|
|
||||||
tier, expected_text, discount_program, vega_instance, page: Page, market_ids
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
|
|
||||||
page.goto("/#/fees")
|
|
||||||
expect(page.get_by_test_id(ADJUSTED_FEES)).to_have_text(expected_text)
|
|
||||||
expect(page.get_by_test_id(TOTAL_FEE_BEFORE_DISCOUNT)).to_have_text(
|
|
||||||
"Total fee before discount10.05%-10.05%"
|
|
||||||
)
|
|
||||||
expect(page.get_by_test_id(INFRASTRUCTURE_FEES)).to_have_text("Infrastructure0.05%")
|
|
||||||
expect(page.get_by_test_id(MAKER_FEES)).to_have_text("Maker10%")
|
|
||||||
expect(page.get_by_test_id(LIQUIDITY_FEES)).to_have_text("Liquidity0%-0%")
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, volume_discount, total_discount, referral_discount",
|
|
||||||
[
|
|
||||||
(1, "volume", "Volume discount10%", "10%", "Referral discount0%"),
|
|
||||||
(2, "volume", "Volume discount20%", "20%", "Referral discount0%"),
|
|
||||||
(1, "referral", "Volume discount0%", "10%", "Referral discount10%"),
|
|
||||||
(2, "referral", "Volume discount0%", "20%", "Referral discount20%"),
|
|
||||||
(2, "combo", "Volume discount20%", "36%", "Referral discount20%"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_fees_page_discount_program_total_discount(
|
|
||||||
tier,
|
|
||||||
discount_program,
|
|
||||||
volume_discount,
|
|
||||||
referral_discount,
|
|
||||||
total_discount,
|
|
||||||
vega_instance,
|
|
||||||
page: Page,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
page.goto("/#/fees")
|
|
||||||
expect(page.get_by_test_id(TOTAL_DISCOUNT)).to_have_text(total_discount)
|
|
||||||
expect(page.get_by_test_id(VOLUME_DISCOUNT_ROW)).to_have_text(volume_discount)
|
|
||||||
expect(page.get_by_test_id(REFERRAL_DISCOUNT_ROW)).to_have_text(referral_discount)
|
|
||||||
page.get_by_test_id(TOTAL_DISCOUNT).hover()
|
|
||||||
expect(page.get_by_test_id(TOOLTIP_CONTENT).nth(0)).to_have_text(
|
|
||||||
"The total discount is calculated according to the following formula: 1 - (1 - dvolume) ⋇ (1 - dreferral)"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, past_epochs_volume, required_for_next_tier",
|
|
||||||
[(1, "volume", "103", "97"), (2, "volume", "206", "")],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_fees_page_volume_discount_program_my_current_volume(
|
|
||||||
tier,
|
|
||||||
discount_program,
|
|
||||||
past_epochs_volume,
|
|
||||||
required_for_next_tier,
|
|
||||||
vega_instance,
|
|
||||||
page: Page,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
page.goto("/#/fees")
|
|
||||||
expect(page.get_by_test_id(PAST_EPOCHS_VOLUME)).to_have_text(past_epochs_volume)
|
|
||||||
|
|
||||||
if tier == 1:
|
|
||||||
expect(page.get_by_test_id(REQUIRED_FOR_NEXT_TIER)).to_have_text(
|
|
||||||
required_for_next_tier
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
expect(page.get_by_test_id(REQUIRED_FOR_NEXT_TIER)).not_to_be_visible()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, notional_taker_volume, epochs_in_set",
|
|
||||||
[(1, "referral", "103", "1"), (2, "referral", "207", "1")],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_fees_page_referral_discount_program_referral_benefits(
|
|
||||||
tier,
|
|
||||||
vega_instance,
|
|
||||||
discount_program,
|
|
||||||
notional_taker_volume,
|
|
||||||
epochs_in_set,
|
|
||||||
page: Page,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
page.goto("/#/fees")
|
|
||||||
expect(page.get_by_test_id(RUNNING_NOTIONAL_TAKER_VOLUME)).to_have_text(
|
|
||||||
notional_taker_volume
|
|
||||||
)
|
|
||||||
expect(page.get_by_test_id(EPOCHS_IN_REFERRAL_SET)).to_have_text(epochs_in_set)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, my_volume_test_id, my_volume_value, your_tier",
|
|
||||||
[
|
|
||||||
(1, "volume", "my-volume-value-0", "103", "your-volume-tier-0"),
|
|
||||||
(2, "volume", "my-volume-value-1", "206", "your-volume-tier-1"),
|
|
||||||
(1, "referral", "my-volume-value-0", "103", "your-referral-tier-0"),
|
|
||||||
(2, "referral", "my-volume-value-1", "206", "your-referral-tier-1"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_fees_page_discount_program_discount(
|
|
||||||
tier,
|
|
||||||
discount_program,
|
|
||||||
my_volume_test_id,
|
|
||||||
my_volume_value,
|
|
||||||
your_tier,
|
|
||||||
vega_instance,
|
|
||||||
page: Page,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
page.goto("/#/fees")
|
|
||||||
expect(page.get_by_test_id(TIER_VALUE_0)).to_have_text("1")
|
|
||||||
expect(page.get_by_test_id(TIER_VALUE_1)).to_have_text("2")
|
|
||||||
expect(page.get_by_test_id(DISCOUNT_VALUE_0)).to_have_text("10%")
|
|
||||||
expect(page.get_by_test_id(DISCOUNT_VALUE_1)).to_have_text("20%")
|
|
||||||
expect(page.get_by_test_id(MIN_VOLUME_VALUE_0)).to_have_text("100")
|
|
||||||
expect(page.get_by_test_id(MIN_VOLUME_VALUE_1)).to_have_text("200")
|
|
||||||
|
|
||||||
if discount_program == "volume":
|
|
||||||
expect(page.get_by_test_id(my_volume_test_id)).to_have_text(my_volume_value)
|
|
||||||
else:
|
|
||||||
expect(page.get_by_test_id(REQUIRED_EPOCHS_VALUE_0)).to_have_text("1")
|
|
||||||
expect(page.get_by_test_id(REQUIRED_EPOCHS_VALUE_1)).to_have_text("2")
|
|
||||||
|
|
||||||
expect(page.get_by_test_id(your_tier).nth(1)).to_be_visible()
|
|
||||||
expect(page.get_by_test_id(your_tier).nth(1)).to_have_text("Your tier")
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, fees_after_discount",
|
|
||||||
[
|
|
||||||
(1, "volume", "9.045%"),
|
|
||||||
(2, "volume", "8.04%"),
|
|
||||||
(1, "referral", "9.045%"),
|
|
||||||
(2, "referral", "8.04%"),
|
|
||||||
(2, "combo", "6.432%"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_fees_page_discount_program_fees_by_market(
|
|
||||||
tier, discount_program, fees_after_discount, vega_instance, page: Page, market_ids
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
page.goto("/#/fees")
|
|
||||||
pinned = page.locator(PINNED_ROW_LOCATOR)
|
|
||||||
row = page.locator(ROW_LOCATOR)
|
|
||||||
expect(pinned.locator(COL_CODE)).to_have_text("BTC:DAI_2023Futr")
|
|
||||||
expect(row.locator(COL_FEE_AFTER_DISCOUNT)).to_have_text(fees_after_discount)
|
|
||||||
expect(row.locator(COL_INFRA_FEE)).to_have_text("0.05%")
|
|
||||||
expect(row.locator(COL_MAKER_FEE)).to_have_text("10%")
|
|
||||||
expect(row.locator(COL_LIQUIDITY_FEE)).to_have_text("0%")
|
|
||||||
expect(row.locator(COL_TOTAL_FEE)).to_have_text("10.05%")
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, discount, discount_value, total_fee",
|
|
||||||
[
|
|
||||||
(1, "volume", "-10%", "-0.01005 tDAI", "0.09045 tDAI"),
|
|
||||||
(2, "volume", "-20%", "-0.0201 tDAI", "0.0804 tDAI"),
|
|
||||||
(1, "referral", "-10%", "-0.01005 tDAI", "0.09045 tDAI"),
|
|
||||||
(2, "referral", "-20%", "-0.0201 tDAI", "0.0804 tDAI"),
|
|
||||||
(2, "combo", "-36%", "-0.03618 tDAI", "0.06432 tDAI"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_deal_ticket_discount_program(
|
|
||||||
tier,
|
|
||||||
discount_program,
|
|
||||||
discount,
|
|
||||||
discount_value,
|
|
||||||
total_fee,
|
|
||||||
vega_instance,
|
|
||||||
page: Page,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
market_id_key = f"tier_{tier}_{discount_program}"
|
|
||||||
if discount_program == "combo":
|
|
||||||
market_id_key = "combo"
|
|
||||||
market_id = market_ids.get(market_id_key)
|
|
||||||
page.goto(f"/#/markets/{market_id}")
|
|
||||||
page.get_by_test_id(ORDER_SIZE).fill("1")
|
|
||||||
page.get_by_test_id(ORDER_PRICE).fill("1")
|
|
||||||
expect(page.get_by_test_id(DISCOUNT_PILL)).to_have_text(discount)
|
|
||||||
page.get_by_test_id(FEES_TEXT).hover()
|
|
||||||
tooltip = page.get_by_test_id(TOOLTIP_CONTENT).first
|
|
||||||
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_FACTOR)).to_have_text("0.05%")
|
|
||||||
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_VALUE)).to_have_text("0.0005 tDAI")
|
|
||||||
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_FACTOR)).to_have_text("0%")
|
|
||||||
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_VALUE)).to_have_text("0.00 tDAI")
|
|
||||||
expect(tooltip.get_by_test_id(MAKER_FEE_FACTOR)).to_have_text("10%")
|
|
||||||
expect(tooltip.get_by_test_id(MAKER_FEE_VALUE)).to_have_text("0.10 tDAI")
|
|
||||||
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_FACTOR)).to_have_text("10.05%")
|
|
||||||
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_VALUE)).to_have_text("0.1005 tDAI")
|
|
||||||
expect(tooltip.get_by_test_id(DISCOUNT_FEE_FACTOR)).to_have_text(discount)
|
|
||||||
expect(tooltip.get_by_test_id(DISCOUNT_FEE_VALUE)).to_have_text(discount_value)
|
|
||||||
expect(tooltip.get_by_test_id(TOTAL_FEE_VALUE)).to_have_text(total_fee)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, fee, fee_discount, price_1, size",
|
|
||||||
[
|
|
||||||
(1, "volume", "9.36158 tDAI", "1.04017 tDAI", "103.50 tDAI", "+1"),
|
|
||||||
(2, "volume", "8.3214 tDAI", "2.08035 tDAI", "103.50 tDAI", "+1"),
|
|
||||||
(
|
|
||||||
1,
|
|
||||||
"referral",
|
|
||||||
"8.42543 tDAI ",
|
|
||||||
"1.04017 tDAI",
|
|
||||||
"103.50 tDAI",
|
|
||||||
"+1",
|
|
||||||
),
|
|
||||||
(
|
|
||||||
2,
|
|
||||||
"referral",
|
|
||||||
"13.31424 tDAI",
|
|
||||||
"4.1607 tDAI",
|
|
||||||
"207.00 tDAI",
|
|
||||||
"+2",
|
|
||||||
),
|
|
||||||
(2, "combo", "10.6514 tDAI ", "7.48926 tDAI", "207.00 tDAI", "+2"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_fills_taker_discount_program(
|
|
||||||
tier,
|
|
||||||
discount_program,
|
|
||||||
fee,
|
|
||||||
fee_discount,
|
|
||||||
price_1,
|
|
||||||
size,
|
|
||||||
vega_instance,
|
|
||||||
page: Page,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
market_id_key = f"tier_{tier}_{discount_program}"
|
|
||||||
if discount_program == "combo":
|
|
||||||
market_id_key = "combo"
|
|
||||||
market_id = market_ids.get(market_id_key)
|
|
||||||
page.goto(f"/#/markets/{market_id}")
|
|
||||||
page.get_by_test_id(FILLS).click()
|
|
||||||
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
|
||||||
expect(row.locator(COL_SIZE)).to_have_text(size)
|
|
||||||
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
|
||||||
expect(row.locator(COL_PRICE_1)).to_have_text(price_1)
|
|
||||||
expect(row.locator(COL_AGGRESSOR)).to_have_text("Taker")
|
|
||||||
expect(row.locator(COL_FEE)).to_have_text(fee)
|
|
||||||
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text(fee_discount)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, fee, fee_discount, size, price_1",
|
|
||||||
[
|
|
||||||
(1, "volume", "-9.315 tDAI", "1.035 tDAI", "-1", "103.50 tDAI"),
|
|
||||||
(2, "volume", "-8.28 tDAI", "2.07 tDAI", "-1", "103.50 tDAI"),
|
|
||||||
(1, "referral", "-8.3835 tDAI", "1.035 tDAI", "-1", "103.50 tDAI"),
|
|
||||||
(2, "referral", "-13.248 tDAI", "4.14 tDAI", "-2", "207.00 tDAI"),
|
|
||||||
(2, "combo", "-10.5984 tDAI ", "7.452 tDAI", "-2", "207.00 tDAI"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_fills_maker_discount_program(
|
|
||||||
tier,
|
|
||||||
discount_program,
|
|
||||||
vega_instance,
|
|
||||||
fee,
|
|
||||||
fee_discount,
|
|
||||||
size,
|
|
||||||
price_1,
|
|
||||||
page: Page,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
market_id_key = f"tier_{tier}_{discount_program}"
|
|
||||||
if discount_program == "combo":
|
|
||||||
market_id_key = "combo"
|
|
||||||
market_id = market_ids.get(market_id_key)
|
|
||||||
page.goto(f"/#/markets/{market_id}")
|
|
||||||
change_keys(page, vega_instance, MM_WALLET.name)
|
|
||||||
page.get_by_test_id(FILLS).click()
|
|
||||||
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
|
||||||
expect(row.locator(COL_SIZE)).to_have_text(size)
|
|
||||||
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
|
||||||
expect(row.locator(COL_PRICE_1)).to_have_text(price_1)
|
|
||||||
expect(row.locator(COL_AGGRESSOR)).to_have_text("Maker")
|
|
||||||
expect(row.locator(COL_FEE)).to_have_text(fee)
|
|
||||||
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text(fee_discount)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, fee",
|
|
||||||
[
|
|
||||||
(1, "volume", "9.315"),
|
|
||||||
(2, "volume", "8.28"),
|
|
||||||
(1, "referral", "8.3835"),
|
|
||||||
(2, "referral", "13.248"),
|
|
||||||
(2, "combo", "10.5984"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_fills_maker_fee_tooltip_discount_program(
|
|
||||||
tier, discount_program, fee, vega_instance, page: Page, market_ids
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
market_id_key = f"tier_{tier}_{discount_program}"
|
|
||||||
if discount_program == "combo":
|
|
||||||
market_id_key = "combo"
|
|
||||||
market_id = market_ids.get(market_id_key)
|
|
||||||
page.goto(f"/#/markets/{market_id}")
|
|
||||||
change_keys(page, vega_instance, MM_WALLET.name)
|
|
||||||
page.get_by_test_id(FILLS).click()
|
|
||||||
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
|
||||||
# tbd - tooltip is not visible without this wait
|
|
||||||
page.wait_for_timeout(1000)
|
|
||||||
row.locator(COL_FEE).hover()
|
|
||||||
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
|
||||||
f"If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-{fee} tDAITotal fees-{fee} tDAI"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"tier, discount_program, maker_fee, total_fee, infra_fee",
|
|
||||||
[
|
|
||||||
(1, "volume", "9.315", "9.36158", "0.04658"),
|
|
||||||
(2, "volume", "8.28", "8.3214", "0.0414"),
|
|
||||||
(1, "referral", "8.3835", "8.42543", "0.04193"),
|
|
||||||
(2, "referral", "13.248", "13.31424", "0.06624"),
|
|
||||||
(2, "combo", "10.5984", "10.6514", "0.053"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("risk_accepted", "auth", "market_ids")
|
|
||||||
def test_fills_taker_fee_tooltip_discount_program(
|
|
||||||
tier,
|
|
||||||
discount_program,
|
|
||||||
vega_instance,
|
|
||||||
maker_fee,
|
|
||||||
total_fee,
|
|
||||||
infra_fee,
|
|
||||||
page: Page,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
market_ids = set_market_volume_discount(
|
|
||||||
vega_instance, tier, discount_program, market_ids
|
|
||||||
)
|
|
||||||
market_id_key = f"tier_{tier}_{discount_program}"
|
|
||||||
if discount_program == "combo":
|
|
||||||
market_id_key = "combo"
|
|
||||||
market_id = market_ids.get(market_id_key)
|
|
||||||
page.goto(f"/#/markets/{market_id}")
|
|
||||||
page.get_by_test_id(FILLS).click()
|
|
||||||
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
|
||||||
# tbd - tooltip is not visible without this wait
|
|
||||||
page.wait_for_timeout(1000)
|
|
||||||
row.locator(COL_FEE).hover()
|
|
||||||
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
|
||||||
f"If the market was activeFees to be paid by the taker; discounts are already applied.Infrastructure fee{infra_fee} tDAILiquidity fee0.00 tDAIMaker fee{maker_fee} tDAITotal fees{total_fee} tDAI"
|
|
||||||
)
|
|
216
apps/trading/e2e/tests/fees/test_fees_combo_tier_2.py
Normal file
216
apps/trading/e2e/tests/fees/test_fees_combo_tier_2.py
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
import pytest
|
||||||
|
from fees_test_ids import *
|
||||||
|
from playwright.sync_api import Page, expect
|
||||||
|
from vega_sim.null_service import VegaServiceNull
|
||||||
|
from actions.vega import submit_order
|
||||||
|
from wallet_config import MM_WALLET
|
||||||
|
from conftest import (
|
||||||
|
init_vega,
|
||||||
|
init_page,
|
||||||
|
auth_setup,
|
||||||
|
risk_accepted_setup,
|
||||||
|
cleanup_container,
|
||||||
|
)
|
||||||
|
from actions.utils import next_epoch, change_keys, forward_time
|
||||||
|
from fixtures.market import setup_continuous_market
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def vega(request):
|
||||||
|
with init_vega(request) as vega_instance:
|
||||||
|
request.addfinalizer(
|
||||||
|
lambda: cleanup_container(vega_instance)
|
||||||
|
)
|
||||||
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def page(vega, browser, request):
|
||||||
|
with init_page(vega, browser, request) as page:
|
||||||
|
risk_accepted_setup(page)
|
||||||
|
auth_setup(vega, page)
|
||||||
|
yield page
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module", autouse=True)
|
||||||
|
def setup_combined_market(vega: VegaServiceNull):
|
||||||
|
market = setup_continuous_market(vega, custom_quantum=100000)
|
||||||
|
vega.update_volume_discount_program(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
benefit_tiers=[
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 100,
|
||||||
|
"volume_discount_factor": 0.1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 200,
|
||||||
|
"volume_discount_factor": 0.2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
window_length=7,
|
||||||
|
)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
vega.update_referral_program(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
benefit_tiers=[
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 100,
|
||||||
|
"minimum_epochs": 1,
|
||||||
|
"referral_reward_factor": 0.1,
|
||||||
|
"referral_discount_factor": 0.1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 200,
|
||||||
|
"minimum_epochs": 2,
|
||||||
|
"referral_reward_factor": 0.2,
|
||||||
|
"referral_discount_factor": 0.2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
staking_tiers=[
|
||||||
|
{"minimum_staked_tokens": 100, "referral_reward_multiplier": 1.1},
|
||||||
|
{"minimum_staked_tokens": 200, "referral_reward_multiplier": 1.2},
|
||||||
|
],
|
||||||
|
window_length=1,
|
||||||
|
)
|
||||||
|
vega.create_referral_set(key_name=MM_WALLET.name)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
referral_set_id = list(vega.list_referral_sets().keys())[0]
|
||||||
|
vega.apply_referral_code(key_name="Key 1", id=referral_set_id)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
for _ in range(2):
|
||||||
|
submit_order(vega, "Key 1", market, "SIDE_BUY", 2, 110)
|
||||||
|
forward_time(vega, True if _ < 2 - 1 else False)
|
||||||
|
return market
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_combo_tier_2")
|
||||||
|
def test_fees_page_discount_program_my_trading_fees(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(ADJUSTED_FEES)).to_have_text("6.432%-6.432%")
|
||||||
|
expect(page.get_by_test_id(TOTAL_FEE_BEFORE_DISCOUNT)).to_have_text(
|
||||||
|
"Total fee before discount10.05%-10.05%"
|
||||||
|
)
|
||||||
|
expect(page.get_by_test_id(INFRASTRUCTURE_FEES)).to_have_text("Infrastructure0.05%")
|
||||||
|
expect(page.get_by_test_id(MAKER_FEES)).to_have_text("Maker10%")
|
||||||
|
expect(page.get_by_test_id(LIQUIDITY_FEES)).to_have_text("Liquidity0%-0%")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_combo_tier_2")
|
||||||
|
def test_fees_page_discount_program_total_discount(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(TOTAL_DISCOUNT)).to_have_text("36%")
|
||||||
|
expect(page.get_by_test_id(VOLUME_DISCOUNT_ROW)).to_have_text("Volume discount20%")
|
||||||
|
expect(page.get_by_test_id(REFERRAL_DISCOUNT_ROW)).to_have_text(
|
||||||
|
"Referral discount20%"
|
||||||
|
)
|
||||||
|
page.get_by_test_id(TOTAL_DISCOUNT).hover()
|
||||||
|
expect(page.get_by_test_id(TOOLTIP_CONTENT).nth(0)).to_have_text(
|
||||||
|
"The total discount is calculated according to the following formula: 1 - (1 - dvolume) ⋇ (1 - dreferral)"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_combo_tier_2")
|
||||||
|
def test_fees_page_discount_program_fees_by_market(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
pinned = page.locator(PINNED_ROW_LOCATOR)
|
||||||
|
row = page.locator(ROW_LOCATOR)
|
||||||
|
expect(pinned.locator(COL_CODE)).to_have_text("BTC:DAI_2023Futr")
|
||||||
|
expect(row.locator(COL_FEE_AFTER_DISCOUNT)).to_have_text("6.432%")
|
||||||
|
expect(row.locator(COL_INFRA_FEE)).to_have_text("0.05%")
|
||||||
|
expect(row.locator(COL_MAKER_FEE)).to_have_text("10%")
|
||||||
|
expect(row.locator(COL_LIQUIDITY_FEE)).to_have_text("0%")
|
||||||
|
expect(row.locator(COL_TOTAL_FEE)).to_have_text("10.05%")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_combo_tier_2")
|
||||||
|
def test_deal_ticket_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_combined_market,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_combined_market}")
|
||||||
|
page.get_by_test_id(ORDER_SIZE).fill("1")
|
||||||
|
page.get_by_test_id(ORDER_PRICE).fill("1")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_PILL)).to_have_text("-36%")
|
||||||
|
page.get_by_test_id(FEES_TEXT).hover()
|
||||||
|
tooltip = page.get_by_test_id(TOOLTIP_CONTENT).first
|
||||||
|
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_FACTOR)).to_have_text("0.05%")
|
||||||
|
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_VALUE)).to_have_text("0.0005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_FACTOR)).to_have_text("0%")
|
||||||
|
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_VALUE)).to_have_text("0.00 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(MAKER_FEE_FACTOR)).to_have_text("10%")
|
||||||
|
expect(tooltip.get_by_test_id(MAKER_FEE_VALUE)).to_have_text("0.10 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_FACTOR)).to_have_text("10.05%")
|
||||||
|
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_VALUE)).to_have_text("0.1005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(DISCOUNT_FEE_FACTOR)).to_have_text("-36%")
|
||||||
|
expect(tooltip.get_by_test_id(DISCOUNT_FEE_VALUE)).to_have_text("-0.03618 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(TOTAL_FEE_VALUE)).to_have_text("0.06432 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_combo_tier_2")
|
||||||
|
def test_fills_taker_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_combined_market,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_combined_market}")
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
expect(row.locator(COL_SIZE)).to_have_text("+2")
|
||||||
|
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_PRICE_1)).to_have_text("207.00 tDAI")
|
||||||
|
expect(row.locator(COL_AGGRESSOR)).to_have_text("Taker")
|
||||||
|
expect(row.locator(COL_FEE)).to_have_text("10.6514 tDAI")
|
||||||
|
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text("7.48926 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_combo_tier_2")
|
||||||
|
def test_fills_maker_discount_program(
|
||||||
|
vega: VegaServiceNull,
|
||||||
|
page: Page,
|
||||||
|
setup_combined_market,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_combined_market}")
|
||||||
|
change_keys(page, vega, MM_WALLET.name)
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
expect(row.locator(COL_SIZE)).to_have_text("-2")
|
||||||
|
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_PRICE_1)).to_have_text("207.00 tDAI")
|
||||||
|
expect(row.locator(COL_AGGRESSOR)).to_have_text("Maker")
|
||||||
|
expect(row.locator(COL_FEE)).to_have_text("-10.5984 tDAI")
|
||||||
|
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text("7.452 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_combo_tier_2")
|
||||||
|
def test_fills_maker_fee_tooltip_discount_program(
|
||||||
|
vega: VegaServiceNull, page: Page, setup_combined_market
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_combined_market}")
|
||||||
|
change_keys(page, vega, MM_WALLET.name)
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
# tbd - tooltip is not visible without this wait
|
||||||
|
page.wait_for_timeout(1000)
|
||||||
|
row.locator(COL_FEE).hover()
|
||||||
|
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
||||||
|
"If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-10.5984 tDAITotal fees-10.5984 tDAI"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_combo_tier_2")
|
||||||
|
def test_fills_taker_fee_tooltip_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_combined_market,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_combined_market}")
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
# tbd - tooltip is not visible without this wait
|
||||||
|
page.wait_for_timeout(1000)
|
||||||
|
row.locator(COL_FEE).hover()
|
||||||
|
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
||||||
|
"If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-10.5984 tDAITotal fees-10.5984 tDAI"
|
||||||
|
)
|
@ -0,0 +1,221 @@
|
|||||||
|
import pytest
|
||||||
|
from fees_test_ids import *
|
||||||
|
from playwright.sync_api import Page, expect
|
||||||
|
from vega_sim.null_service import VegaServiceNull
|
||||||
|
from actions.vega import submit_order
|
||||||
|
from wallet_config import MM_WALLET
|
||||||
|
from conftest import (
|
||||||
|
init_vega,
|
||||||
|
init_page,
|
||||||
|
auth_setup,
|
||||||
|
risk_accepted_setup,
|
||||||
|
cleanup_container,
|
||||||
|
)
|
||||||
|
from actions.utils import next_epoch, change_keys, forward_time
|
||||||
|
from fixtures.market import setup_continuous_market
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def vega(request):
|
||||||
|
with init_vega(request) as vega_instance:
|
||||||
|
request.addfinalizer(
|
||||||
|
lambda: cleanup_container(vega_instance)
|
||||||
|
)
|
||||||
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def page(vega, browser, request):
|
||||||
|
with init_page(vega, browser, request) as page:
|
||||||
|
risk_accepted_setup(page)
|
||||||
|
auth_setup(vega, page)
|
||||||
|
yield page
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module", autouse=True)
|
||||||
|
def setup_market_with_referral_discount_program(vega: VegaServiceNull):
|
||||||
|
market = setup_continuous_market(vega, custom_quantum=100000)
|
||||||
|
vega.update_referral_program(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
benefit_tiers=[
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 100,
|
||||||
|
"minimum_epochs": 1,
|
||||||
|
"referral_reward_factor": 0.1,
|
||||||
|
"referral_discount_factor": 0.1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 200,
|
||||||
|
"minimum_epochs": 2,
|
||||||
|
"referral_reward_factor": 0.2,
|
||||||
|
"referral_discount_factor": 0.2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
staking_tiers=[
|
||||||
|
{"minimum_staked_tokens": 100, "referral_reward_multiplier": 1.1},
|
||||||
|
{"minimum_staked_tokens": 200, "referral_reward_multiplier": 1.2},
|
||||||
|
],
|
||||||
|
window_length=1,
|
||||||
|
)
|
||||||
|
vega.create_referral_set(key_name=MM_WALLET.name)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
referral_set_id = list(vega.list_referral_sets().keys())[0]
|
||||||
|
vega.apply_referral_code(key_name="Key 1", id=referral_set_id)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
for _ in range(2):
|
||||||
|
submit_order(vega, "Key 1", market, "SIDE_BUY", 1, 110)
|
||||||
|
forward_time(vega, True if _ < 2 - 1 else False)
|
||||||
|
|
||||||
|
return market
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_1")
|
||||||
|
def test_fees_page_discount_program_my_trading_fees(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(ADJUSTED_FEES)).to_have_text("9.045%-9.045%")
|
||||||
|
expect(page.get_by_test_id(TOTAL_FEE_BEFORE_DISCOUNT)).to_have_text(
|
||||||
|
"Total fee before discount10.05%-10.05%"
|
||||||
|
)
|
||||||
|
expect(page.get_by_test_id(INFRASTRUCTURE_FEES)).to_have_text("Infrastructure0.05%")
|
||||||
|
expect(page.get_by_test_id(MAKER_FEES)).to_have_text("Maker10%")
|
||||||
|
expect(page.get_by_test_id(LIQUIDITY_FEES)).to_have_text("Liquidity0%-0%")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_1")
|
||||||
|
def test_fees_page_discount_program_total_discount(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(TOTAL_DISCOUNT)).to_have_text("10%")
|
||||||
|
expect(page.get_by_test_id(VOLUME_DISCOUNT_ROW)).to_have_text("Volume discount0%")
|
||||||
|
expect(page.get_by_test_id(REFERRAL_DISCOUNT_ROW)).to_have_text(
|
||||||
|
"Referral discount10%"
|
||||||
|
)
|
||||||
|
page.get_by_test_id(TOTAL_DISCOUNT).hover()
|
||||||
|
expect(page.get_by_test_id(TOOLTIP_CONTENT).nth(0)).to_have_text(
|
||||||
|
"The total discount is calculated according to the following formula: 1 - (1 - dvolume) ⋇ (1 - dreferral)"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_1")
|
||||||
|
def test_fees_page_referral_discount_program_referral_benefits(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(RUNNING_NOTIONAL_TAKER_VOLUME)).to_have_text("103")
|
||||||
|
expect(page.get_by_test_id(EPOCHS_IN_REFERRAL_SET)).to_have_text("1")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_1")
|
||||||
|
def test_fees_page_discount_program_discount(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(TIER_VALUE_0)).to_have_text("1")
|
||||||
|
expect(page.get_by_test_id(TIER_VALUE_1)).to_have_text("2")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_VALUE_0)).to_have_text("10%")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_VALUE_1)).to_have_text("20%")
|
||||||
|
expect(page.get_by_test_id(MIN_VOLUME_VALUE_0)).to_have_text("100")
|
||||||
|
expect(page.get_by_test_id(MIN_VOLUME_VALUE_1)).to_have_text("200")
|
||||||
|
|
||||||
|
expect(page.get_by_test_id(REQUIRED_EPOCHS_VALUE_0)).to_have_text("1")
|
||||||
|
expect(page.get_by_test_id(REQUIRED_EPOCHS_VALUE_1)).to_have_text("2")
|
||||||
|
|
||||||
|
expect(page.get_by_test_id("your-referral-tier-0").nth(1)).to_be_visible()
|
||||||
|
expect(page.get_by_test_id("your-referral-tier-0").nth(1)).to_have_text("Your tier")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_1")
|
||||||
|
def test_fees_page_discount_program_fees_by_market(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
pinned = page.locator(PINNED_ROW_LOCATOR)
|
||||||
|
row = page.locator(ROW_LOCATOR)
|
||||||
|
expect(pinned.locator(COL_CODE)).to_have_text("BTC:DAI_2023Futr")
|
||||||
|
expect(row.locator(COL_FEE_AFTER_DISCOUNT)).to_have_text("9.045%")
|
||||||
|
expect(row.locator(COL_INFRA_FEE)).to_have_text("0.05%")
|
||||||
|
expect(row.locator(COL_MAKER_FEE)).to_have_text("10%")
|
||||||
|
expect(row.locator(COL_LIQUIDITY_FEE)).to_have_text("0%")
|
||||||
|
expect(row.locator(COL_TOTAL_FEE)).to_have_text("10.05%")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_1")
|
||||||
|
def test_deal_ticket_discount_program(
|
||||||
|
page: Page, setup_market_with_referral_discount_program
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_referral_discount_program}")
|
||||||
|
page.get_by_test_id(ORDER_SIZE).fill("1")
|
||||||
|
page.get_by_test_id(ORDER_PRICE).fill("1")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_PILL)).to_have_text("-10%")
|
||||||
|
page.get_by_test_id(FEES_TEXT).hover()
|
||||||
|
tooltip = page.get_by_test_id(TOOLTIP_CONTENT).first
|
||||||
|
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_FACTOR)).to_have_text("0.05%")
|
||||||
|
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_VALUE)).to_have_text("0.0005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_FACTOR)).to_have_text("0%")
|
||||||
|
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_VALUE)).to_have_text("0.00 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(MAKER_FEE_FACTOR)).to_have_text("10%")
|
||||||
|
expect(tooltip.get_by_test_id(MAKER_FEE_VALUE)).to_have_text("0.10 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_FACTOR)).to_have_text("10.05%")
|
||||||
|
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_VALUE)).to_have_text("0.1005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(DISCOUNT_FEE_FACTOR)).to_have_text("-10%")
|
||||||
|
expect(tooltip.get_by_test_id(DISCOUNT_FEE_VALUE)).to_have_text("-0.01005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(TOTAL_FEE_VALUE)).to_have_text("0.09045 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_1")
|
||||||
|
def test_fills_taker_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_referral_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_referral_discount_program}")
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
expect(row.locator(COL_SIZE)).to_have_text("+1")
|
||||||
|
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_PRICE_1)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_AGGRESSOR)).to_have_text("Taker")
|
||||||
|
expect(row.locator(COL_FEE)).to_have_text("8.42543 tDAI")
|
||||||
|
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text("1.04017 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_1")
|
||||||
|
def test_fills_maker_discount_program(
|
||||||
|
vega: VegaServiceNull,
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_referral_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_referral_discount_program}")
|
||||||
|
change_keys(page, vega, MM_WALLET.name)
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
expect(row.locator(COL_SIZE)).to_have_text("-1")
|
||||||
|
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_PRICE_1)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_AGGRESSOR)).to_have_text("Maker")
|
||||||
|
expect(row.locator(COL_FEE)).to_have_text("-8.3835 tDAI")
|
||||||
|
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text("1.035 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_1")
|
||||||
|
def test_fills_maker_fee_tooltip_discount_program(
|
||||||
|
vega: VegaServiceNull, page: Page, setup_market_with_referral_discount_program
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_referral_discount_program}")
|
||||||
|
change_keys(page, vega, MM_WALLET.name)
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
# tbd - tooltip is not visible without this wait
|
||||||
|
page.wait_for_timeout(1000)
|
||||||
|
row.locator(COL_FEE).hover()
|
||||||
|
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
||||||
|
"If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-8.3835 tDAITotal fees-8.3835 tDAI"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_1")
|
||||||
|
def test_fills_taker_fee_tooltip_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_referral_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_referral_discount_program}")
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
# tbd - tooltip is not visible without this wait
|
||||||
|
page.wait_for_timeout(1000)
|
||||||
|
row.locator(COL_FEE).hover()
|
||||||
|
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
||||||
|
"If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-8.3835 tDAITotal fees-8.3835 tDAI"
|
||||||
|
)
|
@ -0,0 +1,222 @@
|
|||||||
|
import pytest
|
||||||
|
from fees_test_ids import *
|
||||||
|
from playwright.sync_api import Page, expect
|
||||||
|
from vega_sim.null_service import VegaServiceNull
|
||||||
|
from actions.vega import submit_order
|
||||||
|
from wallet_config import MM_WALLET
|
||||||
|
from conftest import (
|
||||||
|
init_vega,
|
||||||
|
init_page,
|
||||||
|
auth_setup,
|
||||||
|
risk_accepted_setup,
|
||||||
|
cleanup_container,
|
||||||
|
)
|
||||||
|
from actions.utils import next_epoch, change_keys, forward_time
|
||||||
|
from fixtures.market import setup_continuous_market
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def vega(request):
|
||||||
|
with init_vega(request) as vega_instance:
|
||||||
|
request.addfinalizer(
|
||||||
|
lambda: cleanup_container(vega_instance)
|
||||||
|
)
|
||||||
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def page(vega, browser, request):
|
||||||
|
with init_page(vega, browser, request) as page:
|
||||||
|
risk_accepted_setup(page)
|
||||||
|
auth_setup(vega, page)
|
||||||
|
yield page
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module", autouse=True)
|
||||||
|
def setup_market_with_referral_discount_program(vega: VegaServiceNull):
|
||||||
|
market = setup_continuous_market(vega, custom_quantum=100000)
|
||||||
|
vega.update_referral_program(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
benefit_tiers=[
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 100,
|
||||||
|
"minimum_epochs": 1,
|
||||||
|
"referral_reward_factor": 0.1,
|
||||||
|
"referral_discount_factor": 0.1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 200,
|
||||||
|
"minimum_epochs": 2,
|
||||||
|
"referral_reward_factor": 0.2,
|
||||||
|
"referral_discount_factor": 0.2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
staking_tiers=[
|
||||||
|
{"minimum_staked_tokens": 100, "referral_reward_multiplier": 1.1},
|
||||||
|
{"minimum_staked_tokens": 200, "referral_reward_multiplier": 1.2},
|
||||||
|
],
|
||||||
|
window_length=1,
|
||||||
|
)
|
||||||
|
vega.create_referral_set(key_name=MM_WALLET.name)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
referral_set_id = list(vega.list_referral_sets().keys())[0]
|
||||||
|
vega.apply_referral_code(key_name="Key 1", id=referral_set_id)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
for _ in range(2):
|
||||||
|
submit_order(vega, "Key 1", market, "SIDE_BUY", 2, 110)
|
||||||
|
forward_time(vega, True if _ < 2 - 1 else False)
|
||||||
|
|
||||||
|
return market
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_2")
|
||||||
|
def test_fees_page_discount_program_my_trading_fees(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(ADJUSTED_FEES)).to_have_text("8.04%-8.04%")
|
||||||
|
expect(page.get_by_test_id(TOTAL_FEE_BEFORE_DISCOUNT)).to_have_text(
|
||||||
|
"Total fee before discount10.05%-10.05%"
|
||||||
|
)
|
||||||
|
expect(page.get_by_test_id(INFRASTRUCTURE_FEES)).to_have_text("Infrastructure0.05%")
|
||||||
|
expect(page.get_by_test_id(MAKER_FEES)).to_have_text("Maker10%")
|
||||||
|
expect(page.get_by_test_id(LIQUIDITY_FEES)).to_have_text("Liquidity0%-0%")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_2")
|
||||||
|
def test_fees_page_discount_program_total_discount(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(TOTAL_DISCOUNT)).to_have_text("20%")
|
||||||
|
expect(page.get_by_test_id(VOLUME_DISCOUNT_ROW)).to_have_text("Volume discount0%")
|
||||||
|
expect(page.get_by_test_id(REFERRAL_DISCOUNT_ROW)).to_have_text(
|
||||||
|
"Referral discount20%"
|
||||||
|
)
|
||||||
|
page.get_by_test_id(TOTAL_DISCOUNT).hover()
|
||||||
|
expect(page.get_by_test_id(TOOLTIP_CONTENT).nth(0)).to_have_text(
|
||||||
|
"The total discount is calculated according to the following formula: 1 - (1 - dvolume) ⋇ (1 - dreferral)"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_2")
|
||||||
|
def test_fees_page_referral_discount_program_referral_benefits(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(RUNNING_NOTIONAL_TAKER_VOLUME)).to_have_text("207")
|
||||||
|
expect(page.get_by_test_id(REQUIRED_FOR_NEXT_TIER)).not_to_be_visible()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_2")
|
||||||
|
def test_fees_page_discount_program_discount(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(TIER_VALUE_0)).to_have_text("1")
|
||||||
|
expect(page.get_by_test_id(TIER_VALUE_1)).to_have_text("2")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_VALUE_0)).to_have_text("10%")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_VALUE_1)).to_have_text("20%")
|
||||||
|
expect(page.get_by_test_id(MIN_VOLUME_VALUE_0)).to_have_text("100")
|
||||||
|
expect(page.get_by_test_id(MIN_VOLUME_VALUE_1)).to_have_text("200")
|
||||||
|
|
||||||
|
expect(page.get_by_test_id(REQUIRED_EPOCHS_VALUE_0)).to_have_text("1")
|
||||||
|
expect(page.get_by_test_id(REQUIRED_EPOCHS_VALUE_1)).to_have_text("2")
|
||||||
|
|
||||||
|
expect(page.get_by_test_id("your-referral-tier-1").nth(1)).to_be_visible()
|
||||||
|
expect(page.get_by_test_id("your-referral-tier-1").nth(1)).to_have_text("Your tier")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_2")
|
||||||
|
def test_fees_page_discount_program_fees_by_market(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
pinned = page.locator(PINNED_ROW_LOCATOR)
|
||||||
|
row = page.locator(ROW_LOCATOR)
|
||||||
|
expect(pinned.locator(COL_CODE)).to_have_text("BTC:DAI_2023Futr")
|
||||||
|
expect(row.locator(COL_FEE_AFTER_DISCOUNT)).to_have_text("8.04%")
|
||||||
|
expect(row.locator(COL_INFRA_FEE)).to_have_text("0.05%")
|
||||||
|
expect(row.locator(COL_MAKER_FEE)).to_have_text("10%")
|
||||||
|
expect(row.locator(COL_LIQUIDITY_FEE)).to_have_text("0%")
|
||||||
|
expect(row.locator(COL_TOTAL_FEE)).to_have_text("10.05%")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_2")
|
||||||
|
def test_deal_ticket_discount_program(
|
||||||
|
page: Page, setup_market_with_referral_discount_program
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_referral_discount_program}")
|
||||||
|
page.get_by_test_id(ORDER_SIZE).fill("1")
|
||||||
|
page.get_by_test_id(ORDER_PRICE).fill("1")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_PILL)).to_have_text("-20%")
|
||||||
|
page.get_by_test_id(FEES_TEXT).hover()
|
||||||
|
tooltip = page.get_by_test_id(TOOLTIP_CONTENT).first
|
||||||
|
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_FACTOR)).to_have_text("0.05%")
|
||||||
|
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_VALUE)).to_have_text("0.0005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_FACTOR)).to_have_text("0%")
|
||||||
|
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_VALUE)).to_have_text("0.00 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(MAKER_FEE_FACTOR)).to_have_text("10%")
|
||||||
|
expect(tooltip.get_by_test_id(MAKER_FEE_VALUE)).to_have_text("0.10 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_FACTOR)).to_have_text("10.05%")
|
||||||
|
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_VALUE)).to_have_text("0.1005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(DISCOUNT_FEE_FACTOR)).to_have_text("-20%")
|
||||||
|
expect(tooltip.get_by_test_id(DISCOUNT_FEE_VALUE)).to_have_text("-0.0201 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(TOTAL_FEE_VALUE)).to_have_text("0.0804 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_2")
|
||||||
|
def test_fills_taker_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_referral_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_referral_discount_program}")
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
expect(row.locator(COL_SIZE)).to_have_text("+2")
|
||||||
|
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_PRICE_1)).to_have_text("207.00 tDAI")
|
||||||
|
expect(row.locator(COL_AGGRESSOR)).to_have_text("Taker")
|
||||||
|
expect(row.locator(COL_FEE)).to_have_text("13.31424 tDAI")
|
||||||
|
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text("4.1607 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_2")
|
||||||
|
def test_fills_maker_discount_program(
|
||||||
|
vega: VegaServiceNull,
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_referral_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_referral_discount_program}")
|
||||||
|
change_keys(page, vega, MM_WALLET.name)
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
expect(row.locator(COL_SIZE)).to_have_text("-2")
|
||||||
|
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_PRICE_1)).to_have_text("207.00 tDAI")
|
||||||
|
expect(row.locator(COL_AGGRESSOR)).to_have_text("Maker")
|
||||||
|
expect(row.locator(COL_FEE)).to_have_text("-13.248 tDAI")
|
||||||
|
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text("4.14 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_2")
|
||||||
|
def test_fills_maker_fee_tooltip_discount_program(
|
||||||
|
vega: VegaServiceNull, page: Page, setup_market_with_referral_discount_program
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_referral_discount_program}")
|
||||||
|
change_keys(page, vega, MM_WALLET.name)
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
# tbd - tooltip is not visible without this wait
|
||||||
|
page.wait_for_timeout(1000)
|
||||||
|
row.locator(COL_FEE).hover()
|
||||||
|
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
||||||
|
" If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-13.248 tDAITotal fees-13.248 tDAI "
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_referral_tier_2")
|
||||||
|
def test_fills_taker_fee_tooltip_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_referral_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_referral_discount_program}")
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
# tbd - tooltip is not visible without this wait
|
||||||
|
page.wait_for_timeout(1000)
|
||||||
|
row.locator(COL_FEE).hover()
|
||||||
|
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
||||||
|
"If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-13.248 tDAITotal fees-13.248 tDAI "
|
||||||
|
)
|
210
apps/trading/e2e/tests/fees/test_fees_volume_discount_tier_1.py
Normal file
210
apps/trading/e2e/tests/fees/test_fees_volume_discount_tier_1.py
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
import pytest
|
||||||
|
from fees_test_ids import *
|
||||||
|
from playwright.sync_api import Page, expect
|
||||||
|
from vega_sim.null_service import VegaServiceNull
|
||||||
|
from actions.vega import submit_order
|
||||||
|
from wallet_config import MM_WALLET
|
||||||
|
from conftest import (
|
||||||
|
init_vega,
|
||||||
|
init_page,
|
||||||
|
auth_setup,
|
||||||
|
risk_accepted_setup,
|
||||||
|
cleanup_container,
|
||||||
|
)
|
||||||
|
from actions.utils import next_epoch, change_keys, forward_time
|
||||||
|
from fixtures.market import setup_continuous_market
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def vega(request):
|
||||||
|
with init_vega(request) as vega_instance:
|
||||||
|
request.addfinalizer(
|
||||||
|
lambda: cleanup_container(vega_instance)
|
||||||
|
)
|
||||||
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def page(vega, browser, request):
|
||||||
|
with init_page(vega, browser, request) as page:
|
||||||
|
risk_accepted_setup(page)
|
||||||
|
auth_setup(vega, page)
|
||||||
|
yield page
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module", autouse=True)
|
||||||
|
def setup_market_with_volume_discount_program(vega: VegaServiceNull):
|
||||||
|
market = setup_continuous_market(vega, custom_quantum=100000)
|
||||||
|
vega.update_volume_discount_program(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
benefit_tiers=[
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 100,
|
||||||
|
"volume_discount_factor": 0.1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 200,
|
||||||
|
"volume_discount_factor": 0.2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
window_length=7,
|
||||||
|
)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
for _ in range(2):
|
||||||
|
submit_order(vega, "Key 1", market, "SIDE_BUY", 1, 110)
|
||||||
|
forward_time(vega, True if _ < 2 - 1 else False)
|
||||||
|
return market
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_1")
|
||||||
|
def test_fees_page_discount_program_my_trading_fees(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(ADJUSTED_FEES)).to_have_text("9.045%-9.045%")
|
||||||
|
expect(page.get_by_test_id(TOTAL_FEE_BEFORE_DISCOUNT)).to_have_text(
|
||||||
|
"Total fee before discount10.05%-10.05%"
|
||||||
|
)
|
||||||
|
expect(page.get_by_test_id(INFRASTRUCTURE_FEES)).to_have_text("Infrastructure0.05%")
|
||||||
|
expect(page.get_by_test_id(MAKER_FEES)).to_have_text("Maker10%")
|
||||||
|
expect(page.get_by_test_id(LIQUIDITY_FEES)).to_have_text("Liquidity0%-0%")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_1")
|
||||||
|
def test_fees_page_discount_program_total_discount(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(TOTAL_DISCOUNT)).to_have_text("10%")
|
||||||
|
expect(page.get_by_test_id(VOLUME_DISCOUNT_ROW)).to_have_text("Volume discount10%")
|
||||||
|
expect(page.get_by_test_id(REFERRAL_DISCOUNT_ROW)).to_have_text(
|
||||||
|
"Referral discount0%"
|
||||||
|
)
|
||||||
|
page.get_by_test_id(TOTAL_DISCOUNT).hover()
|
||||||
|
expect(page.get_by_test_id(TOOLTIP_CONTENT).nth(0)).to_have_text(
|
||||||
|
"The total discount is calculated according to the following formula: 1 - (1 - dvolume) ⋇ (1 - dreferral)"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_1")
|
||||||
|
def test_fees_page_volume_discount_program_my_current_volume(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(PAST_EPOCHS_VOLUME)).to_have_text("103")
|
||||||
|
|
||||||
|
expect(page.get_by_test_id(REQUIRED_FOR_NEXT_TIER)).to_have_text("97")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_1")
|
||||||
|
def test_fees_page_discount_program_discount(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(TIER_VALUE_0)).to_have_text("1")
|
||||||
|
expect(page.get_by_test_id(TIER_VALUE_1)).to_have_text("2")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_VALUE_0)).to_have_text("10%")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_VALUE_1)).to_have_text("20%")
|
||||||
|
expect(page.get_by_test_id(MIN_VOLUME_VALUE_0)).to_have_text("100")
|
||||||
|
expect(page.get_by_test_id(MIN_VOLUME_VALUE_1)).to_have_text("200")
|
||||||
|
expect(page.get_by_test_id("my-volume-value-0")).to_have_text("103")
|
||||||
|
expect(page.get_by_test_id("your-volume-tier-0").nth(1)).to_be_visible()
|
||||||
|
expect(page.get_by_test_id("your-volume-tier-0").nth(1)).to_have_text("Your tier")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_1")
|
||||||
|
def test_fees_page_discount_program_fees_by_market(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
pinned = page.locator(PINNED_ROW_LOCATOR)
|
||||||
|
row = page.locator(ROW_LOCATOR)
|
||||||
|
expect(pinned.locator(COL_CODE)).to_have_text("BTC:DAI_2023Futr")
|
||||||
|
expect(row.locator(COL_FEE_AFTER_DISCOUNT)).to_have_text("9.045%")
|
||||||
|
expect(row.locator(COL_INFRA_FEE)).to_have_text("0.05%")
|
||||||
|
expect(row.locator(COL_MAKER_FEE)).to_have_text("10%")
|
||||||
|
expect(row.locator(COL_LIQUIDITY_FEE)).to_have_text("0%")
|
||||||
|
expect(row.locator(COL_TOTAL_FEE)).to_have_text("10.05%")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_1")
|
||||||
|
def test_deal_ticket_discount_program_testing(
|
||||||
|
page: Page, setup_market_with_volume_discount_program
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_volume_discount_program}")
|
||||||
|
page.get_by_test_id(ORDER_SIZE).fill("1")
|
||||||
|
page.get_by_test_id(ORDER_PRICE).fill("1")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_PILL)).to_have_text("-10%")
|
||||||
|
page.get_by_test_id(FEES_TEXT).hover()
|
||||||
|
tooltip = page.get_by_test_id(TOOLTIP_CONTENT).first
|
||||||
|
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_FACTOR)).to_have_text("0.05%")
|
||||||
|
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_VALUE)).to_have_text("0.0005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_FACTOR)).to_have_text("0%")
|
||||||
|
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_VALUE)).to_have_text("0.00 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(MAKER_FEE_FACTOR)).to_have_text("10%")
|
||||||
|
expect(tooltip.get_by_test_id(MAKER_FEE_VALUE)).to_have_text("0.10 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_FACTOR)).to_have_text("10.05%")
|
||||||
|
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_VALUE)).to_have_text("0.1005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(DISCOUNT_FEE_FACTOR)).to_have_text("-10%")
|
||||||
|
expect(tooltip.get_by_test_id(DISCOUNT_FEE_VALUE)).to_have_text("-0.01005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(TOTAL_FEE_VALUE)).to_have_text("0.09045 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_1")
|
||||||
|
def test_fills_taker_discount_program(
|
||||||
|
page: Page, setup_market_with_volume_discount_program
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_volume_discount_program}")
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
expect(row.locator(COL_SIZE)).to_have_text("+1")
|
||||||
|
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_PRICE_1)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_AGGRESSOR)).to_have_text("Taker")
|
||||||
|
expect(row.locator(COL_FEE)).to_have_text("9.36158 tDAI")
|
||||||
|
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text("1.04017 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_1")
|
||||||
|
def test_fills_maker_discount_program(
|
||||||
|
page: Page, setup_market_with_volume_discount_program, vega: VegaServiceNull
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_volume_discount_program}")
|
||||||
|
change_keys(page, vega, MM_WALLET.name)
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
expect(row.locator(COL_SIZE)).to_have_text("-1")
|
||||||
|
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_PRICE_1)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_AGGRESSOR)).to_have_text("Maker")
|
||||||
|
expect(row.locator(COL_FEE)).to_have_text("-9.315 tDAI")
|
||||||
|
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text("1.035 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_1")
|
||||||
|
def test_fills_maker_fee_tooltip_discount_program(
|
||||||
|
vega: VegaServiceNull, page: Page, setup_market_with_volume_discount_program
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_volume_discount_program}")
|
||||||
|
change_keys(page, vega, MM_WALLET.name)
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
# tbd - tooltip is not visible without this wait
|
||||||
|
page.wait_for_timeout(1000)
|
||||||
|
row.locator(COL_FEE).hover()
|
||||||
|
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
||||||
|
"If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-9.315 tDAITotal fees-9.315 tDAI"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_1")
|
||||||
|
def test_fills_taker_fee_tooltip_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_volume_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_volume_discount_program}")
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
# tbd - tooltip is not visible without this wait
|
||||||
|
page.wait_for_timeout(1000)
|
||||||
|
row.locator(COL_FEE).hover()
|
||||||
|
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
||||||
|
"If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-9.315 tDAITotal fees-9.315 tDAI"
|
||||||
|
)
|
209
apps/trading/e2e/tests/fees/test_fees_volume_discount_tier_2.py
Normal file
209
apps/trading/e2e/tests/fees/test_fees_volume_discount_tier_2.py
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
import pytest
|
||||||
|
from fees_test_ids import *
|
||||||
|
from playwright.sync_api import Page, expect
|
||||||
|
from vega_sim.null_service import VegaServiceNull
|
||||||
|
from actions.vega import submit_order
|
||||||
|
from wallet_config import MM_WALLET
|
||||||
|
from conftest import (
|
||||||
|
init_vega,
|
||||||
|
init_page,
|
||||||
|
auth_setup,
|
||||||
|
risk_accepted_setup,
|
||||||
|
cleanup_container,
|
||||||
|
)
|
||||||
|
from actions.utils import next_epoch, change_keys, forward_time
|
||||||
|
from fixtures.market import setup_continuous_market
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def vega(request):
|
||||||
|
with init_vega(request) as vega_instance:
|
||||||
|
request.addfinalizer(
|
||||||
|
lambda: cleanup_container(vega_instance)
|
||||||
|
)
|
||||||
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def page(vega, browser, request):
|
||||||
|
with init_page(vega, browser, request) as page:
|
||||||
|
risk_accepted_setup(page)
|
||||||
|
auth_setup(vega, page)
|
||||||
|
yield page
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module", autouse=True)
|
||||||
|
def setup_market_with_volume_discount_program(vega: VegaServiceNull):
|
||||||
|
market = setup_continuous_market(vega, custom_quantum=100000)
|
||||||
|
vega.update_volume_discount_program(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
benefit_tiers=[
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 100,
|
||||||
|
"volume_discount_factor": 0.1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minimum_running_notional_taker_volume": 200,
|
||||||
|
"volume_discount_factor": 0.2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
window_length=7,
|
||||||
|
)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
for _ in range(3):
|
||||||
|
submit_order(vega, "Key 1", market, "SIDE_BUY", 1, 110)
|
||||||
|
forward_time(vega, True if _ < 3 - 1 else False)
|
||||||
|
|
||||||
|
return market
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_2")
|
||||||
|
def test_fees_page_discount_program_my_trading_fees(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(ADJUSTED_FEES)).to_have_text("8.04%-8.04%")
|
||||||
|
expect(page.get_by_test_id(TOTAL_FEE_BEFORE_DISCOUNT)).to_have_text(
|
||||||
|
"Total fee before discount10.05%-10.05%"
|
||||||
|
)
|
||||||
|
expect(page.get_by_test_id(INFRASTRUCTURE_FEES)).to_have_text("Infrastructure0.05%")
|
||||||
|
expect(page.get_by_test_id(MAKER_FEES)).to_have_text("Maker10%")
|
||||||
|
expect(page.get_by_test_id(LIQUIDITY_FEES)).to_have_text("Liquidity0%-0%")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_2")
|
||||||
|
def test_fees_page_discount_program_total_discount(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(TOTAL_DISCOUNT)).to_have_text("20%")
|
||||||
|
expect(page.get_by_test_id(VOLUME_DISCOUNT_ROW)).to_have_text("Volume discount20%")
|
||||||
|
expect(page.get_by_test_id(REFERRAL_DISCOUNT_ROW)).to_have_text(
|
||||||
|
"Referral discount0%"
|
||||||
|
)
|
||||||
|
page.get_by_test_id(TOTAL_DISCOUNT).hover()
|
||||||
|
expect(page.get_by_test_id(TOOLTIP_CONTENT).nth(0)).to_have_text(
|
||||||
|
"The total discount is calculated according to the following formula: 1 - (1 - dvolume) ⋇ (1 - dreferral)"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_2")
|
||||||
|
def test_fees_page_volume_discount_program_my_current_volume(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(PAST_EPOCHS_VOLUME)).to_have_text("206")
|
||||||
|
expect(page.get_by_test_id(REQUIRED_FOR_NEXT_TIER)).not_to_be_visible()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_2")
|
||||||
|
def test_fees_page_discount_program_discount(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
expect(page.get_by_test_id(TIER_VALUE_0)).to_have_text("1")
|
||||||
|
expect(page.get_by_test_id(TIER_VALUE_1)).to_have_text("2")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_VALUE_0)).to_have_text("10%")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_VALUE_1)).to_have_text("20%")
|
||||||
|
expect(page.get_by_test_id(MIN_VOLUME_VALUE_0)).to_have_text("100")
|
||||||
|
expect(page.get_by_test_id(MIN_VOLUME_VALUE_1)).to_have_text("200")
|
||||||
|
expect(page.get_by_test_id("my-volume-value-1")).to_have_text("206")
|
||||||
|
expect(page.get_by_test_id("your-volume-tier-1").nth(1)).to_be_visible()
|
||||||
|
expect(page.get_by_test_id("your-volume-tier-1").nth(1)).to_have_text("Your tier")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_2")
|
||||||
|
def test_fees_page_discount_program_fees_by_market(page: Page):
|
||||||
|
page.goto("/#/fees")
|
||||||
|
pinned = page.locator(PINNED_ROW_LOCATOR)
|
||||||
|
row = page.locator(ROW_LOCATOR)
|
||||||
|
expect(pinned.locator(COL_CODE)).to_have_text("BTC:DAI_2023Futr")
|
||||||
|
expect(row.locator(COL_FEE_AFTER_DISCOUNT)).to_have_text("8.04%")
|
||||||
|
expect(row.locator(COL_INFRA_FEE)).to_have_text("0.05%")
|
||||||
|
expect(row.locator(COL_MAKER_FEE)).to_have_text("10%")
|
||||||
|
expect(row.locator(COL_LIQUIDITY_FEE)).to_have_text("0%")
|
||||||
|
expect(row.locator(COL_TOTAL_FEE)).to_have_text("10.05%")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_2")
|
||||||
|
def test_deal_ticket_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_volume_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_volume_discount_program}")
|
||||||
|
page.get_by_test_id(ORDER_SIZE).fill("1")
|
||||||
|
page.get_by_test_id(ORDER_PRICE).fill("1")
|
||||||
|
expect(page.get_by_test_id(DISCOUNT_PILL)).to_have_text("-20%")
|
||||||
|
page.get_by_test_id(FEES_TEXT).hover()
|
||||||
|
tooltip = page.get_by_test_id(TOOLTIP_CONTENT).first
|
||||||
|
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_FACTOR)).to_have_text("0.05%")
|
||||||
|
expect(tooltip.get_by_test_id(INFRASTRUCTURE_FEE_VALUE)).to_have_text("0.0005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_FACTOR)).to_have_text("0%")
|
||||||
|
expect(tooltip.get_by_test_id(LIQUIDITY_FEE_VALUE)).to_have_text("0.00 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(MAKER_FEE_FACTOR)).to_have_text("10%")
|
||||||
|
expect(tooltip.get_by_test_id(MAKER_FEE_VALUE)).to_have_text("0.10 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_FACTOR)).to_have_text("10.05%")
|
||||||
|
expect(tooltip.get_by_test_id(SUBTOTAL_FEE_VALUE)).to_have_text("0.1005 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(DISCOUNT_FEE_FACTOR)).to_have_text("-20%")
|
||||||
|
expect(tooltip.get_by_test_id(DISCOUNT_FEE_VALUE)).to_have_text("-0.0201 tDAI")
|
||||||
|
expect(tooltip.get_by_test_id(TOTAL_FEE_VALUE)).to_have_text("0.0804 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_2")
|
||||||
|
def test_fills_taker_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_volume_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_volume_discount_program}")
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
expect(row.locator(COL_SIZE)).to_have_text("+1")
|
||||||
|
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_PRICE_1)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_AGGRESSOR)).to_have_text("Taker")
|
||||||
|
expect(row.locator(COL_FEE)).to_have_text(
|
||||||
|
"8.3214 tDAI",
|
||||||
|
)
|
||||||
|
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text("2.08035 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_2")
|
||||||
|
def test_fills_maker_discount_program(
|
||||||
|
vega: VegaServiceNull,
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_volume_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_volume_discount_program}")
|
||||||
|
change_keys(page, vega, MM_WALLET.name)
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
expect(row.locator(COL_SIZE)).to_have_text("-1")
|
||||||
|
expect(row.locator(COL_PRICE)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_PRICE_1)).to_have_text("103.50 tDAI")
|
||||||
|
expect(row.locator(COL_AGGRESSOR)).to_have_text("Maker")
|
||||||
|
expect(row.locator(COL_FEE)).to_have_text("-8.28 tDAI ")
|
||||||
|
expect(row.locator(COL_FEE_DISCOUNT)).to_have_text("2.07 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_2")
|
||||||
|
def test_fills_maker_fee_tooltip_discount_program(
|
||||||
|
vega, page: Page, setup_market_with_volume_discount_program
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_volume_discount_program}")
|
||||||
|
change_keys(page, vega, MM_WALLET.name)
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
# tbd - tooltip is not visible without this wait
|
||||||
|
page.wait_for_timeout(1000)
|
||||||
|
row.locator(COL_FEE).hover()
|
||||||
|
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
||||||
|
"If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-8.28 tDAITotal fees-8.28 tDAI"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_fees_volume_tier_2")
|
||||||
|
def test_fills_taker_fee_tooltip_discount_program(
|
||||||
|
page: Page,
|
||||||
|
setup_market_with_volume_discount_program,
|
||||||
|
):
|
||||||
|
page.goto(f"/#/markets/{setup_market_with_volume_discount_program}")
|
||||||
|
page.get_by_test_id(FILLS).click()
|
||||||
|
row = page.get_by_test_id(TAB_FILLS).locator(ROW_LOCATOR).first
|
||||||
|
# tbd - tooltip is not visible without this wait
|
||||||
|
page.wait_for_timeout(1000)
|
||||||
|
row.locator(COL_FEE).hover()
|
||||||
|
expect(page.get_by_test_id(FEE_BREAKDOWN_TOOLTIP)).to_have_text(
|
||||||
|
"If the market was activeFee revenue to be received by the maker, takers' fee discounts already applied.During continuous trading the maker pays no infrastructure and liquidity fees.Infrastructure fee0.00 tDAILiquidity fee0.00 tDAIMaker fee-8.28 tDAITotal fees-8.28 tDAI "
|
||||||
|
)
|
@ -14,7 +14,7 @@ logger = logging.getLogger()
|
|||||||
@pytest.fixture(scope="class")
|
@pytest.fixture(scope="class")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
@ -142,8 +142,7 @@ class TestGetStarted:
|
|||||||
def test_get_started_seen_already(self, simple_market, page: Page):
|
def test_get_started_seen_already(self, simple_market, page: Page):
|
||||||
page.goto(f"/#/markets/{simple_market}")
|
page.goto(f"/#/markets/{simple_market}")
|
||||||
get_started_locator = page.get_by_test_id("connect-vega-wallet")
|
get_started_locator = page.get_by_test_id("connect-vega-wallet")
|
||||||
page.wait_for_selector(
|
page.wait_for_selector('[data-testid="connect-vega-wallet"]', state="attached")
|
||||||
'[data-testid="connect-vega-wallet"]', state="attached")
|
|
||||||
expect(get_started_locator).to_be_enabled
|
expect(get_started_locator).to_be_enabled
|
||||||
expect(get_started_locator).to_be_visible
|
expect(get_started_locator).to_be_visible
|
||||||
# 0007-FUGS-015
|
# 0007-FUGS-015
|
||||||
@ -153,7 +152,9 @@ class TestGetStarted:
|
|||||||
expect(page.get_by_test_id("dialog-content").nth(1)).to_be_visible()
|
expect(page.get_by_test_id("dialog-content").nth(1)).to_be_visible()
|
||||||
|
|
||||||
@pytest.mark.skip("tbd-market-sim")
|
@pytest.mark.skip("tbd-market-sim")
|
||||||
def test_redirect_default_market(self, continuous_market, vega: VegaServiceNull, page: Page):
|
def test_redirect_default_market(
|
||||||
|
self, continuous_market, vega: VegaServiceNull, page: Page
|
||||||
|
):
|
||||||
page.goto("/")
|
page.goto("/")
|
||||||
# 0007-FUGS-012
|
# 0007-FUGS-012
|
||||||
expect(page).to_have_url(
|
expect(page).to_have_url(
|
||||||
|
@ -8,7 +8,7 @@ from actions.utils import next_epoch, truncate_middle, change_keys
|
|||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ from actions.utils import next_epoch
|
|||||||
@pytest.fixture(scope="class")
|
@pytest.fixture(scope="class")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ market_title_test_id = "accordion-title"
|
|||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ col_market_id = '[col-id="market"] [data-testid="stack-cell-primary"]'
|
|||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ COL_ID_FEE = ".ag-center-cols-container [col-id='fee'] .ag-cell-value"
|
|||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,11 +7,10 @@ from conftest import init_page, init_vega, cleanup_container
|
|||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
# we can reuse single page instance in all tests
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def page(vega, browser, request):
|
def page(vega, browser, request):
|
||||||
with init_page(vega, browser, request) as page:
|
with init_page(vega, browser, request) as page:
|
||||||
|
@ -10,7 +10,7 @@ from wallet_config import MM_WALLET, MM_WALLET2
|
|||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ class TestPerpetuals:
|
|||||||
@pytest.fixture(scope="class")
|
@pytest.fixture(scope="class")
|
||||||
def vega(self, request):
|
def vega(self, request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
@pytest.fixture(scope="class")
|
@pytest.fixture(scope="class")
|
||||||
|
@ -12,7 +12,7 @@ COL_ID_USED = ".ag-center-cols-container [col-id='used'] .ag-cell-value"
|
|||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ BUY_ORDERS = [[1, 106], [1, 107], [1, 108]]
|
|||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
62
apps/trading/e2e/tests/rewards/rewards_test_ids.py
Normal file
62
apps/trading/e2e/tests/rewards/rewards_test_ids.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
from actions.utils import create_and_faucet_wallet
|
||||||
|
from wallet_config import WalletConfig
|
||||||
|
# region Constants
|
||||||
|
ACTIVITY = "activity"
|
||||||
|
HOARDER = "hoarder"
|
||||||
|
COMBO = "combo"
|
||||||
|
|
||||||
|
REWARDS_URL = "/#/rewards"
|
||||||
|
|
||||||
|
# test IDs
|
||||||
|
COMBINED_MULTIPLIERS = "combined-multipliers"
|
||||||
|
TOTAL_REWARDS = "total-rewards"
|
||||||
|
PRICE_TAKING_COL_ID = '[col-id="priceTaking"]'
|
||||||
|
TOTAL_COL_ID = '[col-id="total"]'
|
||||||
|
ROW = "row"
|
||||||
|
STREAK_REWARD_MULTIPLIER_VALUE = "streak-reward-multiplier-value"
|
||||||
|
HOARDER_REWARD_MULTIPLIER_VALUE = "hoarder-reward-multiplier-value"
|
||||||
|
HOARDER_BONUS_TOTAL_HOARDED = "hoarder-bonus-total-hoarded"
|
||||||
|
EARNED_BY_ME_BUTTON = "earned-by-me-button"
|
||||||
|
TRANSFER_AMOUNT = "transfer-amount"
|
||||||
|
EPOCH_STREAK = "epoch-streak"
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# Keys
|
||||||
|
PARTY_A = "PARTY_A"
|
||||||
|
PARTY_B = "PARTY_B"
|
||||||
|
PARTY_C = "PARTY_C"
|
||||||
|
PARTY_D = "PARTY_D"
|
||||||
|
|
||||||
|
ACTIVITY_STREAKS = """
|
||||||
|
{
|
||||||
|
"tiers": [
|
||||||
|
{
|
||||||
|
"minimum_activity_streak": 2,
|
||||||
|
"reward_multiplier": "2.0",
|
||||||
|
"vesting_multiplier": "1.1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
VESTING = """
|
||||||
|
{
|
||||||
|
"tiers": [
|
||||||
|
{
|
||||||
|
"minimum_quantum_balance": "10000000",
|
||||||
|
"reward_multiplier": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
def keys(vega):
|
||||||
|
PARTY_A = WalletConfig("PARTY_A", "PARTY_A")
|
||||||
|
create_and_faucet_wallet(vega=vega, wallet=PARTY_A)
|
||||||
|
PARTY_B = WalletConfig("PARTY_B", "PARTY_B")
|
||||||
|
create_and_faucet_wallet(vega=vega, wallet=PARTY_B)
|
||||||
|
PARTY_C = WalletConfig("PARTY_C", "PARTY_C")
|
||||||
|
create_and_faucet_wallet(vega=vega, wallet=PARTY_C)
|
||||||
|
PARTY_D = WalletConfig("PARTY_D", "PARTY_D")
|
||||||
|
create_and_faucet_wallet(vega=vega, wallet=PARTY_D)
|
||||||
|
return PARTY_A, PARTY_B, PARTY_C, PARTY_D
|
121
apps/trading/e2e/tests/rewards/test_hoarder_tier_0.py
Normal file
121
apps/trading/e2e/tests/rewards/test_hoarder_tier_0.py
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
import pytest
|
||||||
|
import vega_sim.proto.vega as vega_protos
|
||||||
|
from rewards_test_ids import *
|
||||||
|
from playwright.sync_api import Page, expect
|
||||||
|
from conftest import init_vega, init_page, auth_setup, risk_accepted_setup, cleanup_container
|
||||||
|
from fixtures.market import setup_continuous_market
|
||||||
|
from actions.utils import next_epoch, change_keys
|
||||||
|
from wallet_config import MM_WALLET
|
||||||
|
from vega_sim.null_service import VegaServiceNull
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def vega(request):
|
||||||
|
with init_vega(request) as vega_instance:
|
||||||
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
|
yield vega_instance
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def page(vega, browser, request):
|
||||||
|
with init_page(vega, browser, request) as page:
|
||||||
|
risk_accepted_setup(page)
|
||||||
|
auth_setup(vega, page)
|
||||||
|
page.goto(REWARDS_URL)
|
||||||
|
change_keys(page, vega, PARTY_B)
|
||||||
|
yield page
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module", autouse=True)
|
||||||
|
def setup_market_with_reward_program(vega: VegaServiceNull):
|
||||||
|
tDAI_market = setup_continuous_market(vega)
|
||||||
|
PARTY_A, PARTY_B, PARTY_C, PARTY_D = keys(vega)
|
||||||
|
tDAI_asset_id = vega.find_asset_id(symbol="tDAI")
|
||||||
|
vega.mint(key_name=PARTY_B.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_C.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_A.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_D.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
vega.update_network_parameter(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
parameter="rewards.vesting.benefitTiers",
|
||||||
|
new_value=VESTING,
|
||||||
|
)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
tDAI_asset_id = vega.find_asset_id(symbol="tDAI")
|
||||||
|
vega.update_network_parameter(
|
||||||
|
MM_WALLET.name, parameter="reward.asset", new_value=tDAI_asset_id
|
||||||
|
)
|
||||||
|
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.recurring_transfer(
|
||||||
|
from_key_name=PARTY_A.name,
|
||||||
|
from_account_type=vega_protos.vega.ACCOUNT_TYPE_GENERAL,
|
||||||
|
to_account_type=vega_protos.vega.ACCOUNT_TYPE_REWARD_MAKER_PAID_FEES,
|
||||||
|
asset=tDAI_asset_id,
|
||||||
|
reference="reward",
|
||||||
|
asset_for_metric=tDAI_asset_id,
|
||||||
|
metric=vega_protos.vega.DISPATCH_METRIC_MAKER_FEES_PAID,
|
||||||
|
amount=100,
|
||||||
|
factor=1.0,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_A.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
|
vega.wait_for_total_catchup()
|
||||||
|
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
return tDAI_market, tDAI_asset_id
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_hoarder_tier_0")
|
||||||
|
def test_network_reward_pot(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
expect(page.get_by_test_id(TOTAL_REWARDS)).to_have_text("50.00 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_hoarder_tier_0")
|
||||||
|
def test_reward_multiplier(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
expect(page.get_by_test_id(COMBINED_MULTIPLIERS)).to_have_text("1x")
|
||||||
|
expect(page.get_by_test_id(STREAK_REWARD_MULTIPLIER_VALUE)).to_have_text("1x")
|
||||||
|
expect(page.get_by_test_id(HOARDER_REWARD_MULTIPLIER_VALUE)).to_have_text("1x")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_hoarder_tier_0")
|
||||||
|
def test_hoarder_bonus(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
expect(page.get_by_test_id(HOARDER_BONUS_TOTAL_HOARDED)).to_contain_text(
|
||||||
|
"5,000,000"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_hoarder_tier_0")
|
||||||
|
def test_reward_history(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
page.locator('[name="fromEpoch"]').fill("1")
|
||||||
|
expect((page.get_by_role(ROW).locator(PRICE_TAKING_COL_ID)).nth(1)).to_have_text(
|
||||||
|
"100.00100.00%"
|
||||||
|
)
|
||||||
|
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text("100.00")
|
||||||
|
page.get_by_test_id(EARNED_BY_ME_BUTTON).click()
|
||||||
|
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text("50.00")
|
173
apps/trading/e2e/tests/rewards/test_hoarder_tier_1.py
Normal file
173
apps/trading/e2e/tests/rewards/test_hoarder_tier_1.py
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
import pytest
|
||||||
|
from rewards_test_ids import *
|
||||||
|
import vega_sim.proto.vega as vega_protos
|
||||||
|
from playwright.sync_api import Page, expect
|
||||||
|
from conftest import init_vega, init_page, auth_setup, risk_accepted_setup, cleanup_container
|
||||||
|
from fixtures.market import setup_continuous_market
|
||||||
|
from actions.utils import next_epoch, change_keys
|
||||||
|
from wallet_config import MM_WALLET
|
||||||
|
from vega_sim.null_service import VegaServiceNull
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def vega(request):
|
||||||
|
with init_vega(request) as vega_instance:
|
||||||
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def page(vega, browser, request):
|
||||||
|
with init_page(vega, browser, request) as page:
|
||||||
|
risk_accepted_setup(page)
|
||||||
|
auth_setup(vega, page)
|
||||||
|
page.goto(REWARDS_URL)
|
||||||
|
change_keys(page, vega, PARTY_B)
|
||||||
|
yield page
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module", autouse=True)
|
||||||
|
def setup_market_with_reward_program(vega: VegaServiceNull):
|
||||||
|
tDAI_market = setup_continuous_market(vega)
|
||||||
|
PARTY_A, PARTY_B, PARTY_C, PARTY_D = keys(vega)
|
||||||
|
tDAI_asset_id = vega.find_asset_id(symbol="tDAI")
|
||||||
|
vega.mint(key_name=PARTY_B.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_C.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_A.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_D.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
vega.update_network_parameter(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
parameter="rewards.vesting.benefitTiers",
|
||||||
|
new_value=VESTING,
|
||||||
|
)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
tDAI_asset_id = vega.find_asset_id(symbol="tDAI")
|
||||||
|
vega.update_network_parameter(
|
||||||
|
MM_WALLET.name, parameter="reward.asset", new_value=tDAI_asset_id
|
||||||
|
)
|
||||||
|
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.recurring_transfer(
|
||||||
|
from_key_name=PARTY_A.name,
|
||||||
|
from_account_type=vega_protos.vega.ACCOUNT_TYPE_GENERAL,
|
||||||
|
to_account_type=vega_protos.vega.ACCOUNT_TYPE_REWARD_MAKER_PAID_FEES,
|
||||||
|
asset=tDAI_asset_id,
|
||||||
|
reference="reward",
|
||||||
|
asset_for_metric=tDAI_asset_id,
|
||||||
|
metric=vega_protos.vega.DISPATCH_METRIC_MAKER_FEES_PAID,
|
||||||
|
amount=100,
|
||||||
|
factor=1.0,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_A.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
|
vega.wait_for_total_catchup()
|
||||||
|
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_LIMIT",
|
||||||
|
time_in_force="TIME_IN_FORCE_GTC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
price=1,
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_D.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
|
vega.wait_for_total_catchup()
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_D.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
|
vega.wait_for_total_catchup()
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
return tDAI_market, tDAI_asset_id
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_hoarder_tier_1")
|
||||||
|
def test_network_reward_pot(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
expect(page.get_by_test_id(TOTAL_REWARDS)).to_have_text("166.66666 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_hoarder_tier_1")
|
||||||
|
def test_reward_multiplier(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
expect(page.get_by_test_id(COMBINED_MULTIPLIERS)).to_have_text("2x")
|
||||||
|
expect(page.get_by_test_id(STREAK_REWARD_MULTIPLIER_VALUE)).to_have_text("1x")
|
||||||
|
expect(page.get_by_test_id(HOARDER_REWARD_MULTIPLIER_VALUE)).to_have_text("2x")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_hoarder_tier_1")
|
||||||
|
def test_hoarder_bonus(page: Page):
|
||||||
|
expect(page.get_by_test_id(HOARDER_BONUS_TOTAL_HOARDED)).to_contain_text(
|
||||||
|
"16,666,666"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_hoarder_tier_1")
|
||||||
|
def test_reward_history(page: Page):
|
||||||
|
page.locator('[name="fromEpoch"]').fill("1")
|
||||||
|
expect((page.get_by_role(ROW).locator(PRICE_TAKING_COL_ID)).nth(1)).to_have_text(
|
||||||
|
"299.99999100.00%"
|
||||||
|
)
|
||||||
|
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text(
|
||||||
|
"299.99999"
|
||||||
|
)
|
||||||
|
page.get_by_test_id(EARNED_BY_ME_BUTTON).click()
|
||||||
|
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text(
|
||||||
|
"166.66666"
|
||||||
|
)
|
@ -1,475 +0,0 @@
|
|||||||
import pytest
|
|
||||||
|
|
||||||
import vega_sim.proto.vega as vega_protos
|
|
||||||
from playwright.sync_api import Page, expect
|
|
||||||
from conftest import init_vega, init_page, auth_setup, cleanup_container
|
|
||||||
from fixtures.market import setup_continuous_market, market_exists
|
|
||||||
from actions.utils import next_epoch, change_keys
|
|
||||||
from wallet_config import MM_WALLET, PARTY_A, PARTY_B, PARTY_C, PARTY_D
|
|
||||||
from vega_sim.null_service import VegaServiceNull
|
|
||||||
|
|
||||||
# region Constants
|
|
||||||
ACTIVITY = "activity"
|
|
||||||
HOARDER = "hoarder"
|
|
||||||
COMBO = "combo"
|
|
||||||
|
|
||||||
REWARDS_URL = "/#/rewards"
|
|
||||||
|
|
||||||
# test IDs
|
|
||||||
COMBINED_MULTIPLIERS = "combined-multipliers"
|
|
||||||
TOTAL_REWARDS = "total-rewards"
|
|
||||||
PRICE_TAKING_COL_ID = '[col-id="priceTaking"]'
|
|
||||||
TOTAL_COL_ID = '[col-id="total"]'
|
|
||||||
ROW = "row"
|
|
||||||
STREAK_REWARD_MULTIPLIER_VALUE = "streak-reward-multiplier-value"
|
|
||||||
HOARDER_REWARD_MULTIPLIER_VALUE = "hoarder-reward-multiplier-value"
|
|
||||||
HOARDER_BONUS_TOTAL_HOARDED = "hoarder-bonus-total-hoarded"
|
|
||||||
EARNED_BY_ME_BUTTON = "earned-by-me-button"
|
|
||||||
TRANSFER_AMOUNT = "transfer-amount"
|
|
||||||
EPOCH_STREAK = "epoch-streak"
|
|
||||||
|
|
||||||
# endregion
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def market_ids():
|
|
||||||
return {
|
|
||||||
"vega_activity_tier_0": "default_id",
|
|
||||||
"vega_hoarder_tier_0": "default_id",
|
|
||||||
"vega_combo_tier_0": "default_id",
|
|
||||||
"vega_activity_tier_1": "default_id",
|
|
||||||
"vega_hoarder_tier_1": "default_id",
|
|
||||||
"vega_combo_tier_1": "default_id",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_activity_tier_0(request):
|
|
||||||
with init_vega(request) as vega_activity_tier_0:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_activity_tier_0)) # Register the cleanup function
|
|
||||||
yield vega_activity_tier_0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_hoarder_tier_0(request):
|
|
||||||
with init_vega(request) as vega_hoarder_tier_0:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_hoarder_tier_0)) # Register the cleanup function
|
|
||||||
yield vega_hoarder_tier_0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_combo_tier_0(request):
|
|
||||||
with init_vega(request) as vega_combo_tier_0:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_combo_tier_0)) # Register the cleanup function
|
|
||||||
yield vega_combo_tier_0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_activity_tier_1(request):
|
|
||||||
with init_vega(request) as vega_activity_tier_1:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_activity_tier_1)) # Register the cleanup function
|
|
||||||
yield vega_activity_tier_1
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_hoarder_tier_1(request):
|
|
||||||
with init_vega(request) as vega_hoarder_tier_1:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_hoarder_tier_1)) # Register the cleanup function
|
|
||||||
yield vega_hoarder_tier_1
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def vega_combo_tier_1(request):
|
|
||||||
with init_vega(request) as vega_combo_tier_1:
|
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_combo_tier_1)) # Register the cleanup function
|
|
||||||
yield vega_combo_tier_1
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def auth(vega_instance, page):
|
|
||||||
return auth_setup(vega_instance, page)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def page(vega_instance, browser, request):
|
|
||||||
with init_page(vega_instance, browser, request) as page_instance:
|
|
||||||
yield page_instance
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def vega_instance(
|
|
||||||
reward_program,
|
|
||||||
vega_activity_tier_0,
|
|
||||||
vega_hoarder_tier_0,
|
|
||||||
vega_combo_tier_0,
|
|
||||||
vega_activity_tier_1,
|
|
||||||
vega_hoarder_tier_1,
|
|
||||||
vega_combo_tier_1,
|
|
||||||
tier,
|
|
||||||
):
|
|
||||||
if reward_program == "activity":
|
|
||||||
return vega_activity_tier_0 if tier == 1 else vega_activity_tier_1
|
|
||||||
elif reward_program == "hoarder":
|
|
||||||
return vega_hoarder_tier_0 if tier == 1 else vega_hoarder_tier_1
|
|
||||||
elif reward_program == "combo":
|
|
||||||
return vega_combo_tier_0 if tier == 1 else vega_combo_tier_1
|
|
||||||
|
|
||||||
|
|
||||||
def setup_market_with_reward_program(vega: VegaServiceNull, reward_programs, tier):
|
|
||||||
print(f"Started setup_market_with_{reward_programs}_{tier}")
|
|
||||||
tDAI_market = setup_continuous_market(vega)
|
|
||||||
tDAI_asset_id = vega.find_asset_id(symbol="tDAI")
|
|
||||||
vega.mint(key_name=PARTY_B.name, asset=tDAI_asset_id, amount=100000)
|
|
||||||
vega.mint(key_name=PARTY_C.name, asset=tDAI_asset_id, amount=100000)
|
|
||||||
vega.mint(key_name=PARTY_A.name, asset=tDAI_asset_id, amount=100000)
|
|
||||||
vega.mint(key_name=PARTY_D.name, asset=tDAI_asset_id, amount=100000)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
if ACTIVITY in reward_programs:
|
|
||||||
vega.update_network_parameter(
|
|
||||||
proposal_key=MM_WALLET.name,
|
|
||||||
parameter="rewards.activityStreak.benefitTiers",
|
|
||||||
new_value=ACTIVITY_STREAKS,
|
|
||||||
)
|
|
||||||
print("update_network_parameter activity done")
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
|
|
||||||
if HOARDER in reward_programs:
|
|
||||||
vega.update_network_parameter(
|
|
||||||
proposal_key=MM_WALLET.name,
|
|
||||||
parameter="rewards.vesting.benefitTiers",
|
|
||||||
new_value=VESTING,
|
|
||||||
)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
|
|
||||||
tDAI_asset_id = vega.find_asset_id(symbol="tDAI")
|
|
||||||
vega.update_network_parameter(
|
|
||||||
MM_WALLET.name, parameter="reward.asset", new_value=tDAI_asset_id
|
|
||||||
)
|
|
||||||
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
vega.recurring_transfer(
|
|
||||||
from_key_name=PARTY_A.name,
|
|
||||||
from_account_type=vega_protos.vega.ACCOUNT_TYPE_GENERAL,
|
|
||||||
to_account_type=vega_protos.vega.ACCOUNT_TYPE_REWARD_MAKER_PAID_FEES,
|
|
||||||
asset=tDAI_asset_id,
|
|
||||||
reference="reward",
|
|
||||||
asset_for_metric=tDAI_asset_id,
|
|
||||||
metric=vega_protos.vega.DISPATCH_METRIC_MAKER_FEES_PAID,
|
|
||||||
# lock_period= 5,
|
|
||||||
# TODO test lock period
|
|
||||||
amount=100,
|
|
||||||
factor=1.0,
|
|
||||||
)
|
|
||||||
vega.submit_order(
|
|
||||||
trading_key=PARTY_B.name,
|
|
||||||
market_id=tDAI_market,
|
|
||||||
order_type="TYPE_MARKET",
|
|
||||||
time_in_force="TIME_IN_FORCE_IOC",
|
|
||||||
side="SIDE_BUY",
|
|
||||||
volume=1,
|
|
||||||
)
|
|
||||||
vega.submit_order(
|
|
||||||
trading_key=PARTY_A.name,
|
|
||||||
market_id=tDAI_market,
|
|
||||||
order_type="TYPE_MARKET",
|
|
||||||
time_in_force="TIME_IN_FORCE_IOC",
|
|
||||||
side="SIDE_BUY",
|
|
||||||
volume=1,
|
|
||||||
)
|
|
||||||
|
|
||||||
vega.wait_for_total_catchup()
|
|
||||||
if tier == 1:
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
vega.submit_order(
|
|
||||||
trading_key=PARTY_B.name,
|
|
||||||
market_id=tDAI_market,
|
|
||||||
order_type="TYPE_LIMIT",
|
|
||||||
time_in_force="TIME_IN_FORCE_GTC",
|
|
||||||
side="SIDE_BUY",
|
|
||||||
price=1,
|
|
||||||
volume=1,
|
|
||||||
)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
vega.submit_order(
|
|
||||||
trading_key=PARTY_B.name,
|
|
||||||
market_id=tDAI_market,
|
|
||||||
order_type="TYPE_MARKET",
|
|
||||||
time_in_force="TIME_IN_FORCE_IOC",
|
|
||||||
side="SIDE_BUY",
|
|
||||||
volume=1,
|
|
||||||
)
|
|
||||||
vega.submit_order(
|
|
||||||
trading_key=PARTY_D.name,
|
|
||||||
market_id=tDAI_market,
|
|
||||||
order_type="TYPE_MARKET",
|
|
||||||
time_in_force="TIME_IN_FORCE_IOC",
|
|
||||||
side="SIDE_BUY",
|
|
||||||
volume=1,
|
|
||||||
)
|
|
||||||
vega.wait_for_total_catchup()
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
if HOARDER in reward_programs:
|
|
||||||
vega.submit_order(
|
|
||||||
trading_key=PARTY_B.name,
|
|
||||||
market_id=tDAI_market,
|
|
||||||
order_type="TYPE_MARKET",
|
|
||||||
time_in_force="TIME_IN_FORCE_IOC",
|
|
||||||
side="SIDE_BUY",
|
|
||||||
volume=1,
|
|
||||||
)
|
|
||||||
vega.submit_order(
|
|
||||||
trading_key=PARTY_D.name,
|
|
||||||
market_id=tDAI_market,
|
|
||||||
order_type="TYPE_MARKET",
|
|
||||||
time_in_force="TIME_IN_FORCE_IOC",
|
|
||||||
side="SIDE_BUY",
|
|
||||||
volume=1,
|
|
||||||
)
|
|
||||||
vega.wait_for_total_catchup()
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
next_epoch(vega=vega)
|
|
||||||
return tDAI_market, tDAI_asset_id
|
|
||||||
|
|
||||||
|
|
||||||
def set_market_reward_program(vega, reward_program, market_ids, tier):
|
|
||||||
market_id_key = f"vega_{reward_program}_tier_{tier}"
|
|
||||||
if reward_program == COMBO:
|
|
||||||
market_id_key = COMBO
|
|
||||||
market_id = market_ids.get(market_id_key, "default_id")
|
|
||||||
|
|
||||||
print(f"Checking if market exists: {market_id}")
|
|
||||||
if not market_exists(vega, market_id):
|
|
||||||
print(
|
|
||||||
f"Market doesn't exist for {reward_program} {tier}. Setting up new market."
|
|
||||||
)
|
|
||||||
|
|
||||||
reward_programs = [reward_program]
|
|
||||||
if reward_program == COMBO:
|
|
||||||
reward_programs = [ACTIVITY, HOARDER]
|
|
||||||
|
|
||||||
market_id, _ = setup_market_with_reward_program(vega, reward_programs, tier)
|
|
||||||
market_ids[market_id_key] = market_id
|
|
||||||
|
|
||||||
return market_id, market_ids
|
|
||||||
|
|
||||||
|
|
||||||
ACTIVITY_STREAKS = """
|
|
||||||
{
|
|
||||||
"tiers": [
|
|
||||||
{
|
|
||||||
"minimum_activity_streak": 2,
|
|
||||||
"reward_multiplier": "2.0",
|
|
||||||
"vesting_multiplier": "1.1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
VESTING = """
|
|
||||||
{
|
|
||||||
"tiers": [
|
|
||||||
{
|
|
||||||
"minimum_quantum_balance": "10000000",
|
|
||||||
"reward_multiplier": "2"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"reward_program, tier, total_rewards",
|
|
||||||
[
|
|
||||||
(ACTIVITY, 0, "50.00 tDAI"),
|
|
||||||
(HOARDER, 0, "50.00 tDAI"),
|
|
||||||
(COMBO, 0, "50.00 tDAI"),
|
|
||||||
(ACTIVITY, 1, "116.66666 tDAI"),
|
|
||||||
(HOARDER, 1, "166.66666 tDAI "),
|
|
||||||
(COMBO, 1, "183.33333 tDAI"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("auth", "risk_accepted", "market_ids")
|
|
||||||
def test_network_reward_pot(
|
|
||||||
reward_program,
|
|
||||||
vega_instance: VegaServiceNull,
|
|
||||||
page: Page,
|
|
||||||
total_rewards,
|
|
||||||
tier,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
print("reward program: " + reward_program, " tier:", tier)
|
|
||||||
market_id, market_ids = set_market_reward_program(
|
|
||||||
vega_instance, reward_program, market_ids, tier
|
|
||||||
)
|
|
||||||
page.goto(REWARDS_URL)
|
|
||||||
|
|
||||||
change_keys(page, vega_instance, PARTY_B.name)
|
|
||||||
expect(page.get_by_test_id(TOTAL_REWARDS)).to_have_text(total_rewards)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"reward_program, tier, reward_multiplier, streak_multiplier, hoarder_multiplier",
|
|
||||||
[
|
|
||||||
(ACTIVITY, 0, "1x", "1x", "1x"),
|
|
||||||
(HOARDER, 0, "1x", "1x", "1x"),
|
|
||||||
(COMBO, 0, "1x", "1x", "1x"),
|
|
||||||
(ACTIVITY, 1, "2x", "2x", "1x"),
|
|
||||||
(HOARDER, 1, "2x", "1x", "2x"),
|
|
||||||
(COMBO, 1, "4x", "2x", "2x"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("auth", "risk_accepted", "market_ids")
|
|
||||||
def test_reward_multiplier(
|
|
||||||
reward_program,
|
|
||||||
vega_instance: VegaServiceNull,
|
|
||||||
page: Page,
|
|
||||||
reward_multiplier,
|
|
||||||
streak_multiplier,
|
|
||||||
hoarder_multiplier,
|
|
||||||
tier,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
print("reward program: " + reward_program, " tier:", tier)
|
|
||||||
market_id, market_ids = set_market_reward_program(
|
|
||||||
vega_instance, reward_program, market_ids, tier
|
|
||||||
)
|
|
||||||
page.goto(REWARDS_URL)
|
|
||||||
change_keys(page, vega_instance, PARTY_B.name)
|
|
||||||
expect(page.get_by_test_id(COMBINED_MULTIPLIERS)).to_have_text(reward_multiplier)
|
|
||||||
expect(page.get_by_test_id(STREAK_REWARD_MULTIPLIER_VALUE)).to_have_text(
|
|
||||||
streak_multiplier
|
|
||||||
)
|
|
||||||
expect(page.get_by_test_id(HOARDER_REWARD_MULTIPLIER_VALUE)).to_have_text(
|
|
||||||
hoarder_multiplier
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"reward_program, tier, epoch_streak",
|
|
||||||
[
|
|
||||||
(ACTIVITY, 0, "1"),
|
|
||||||
(ACTIVITY, 1, "7"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("auth", "risk_accepted", "market_ids")
|
|
||||||
def test_activity_streak(
|
|
||||||
reward_program,
|
|
||||||
vega_instance: VegaServiceNull,
|
|
||||||
page: Page,
|
|
||||||
epoch_streak,
|
|
||||||
tier,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
print("reward program: " + reward_program, " tier:", tier)
|
|
||||||
market_id, market_ids = set_market_reward_program(
|
|
||||||
vega_instance, reward_program, market_ids, tier
|
|
||||||
)
|
|
||||||
page.goto(REWARDS_URL)
|
|
||||||
change_keys(page, vega_instance, PARTY_B.name)
|
|
||||||
if tier == 1:
|
|
||||||
expect(page.get_by_test_id(EPOCH_STREAK)).to_have_text(
|
|
||||||
"Active trader: " + epoch_streak + " epochs so far (Tier 1 as of last epoch)"
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
expect(page.get_by_test_id(EPOCH_STREAK)).to_have_text(
|
|
||||||
"Active trader: " + epoch_streak + " epochs so far "
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"reward_program, tier, rewards_hoarded",
|
|
||||||
[
|
|
||||||
(HOARDER, 0, "5,000,000"),
|
|
||||||
(HOARDER, 1, "16,666,666"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("auth", "risk_accepted", "market_ids")
|
|
||||||
def test_hoarder_bonus(
|
|
||||||
reward_program,
|
|
||||||
vega_instance: VegaServiceNull,
|
|
||||||
page: Page,
|
|
||||||
rewards_hoarded,
|
|
||||||
tier,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
print("reward program: " + reward_program, " tier:", tier)
|
|
||||||
market_id, market_ids = set_market_reward_program(
|
|
||||||
vega_instance, reward_program, market_ids, tier
|
|
||||||
)
|
|
||||||
page.goto(REWARDS_URL)
|
|
||||||
change_keys(page, vega_instance, PARTY_B.name)
|
|
||||||
expect(page.get_by_test_id(HOARDER_BONUS_TOTAL_HOARDED)).to_contain_text(
|
|
||||||
rewards_hoarded
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"reward_program, tier, price_taking, total, earned_by_me",
|
|
||||||
[
|
|
||||||
(ACTIVITY, 0, "100.00100.00%", "100.00", "50.00"),
|
|
||||||
(HOARDER, 0, "100.00100.00%", "100.00", "50.00"),
|
|
||||||
(COMBO, 0, "100.00100.00%", "100.00", "50.00"),
|
|
||||||
(ACTIVITY, 1, "300.00100.00%", "300.00", "116.66666"),
|
|
||||||
(HOARDER, 1, "299.99999100.00%", "299.99999", "166.66666"),
|
|
||||||
(COMBO, 1, "299.99999100.00%", "299.99999", "183.33333"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("auth", "risk_accepted", "market_ids")
|
|
||||||
def test_reward_history(
|
|
||||||
reward_program,
|
|
||||||
vega_instance: VegaServiceNull,
|
|
||||||
page: Page,
|
|
||||||
price_taking,
|
|
||||||
total,
|
|
||||||
earned_by_me,
|
|
||||||
tier,
|
|
||||||
market_ids,
|
|
||||||
):
|
|
||||||
print("reward program: " + reward_program, " tier:", tier)
|
|
||||||
market_id, market_ids = set_market_reward_program(
|
|
||||||
vega_instance, reward_program, market_ids, tier
|
|
||||||
)
|
|
||||||
page.goto(REWARDS_URL)
|
|
||||||
change_keys(page, vega_instance, PARTY_B.name)
|
|
||||||
page.locator('[name="fromEpoch"]').fill("1")
|
|
||||||
expect((page.get_by_role(ROW).locator(PRICE_TAKING_COL_ID)).nth(1)).to_have_text(
|
|
||||||
price_taking
|
|
||||||
)
|
|
||||||
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text(total)
|
|
||||||
page.get_by_test_id(EARNED_BY_ME_BUTTON).click()
|
|
||||||
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text(
|
|
||||||
earned_by_me
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"reward_program, tier",
|
|
||||||
[
|
|
||||||
(ACTIVITY, 1),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.usefixtures("auth", "risk_accepted", "market_ids")
|
|
||||||
def test_redeem(
|
|
||||||
reward_program, vega_instance: VegaServiceNull, page: Page, tier, market_ids
|
|
||||||
):
|
|
||||||
print("reward program: " + reward_program, " tier:", tier)
|
|
||||||
market_id, market_ids = set_market_reward_program(
|
|
||||||
vega_instance, reward_program, market_ids, tier
|
|
||||||
)
|
|
||||||
page.goto(REWARDS_URL)
|
|
||||||
change_keys(page, vega_instance, PARTY_B.name)
|
|
||||||
page.get_by_test_id("redeem-rewards-button").click()
|
|
||||||
available_to_withdraw = page.get_by_test_id(
|
|
||||||
"available-to-withdraw-value"
|
|
||||||
).text_content()
|
|
||||||
option_value = page.locator(
|
|
||||||
'[data-testid="transfer-form"] [name="fromAccount"] option[value^="ACCOUNT_TYPE_VESTED_REWARDS"]'
|
|
||||||
).first.get_attribute("value")
|
|
||||||
|
|
||||||
page.select_option(
|
|
||||||
'[data-testid="transfer-form"] [name="fromAccount"]', option_value
|
|
||||||
)
|
|
||||||
|
|
||||||
page.get_by_test_id("use-max-button").first.click()
|
|
||||||
expect(page.get_by_test_id(TRANSFER_AMOUNT)).to_have_text(available_to_withdraw)
|
|
@ -1,49 +1,27 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
from rewards_test_ids import *
|
||||||
import vega_sim.proto.vega as vega_protos
|
import vega_sim.proto.vega as vega_protos
|
||||||
from playwright.sync_api import Page, expect
|
from playwright.sync_api import Page, expect
|
||||||
from conftest import init_vega, init_page, auth_setup, risk_accepted_setup, cleanup_container
|
from conftest import (
|
||||||
|
init_vega,
|
||||||
|
init_page,
|
||||||
|
auth_setup,
|
||||||
|
risk_accepted_setup,
|
||||||
|
cleanup_container,
|
||||||
|
)
|
||||||
from fixtures.market import setup_continuous_market
|
from fixtures.market import setup_continuous_market
|
||||||
from actions.utils import next_epoch, change_keys, create_and_faucet_wallet
|
from actions.utils import next_epoch, change_keys
|
||||||
from wallet_config import MM_WALLET, WalletConfig
|
from wallet_config import MM_WALLET
|
||||||
from vega_sim.null_service import VegaServiceNull
|
from vega_sim.null_service import VegaServiceNull
|
||||||
|
|
||||||
# region Constants
|
|
||||||
ACTIVITY = "activity"
|
|
||||||
HOARDER = "hoarder"
|
|
||||||
COMBO = "combo"
|
|
||||||
|
|
||||||
REWARDS_URL = "/#/rewards"
|
|
||||||
|
|
||||||
# test IDs
|
|
||||||
COMBINED_MULTIPLIERS = "combined-multipliers"
|
|
||||||
TOTAL_REWARDS = "total-rewards"
|
|
||||||
PRICE_TAKING_COL_ID = '[col-id="priceTaking"]'
|
|
||||||
TOTAL_COL_ID = '[col-id="total"]'
|
|
||||||
ROW = "row"
|
|
||||||
STREAK_REWARD_MULTIPLIER_VALUE = "streak-reward-multiplier-value"
|
|
||||||
HOARDER_REWARD_MULTIPLIER_VALUE = "hoarder-reward-multiplier-value"
|
|
||||||
HOARDER_BONUS_TOTAL_HOARDED = "hoarder-bonus-total-hoarded"
|
|
||||||
EARNED_BY_ME_BUTTON = "earned-by-me-button"
|
|
||||||
TRANSFER_AMOUNT = "transfer-amount"
|
|
||||||
EPOCH_STREAK = "epoch-streak"
|
|
||||||
|
|
||||||
# endregion
|
|
||||||
|
|
||||||
# Keys
|
|
||||||
PARTY_A = "PARTY_A"
|
|
||||||
PARTY_B = "PARTY_B"
|
|
||||||
PARTY_C = "PARTY_C"
|
|
||||||
PARTY_D = "PARTY_D"
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def page(vega, browser, request):
|
def page(vega, browser, request):
|
||||||
with init_page(vega, browser, request) as page:
|
with init_page(vega, browser, request) as page:
|
||||||
@ -106,55 +84,31 @@ def setup_market_with_reward_program(vega: VegaServiceNull):
|
|||||||
side="SIDE_BUY",
|
side="SIDE_BUY",
|
||||||
volume=1,
|
volume=1,
|
||||||
)
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
vega.wait_for_total_catchup()
|
vega.wait_for_total_catchup()
|
||||||
|
|
||||||
next_epoch(vega=vega)
|
next_epoch(vega=vega)
|
||||||
return tDAI_market, tDAI_asset_id
|
return tDAI_market, tDAI_asset_id
|
||||||
|
|
||||||
|
|
||||||
ACTIVITY_STREAKS = """
|
|
||||||
{
|
|
||||||
"tiers": [
|
|
||||||
{
|
|
||||||
"minimum_activity_streak": 2,
|
|
||||||
"reward_multiplier": "2.0",
|
|
||||||
"vesting_multiplier": "1.1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
def keys(vega):
|
|
||||||
PARTY_A = WalletConfig("PARTY_A", "PARTY_A")
|
|
||||||
create_and_faucet_wallet(vega=vega, wallet=PARTY_A)
|
|
||||||
PARTY_B = WalletConfig("PARTY_B", "PARTY_B")
|
|
||||||
create_and_faucet_wallet(vega=vega, wallet=PARTY_B)
|
|
||||||
PARTY_C = WalletConfig("PARTY_C", "PARTY_C")
|
|
||||||
create_and_faucet_wallet(vega=vega, wallet=PARTY_C)
|
|
||||||
PARTY_D = WalletConfig("PARTY_D", "PARTY_D")
|
|
||||||
create_and_faucet_wallet(vega=vega, wallet=PARTY_D)
|
|
||||||
return PARTY_A, PARTY_B, PARTY_C, PARTY_D
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.xdist_group(name="test_rewards_activity_tier_0")
|
@pytest.mark.xdist_group(name="test_rewards_activity_tier_0")
|
||||||
def test_network_reward_pot(
|
def test_network_reward_pot(
|
||||||
page: Page,
|
page: Page,
|
||||||
):
|
):
|
||||||
expect(page.get_by_test_id(TOTAL_REWARDS)).to_have_text("50.00 tDAI")
|
expect(page.get_by_test_id(TOTAL_REWARDS)).to_have_text("50.00 tDAI")
|
||||||
|
page.pause()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.xdist_group(name="test_rewards_activity_tier_0")
|
@pytest.mark.xdist_group(name="test_rewards_activity_tier_0")
|
||||||
def test_reward_multiplier(
|
def test_reward_multiplier(
|
||||||
page: Page,
|
page: Page,
|
||||||
):
|
):
|
||||||
|
page.pause()
|
||||||
expect(page.get_by_test_id(COMBINED_MULTIPLIERS)).to_have_text("1x")
|
expect(page.get_by_test_id(COMBINED_MULTIPLIERS)).to_have_text("1x")
|
||||||
expect(page.get_by_test_id(STREAK_REWARD_MULTIPLIER_VALUE)).to_have_text("1x")
|
expect(page.get_by_test_id(STREAK_REWARD_MULTIPLIER_VALUE)).to_have_text("1x")
|
||||||
expect(page.get_by_test_id(HOARDER_REWARD_MULTIPLIER_VALUE)).to_have_text("1x")
|
expect(page.get_by_test_id(HOARDER_REWARD_MULTIPLIER_VALUE)).to_have_text("1x")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.xdist_group(name="test_rewards_activity_tier_0")
|
""" @pytest.mark.xdist_group(name="test_rewards_activity_tier_0")
|
||||||
def test_activity_streak(
|
def test_activity_streak(
|
||||||
page: Page,
|
page: Page,
|
||||||
):
|
):
|
||||||
@ -174,3 +128,4 @@ def test_reward_history(
|
|||||||
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text("100.00")
|
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text("100.00")
|
||||||
page.get_by_test_id(EARNED_BY_ME_BUTTON).click()
|
page.get_by_test_id(EARNED_BY_ME_BUTTON).click()
|
||||||
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text("50.00")
|
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text("50.00")
|
||||||
|
"""
|
187
apps/trading/e2e/tests/rewards/test_rewards_activity_tier_1.py
Normal file
187
apps/trading/e2e/tests/rewards/test_rewards_activity_tier_1.py
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
import pytest
|
||||||
|
from rewards_test_ids import *
|
||||||
|
import vega_sim.proto.vega as vega_protos
|
||||||
|
from playwright.sync_api import Page, expect
|
||||||
|
from conftest import init_vega, init_page, auth_setup, risk_accepted_setup, cleanup_container
|
||||||
|
from fixtures.market import setup_continuous_market
|
||||||
|
from actions.utils import next_epoch, change_keys
|
||||||
|
from wallet_config import MM_WALLET
|
||||||
|
from vega_sim.null_service import VegaServiceNull
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def vega(request):
|
||||||
|
with init_vega(request) as vega_instance:
|
||||||
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def page(vega, browser, request):
|
||||||
|
with init_page(vega, browser, request) as page:
|
||||||
|
risk_accepted_setup(page)
|
||||||
|
auth_setup(vega, page)
|
||||||
|
page.goto(REWARDS_URL)
|
||||||
|
change_keys(page, vega, PARTY_B)
|
||||||
|
yield page
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module", autouse=True)
|
||||||
|
def setup_market_with_reward_program(vega: VegaServiceNull):
|
||||||
|
tDAI_market = setup_continuous_market(vega)
|
||||||
|
PARTY_A, PARTY_B, PARTY_C, PARTY_D = keys(vega)
|
||||||
|
tDAI_asset_id = vega.find_asset_id(symbol="tDAI")
|
||||||
|
vega.mint(key_name=PARTY_B.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_C.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_A.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_D.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.update_network_parameter(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
parameter="rewards.activityStreak.benefitTiers",
|
||||||
|
new_value=ACTIVITY_STREAKS,
|
||||||
|
)
|
||||||
|
print("update_network_parameter activity done")
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
tDAI_asset_id = vega.find_asset_id(symbol="tDAI")
|
||||||
|
vega.update_network_parameter(
|
||||||
|
MM_WALLET.name, parameter="reward.asset", new_value=tDAI_asset_id
|
||||||
|
)
|
||||||
|
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.recurring_transfer(
|
||||||
|
from_key_name=PARTY_A.name,
|
||||||
|
from_account_type=vega_protos.vega.ACCOUNT_TYPE_GENERAL,
|
||||||
|
to_account_type=vega_protos.vega.ACCOUNT_TYPE_REWARD_MAKER_PAID_FEES,
|
||||||
|
asset=tDAI_asset_id,
|
||||||
|
reference="reward",
|
||||||
|
asset_for_metric=tDAI_asset_id,
|
||||||
|
metric=vega_protos.vega.DISPATCH_METRIC_MAKER_FEES_PAID,
|
||||||
|
# lock_period= 5,
|
||||||
|
# TODO test lock period
|
||||||
|
amount=100,
|
||||||
|
factor=1.0,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_A.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
|
vega.wait_for_total_catchup()
|
||||||
|
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_LIMIT",
|
||||||
|
time_in_force="TIME_IN_FORCE_GTC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
price=1,
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_D.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
|
vega.wait_for_total_catchup()
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_D.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
|
vega.wait_for_total_catchup()
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
return tDAI_market, tDAI_asset_id
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_activity_tier_1")
|
||||||
|
def test_network_reward_pot(page: Page):
|
||||||
|
|
||||||
|
expect(page.get_by_test_id(TOTAL_REWARDS)).to_have_text("116.66666 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_activity_tier_1")
|
||||||
|
def test_reward_multiplier(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
expect(page.get_by_test_id(COMBINED_MULTIPLIERS)).to_have_text("2x")
|
||||||
|
expect(page.get_by_test_id(STREAK_REWARD_MULTIPLIER_VALUE)).to_have_text("2x")
|
||||||
|
expect(page.get_by_test_id(HOARDER_REWARD_MULTIPLIER_VALUE)).to_have_text("1x")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_activity_tier_1")
|
||||||
|
def test_activity_streak(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
expect(page.get_by_test_id(EPOCH_STREAK)).to_have_text(
|
||||||
|
"Active trader: 7 epochs so far (Tier 1 as of last epoch)"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_activity_tier_1")
|
||||||
|
def test_reward_history(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
page.locator('[name="fromEpoch"]').fill("1")
|
||||||
|
expect((page.get_by_role(ROW).locator(PRICE_TAKING_COL_ID)).nth(1)).to_have_text(
|
||||||
|
"300.00100.00%"
|
||||||
|
)
|
||||||
|
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text("300.00")
|
||||||
|
page.get_by_test_id(EARNED_BY_ME_BUTTON).click()
|
||||||
|
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text(
|
||||||
|
"116.66666"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_activity_tier_1")
|
||||||
|
def test_redeem(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
page.get_by_test_id("redeem-rewards-button").click()
|
||||||
|
available_to_withdraw = page.get_by_test_id(
|
||||||
|
"available-to-withdraw-value"
|
||||||
|
).text_content()
|
||||||
|
option_value = page.locator(
|
||||||
|
'[data-testid="transfer-form"] [name="fromAccount"] option[value^="ACCOUNT_TYPE_VESTED_REWARDS"]'
|
||||||
|
).first.get_attribute("value")
|
||||||
|
|
||||||
|
page.select_option(
|
||||||
|
'[data-testid="transfer-form"] [name="fromAccount"]', option_value
|
||||||
|
)
|
||||||
|
|
||||||
|
page.get_by_test_id("use-max-button").first.click()
|
||||||
|
expect(page.get_by_test_id(TRANSFER_AMOUNT)).to_have_text(available_to_withdraw)
|
174
apps/trading/e2e/tests/rewards/test_rewards_combo_tier_1.py
Normal file
174
apps/trading/e2e/tests/rewards/test_rewards_combo_tier_1.py
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
import pytest
|
||||||
|
from rewards_test_ids import *
|
||||||
|
import vega_sim.proto.vega as vega_protos
|
||||||
|
from playwright.sync_api import Page, expect
|
||||||
|
from conftest import init_vega, init_page, auth_setup, risk_accepted_setup, cleanup_container
|
||||||
|
from fixtures.market import setup_continuous_market
|
||||||
|
from actions.utils import next_epoch, change_keys
|
||||||
|
from wallet_config import MM_WALLET
|
||||||
|
from vega_sim.null_service import VegaServiceNull
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def vega(request):
|
||||||
|
with init_vega(request) as vega_instance:
|
||||||
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def page(vega, browser, request):
|
||||||
|
with init_page(vega, browser, request) as page:
|
||||||
|
risk_accepted_setup(page)
|
||||||
|
auth_setup(vega, page)
|
||||||
|
page.goto(REWARDS_URL)
|
||||||
|
change_keys(page, vega, PARTY_B)
|
||||||
|
yield page
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module", autouse=True)
|
||||||
|
def setup_market_with_reward_program(vega: VegaServiceNull):
|
||||||
|
tDAI_market = setup_continuous_market(vega)
|
||||||
|
PARTY_A, PARTY_B, PARTY_C, PARTY_D = keys(vega)
|
||||||
|
tDAI_asset_id = vega.find_asset_id(symbol="tDAI")
|
||||||
|
vega.mint(key_name=PARTY_B.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_C.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_A.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
vega.mint(key_name=PARTY_D.name, asset=tDAI_asset_id, amount=100000)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.update_network_parameter(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
parameter="rewards.activityStreak.benefitTiers",
|
||||||
|
new_value=ACTIVITY_STREAKS,
|
||||||
|
)
|
||||||
|
print("update_network_parameter activity done")
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
vega.update_network_parameter(
|
||||||
|
proposal_key=MM_WALLET.name,
|
||||||
|
parameter="rewards.vesting.benefitTiers",
|
||||||
|
new_value=VESTING,
|
||||||
|
)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
|
||||||
|
tDAI_asset_id = vega.find_asset_id(symbol="tDAI")
|
||||||
|
vega.update_network_parameter(
|
||||||
|
MM_WALLET.name, parameter="reward.asset", new_value=tDAI_asset_id
|
||||||
|
)
|
||||||
|
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.recurring_transfer(
|
||||||
|
from_key_name=PARTY_A.name,
|
||||||
|
from_account_type=vega_protos.vega.ACCOUNT_TYPE_GENERAL,
|
||||||
|
to_account_type=vega_protos.vega.ACCOUNT_TYPE_REWARD_MAKER_PAID_FEES,
|
||||||
|
asset=tDAI_asset_id,
|
||||||
|
reference="reward",
|
||||||
|
asset_for_metric=tDAI_asset_id,
|
||||||
|
metric=vega_protos.vega.DISPATCH_METRIC_MAKER_FEES_PAID,
|
||||||
|
amount=100,
|
||||||
|
factor=1.0,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_A.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
|
vega.wait_for_total_catchup()
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_LIMIT",
|
||||||
|
time_in_force="TIME_IN_FORCE_GTC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
price=1,
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_D.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
|
vega.wait_for_total_catchup()
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_B.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.submit_order(
|
||||||
|
trading_key=PARTY_D.name,
|
||||||
|
market_id=tDAI_market,
|
||||||
|
order_type="TYPE_MARKET",
|
||||||
|
time_in_force="TIME_IN_FORCE_IOC",
|
||||||
|
side="SIDE_BUY",
|
||||||
|
volume=1,
|
||||||
|
)
|
||||||
|
vega.wait_for_total_catchup()
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
next_epoch(vega=vega)
|
||||||
|
return tDAI_market, tDAI_asset_id
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_combo_tier_1")
|
||||||
|
def test_network_reward_pot( page: Page
|
||||||
|
):
|
||||||
|
expect(page.get_by_test_id(TOTAL_REWARDS)).to_have_text("183.33333 tDAI")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_combo_tier_1")
|
||||||
|
def test_reward_multiplier(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
expect(page.get_by_test_id(COMBINED_MULTIPLIERS)).to_have_text("4x")
|
||||||
|
expect(page.get_by_test_id(STREAK_REWARD_MULTIPLIER_VALUE)).to_have_text(
|
||||||
|
"2x"
|
||||||
|
)
|
||||||
|
expect(page.get_by_test_id(HOARDER_REWARD_MULTIPLIER_VALUE)).to_have_text(
|
||||||
|
"2x"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="test_rewards_combo_tier_1")
|
||||||
|
def test_reward_history(
|
||||||
|
page: Page,
|
||||||
|
):
|
||||||
|
page.locator('[name="fromEpoch"]').fill("1")
|
||||||
|
expect((page.get_by_role(ROW).locator(PRICE_TAKING_COL_ID)).nth(1)).to_have_text(
|
||||||
|
"299.99999100.00%"
|
||||||
|
)
|
||||||
|
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text("299.99999")
|
||||||
|
page.get_by_test_id(EARNED_BY_ME_BUTTON).click()
|
||||||
|
expect((page.get_by_role(ROW).locator(TOTAL_COL_ID)).nth(1)).to_have_text(
|
||||||
|
"183.33333"
|
||||||
|
)
|
@ -43,6 +43,7 @@ def test_vesting(continuous_market, vega: VegaServiceNull, page: Page):
|
|||||||
side="SIDE_BUY",
|
side="SIDE_BUY",
|
||||||
volume=1,
|
volume=1,
|
||||||
)
|
)
|
||||||
|
vega.wait_fn(1)
|
||||||
vega.wait_for_total_catchup()
|
vega.wait_for_total_catchup()
|
||||||
|
|
||||||
page.goto("/#/rewards")
|
page.goto("/#/rewards")
|
||||||
|
@ -6,7 +6,7 @@ from conftest import init_vega, cleanup_container
|
|||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def vega(request):
|
def vega(request):
|
||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(lambda: cleanup_container(vega_instance)) # Register the cleanup function
|
request.addfinalizer(lambda: cleanup_container(vega_instance))
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ def vega(request):
|
|||||||
with init_vega(request) as vega_instance:
|
with init_vega(request) as vega_instance:
|
||||||
request.addfinalizer(
|
request.addfinalizer(
|
||||||
lambda: cleanup_container(vega_instance)
|
lambda: cleanup_container(vega_instance)
|
||||||
) # Register the cleanup function
|
)
|
||||||
yield vega_instance
|
yield vega_instance
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user