chore(trading): team e2e tests (#5716)

This commit is contained in:
Ben 2024-02-01 19:33:25 +00:00 committed by GitHub
parent 02bd031bee
commit 0f311611ba
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 224 additions and 65 deletions

View File

@ -71,18 +71,27 @@ const CreateTeamFormContainer = ({ isSolo }: { isSolo: boolean }) => {
if (status === 'confirmed') { if (status === 'confirmed') {
return ( return (
<div className="flex flex-col items-start gap-2"> <div
className="flex flex-col items-start gap-2"
data-testid="team-creation-success-message"
>
<p className="text-sm">{t('Team creation transaction successful')}</p> <p className="text-sm">{t('Team creation transaction successful')}</p>
{code && ( {code && (
<> <>
<p className="text-sm"> <p className="text-sm">
Your team ID is:{' '} Your team ID is:{' '}
<span className="font-mono break-all">{code}</span> <span
className="font-mono break-all"
data-testid="team-id-display"
>
{code}
</span>
</p> </p>
<TradingAnchorButton <TradingAnchorButton
href={Links.COMPETITIONS_TEAM(code)} href={Links.COMPETITIONS_TEAM(code)}
intent={Intent.Info} intent={Intent.Info}
size="small" size="small"
data-testid="view-team-button"
> >
{t('View team')} {t('View team')}
</TradingAnchorButton> </TradingAnchorButton>

View File

@ -60,6 +60,7 @@ export const CompetitionsHome = () => {
e.preventDefault(); e.preventDefault();
navigate(Links.COMPETITIONS_CREATE_TEAM()); navigate(Links.COMPETITIONS_CREATE_TEAM());
}} }}
data-testid="create-public-team-button"
> >
{t('Create a public team')} {t('Create a public team')}
</TradingButton> </TradingButton>
@ -78,6 +79,7 @@ export const CompetitionsHome = () => {
e.preventDefault(); e.preventDefault();
navigate(Links.COMPETITIONS_CREATE_TEAM_SOLO()); navigate(Links.COMPETITIONS_CREATE_TEAM_SOLO());
}} }}
data-testid="create-private-team-button"
> >
{t('Create a private team')} {t('Create a private team')}
</TradingButton> </TradingButton>
@ -96,6 +98,7 @@ export const CompetitionsHome = () => {
e.preventDefault(); e.preventDefault();
navigate(Links.COMPETITIONS_TEAMS()); navigate(Links.COMPETITIONS_TEAMS());
}} }}
data-testid="choose-team-button"
> >
{t('Choose a team')} {t('Choose a team')}
</TradingButton> </TradingButton>

View File

@ -105,7 +105,11 @@ export const JoinButton = ({
// Party is in a team, but not this one // Party is in a team, but not this one
else if (partyTeam && partyTeam.teamId !== team.teamId) { else if (partyTeam && partyTeam.teamId !== team.teamId) {
return ( return (
<Button onClick={() => onJoin('switch')} intent={Intent.Primary}> <Button
onClick={() => onJoin('switch')}
intent={Intent.Primary}
data-testid="switch-team-button"
>
{t('Switch team')}{' '} {t('Switch team')}{' '}
</Button> </Button>
); );
@ -215,7 +219,11 @@ const DialogContent = ({
</> </>
)} )}
<div className="flex justify-between gap-2"> <div className="flex justify-between gap-2">
<Button onClick={joinTeam} intent={Intent.Success}> <Button
onClick={joinTeam}
intent={Intent.Success}
data-testid="confirm-switch-button"
>
{t('Confirm')} {t('Confirm')}
</Button> </Button>
<Button onClick={onCancel} intent={Intent.Danger}> <Button onClick={onCancel} intent={Intent.Danger}>

View File

@ -115,9 +115,12 @@ export const TeamForm = ({
<form onSubmit={handleSubmit(sendTransaction)}> <form onSubmit={handleSubmit(sendTransaction)}>
<input type="hidden" {...register('id')} /> <input type="hidden" {...register('id')} />
<TradingFormGroup label={t('Team name')} labelFor="name"> <TradingFormGroup label={t('Team name')} labelFor="name">
<TradingInput {...register('name', { required: t('Required') })} /> <TradingInput
{...register('name', { required: t('Required') })}
data-testid="team-name-input"
/>
{errors.name?.message && ( {errors.name?.message && (
<TradingInputError forInput="name"> <TradingInputError forInput="name" data-testid="team-name-error">
{errors.name.message} {errors.name.message}
</TradingInputError> </TradingInputError>
)} )}
@ -133,9 +136,10 @@ export const TeamForm = ({
{...register('url', { {...register('url', {
pattern: { value: URL_REGEX, message: t('Invalid URL') }, pattern: { value: URL_REGEX, message: t('Invalid URL') },
})} })}
data-testid="team-url-input"
/> />
{errors.url?.message && ( {errors.url?.message && (
<TradingInputError forInput="url"> <TradingInputError forInput="url" data-testid="team-url-error">
{errors.url.message} {errors.url.message}
</TradingInputError> </TradingInputError>
)} )}
@ -152,9 +156,13 @@ export const TeamForm = ({
message: t('Invalid image URL'), message: t('Invalid image URL'),
}, },
})} })}
data-testid="avatar-url-input"
/> />
{errors.avatarUrl?.message && ( {errors.avatarUrl?.message && (
<TradingInputError forInput="avatarUrl"> <TradingInputError
forInput="avatarUrl"
data-testid="avatar-url-error"
>
{errors.avatarUrl.message} {errors.avatarUrl.message}
</TradingInputError> </TradingInputError>
)} )}
@ -179,6 +187,7 @@ export const TeamForm = ({
onCheckedChange={(value) => { onCheckedChange={(value) => {
field.onChange(value); field.onChange(value);
}} }}
data-testid="team-private-checkbox"
/> />
); );
}} }}
@ -207,9 +216,13 @@ export const TeamForm = ({
}, },
}, },
})} })}
data-testid="team-allow-list-textarea"
/> />
{errors.allowList?.message && ( {errors.allowList?.message && (
<TradingInputError forInput="avatarUrl"> <TradingInputError
forInput="avatarUrl"
data-testid="team-allow-list-error"
>
{errors.allowList.message} {errors.allowList.message}
</TradingInputError> </TradingInputError>
)} )}
@ -284,7 +297,12 @@ const SubmitButton = ({
return ( return (
<div className="flex gap-2 items-baseline"> <div className="flex gap-2 items-baseline">
<TradingButton type="submit" intent={Intent.Info} disabled={disabled}> <TradingButton
type="submit"
intent={Intent.Info}
disabled={disabled}
data-testid="team-form-submit-button"
>
{text} {text}
</TradingButton> </TradingButton>
{status === 'confirmed' && confirmed} {status === 'confirmed' && confirmed}

View File

@ -152,7 +152,11 @@ export const ActiveRewards = ({ currentEpoch }: { currentEpoch: number }) => {
if (!enrichedTransfers || !enrichedTransfers.length) return null; if (!enrichedTransfers || !enrichedTransfers.length) return null;
return ( return (
<Card title={t('Active rewards')} className="lg:col-span-full"> <Card
title={t('Active rewards')}
className="lg:col-span-full"
data-testid="active-rewards-card"
>
{enrichedTransfers.length > 1 && ( {enrichedTransfers.length > 1 && (
<TradingInput <TradingInput
onChange={(e) => onChange={(e) =>
@ -371,6 +375,7 @@ export const ActiveRewardCard = ({
'rounded-lg', 'rounded-lg',
gradientClassName gradientClassName
)} )}
data-testid="active-rewards-card"
> >
<div <div
className={classNames( className={classNames(
@ -382,7 +387,7 @@ export const ActiveRewardCard = ({
<div className="flex flex-col gap-2 items-center text-center"> <div className="flex flex-col gap-2 items-center text-center">
<EntityIcon transfer={transfer} /> <EntityIcon transfer={transfer} />
{entityScope && ( {entityScope && (
<span className="text-muted text-xs"> <span className="text-muted text-xs" data-testid="entity-scope">
{EntityScopeLabelMapping[entityScope] || t('Unspecified')} {EntityScopeLabelMapping[entityScope] || t('Unspecified')}
</span> </span>
)} )}
@ -390,7 +395,7 @@ export const ActiveRewardCard = ({
<div className="flex flex-col gap-2 items-center text-center"> <div className="flex flex-col gap-2 items-center text-center">
<h3 className="flex flex-col gap-1 text-2xl shrink-1 text-center"> <h3 className="flex flex-col gap-1 text-2xl shrink-1 text-center">
<span className="font-glitch"> <span className="font-glitch" data-testid="reward-value">
{addDecimalsFormatNumber( {addDecimalsFormatNumber(
transferNode.transfer.amount, transferNode.transfer.amount,
transferNode.transfer.asset?.decimals || 0, transferNode.transfer.asset?.decimals || 0,
@ -411,7 +416,7 @@ export const ActiveRewardCard = ({
)} )}
underline={true} underline={true}
> >
<span className="text-xs"> <span className="text-xs" data-testid="distribution-strategy">
{ {
DistributionStrategyMapping[ DistributionStrategyMapping[
dispatchStrategy.distributionStrategy dispatchStrategy.distributionStrategy
@ -429,7 +434,10 @@ export const ActiveRewardCard = ({
'Number of epochs after distribution to delay vesting of rewards by' 'Number of epochs after distribution to delay vesting of rewards by'
)} )}
/> />
<span className="text-muted text-xs whitespace-nowrap"> <span
className="text-muted text-xs whitespace-nowrap"
data-testid="locked-for"
>
{t('numberEpochs', '{{count}} epochs', { {t('numberEpochs', '{{count}} epochs', {
count: kind.dispatchStrategy?.lockPeriod, count: kind.dispatchStrategy?.lockPeriod,
})} })}
@ -438,7 +446,7 @@ export const ActiveRewardCard = ({
</div> </div>
<span className="border-[0.5px] border-gray-700" /> <span className="border-[0.5px] border-gray-700" />
<span> <span data-testid="dispatch-metric-info">
{DispatchMetricLabels[dispatchStrategy.dispatchMetric]} {' '} {DispatchMetricLabels[dispatchStrategy.dispatchMetric]} {' '}
<Tooltip <Tooltip
underline={suspended} underline={suspended}
@ -458,8 +466,8 @@ export const ActiveRewardCard = ({
<div className="flex items-center gap-8 flex-wrap"> <div className="flex items-center gap-8 flex-wrap">
{kind.endEpoch && ( {kind.endEpoch && (
<span className="flex flex-col"> <span className="flex flex-col">
<span className="text-muted text-xs">{t('Ends in')}</span> <span className="text-muted text-xs">{t('Ends in')} </span>
<span> <span data-testid="ends-in">
{t('numberEpochs', '{{count}} epochs', { {t('numberEpochs', '{{count}} epochs', {
count: kind.endEpoch - currentEpoch, count: kind.endEpoch - currentEpoch,
})} })}
@ -470,7 +478,7 @@ export const ActiveRewardCard = ({
{ {
<span className="flex flex-col"> <span className="flex flex-col">
<span className="text-muted text-xs">{t('Assessed over')}</span> <span className="text-muted text-xs">{t('Assessed over')}</span>
<span> <span data-testid="assessed-over">
{t('numberEpochs', '{{count}} epochs', { {t('numberEpochs', '{{count}} epochs', {
count: dispatchStrategy.windowLength, count: dispatchStrategy.windowLength,
})} })}
@ -513,7 +521,7 @@ const RewardRequirements = ({
entity: EntityScopeLabelMapping[dispatchStrategy.entityScope], entity: EntityScopeLabelMapping[dispatchStrategy.entityScope],
})} })}
</dt> </dt>
<dd className="flex items-center gap-1"> <dd className="flex items-center gap-1" data-testid="scope">
<RewardEntityScope dispatchStrategy={dispatchStrategy} /> <RewardEntityScope dispatchStrategy={dispatchStrategy} />
</dd> </dd>
</div> </div>
@ -522,7 +530,10 @@ const RewardRequirements = ({
<dt className="flex items-center gap-1 text-muted"> <dt className="flex items-center gap-1 text-muted">
{t('Staked VEGA')} {t('Staked VEGA')}
</dt> </dt>
<dd className="flex items-center gap-1"> <dd
className="flex items-center gap-1"
data-testid="staking-requirement"
>
{addDecimalsFormatNumber( {addDecimalsFormatNumber(
dispatchStrategy?.stakingRequirement || 0, dispatchStrategy?.stakingRequirement || 0,
assetDecimalPlaces assetDecimalPlaces
@ -534,7 +545,7 @@ const RewardRequirements = ({
<dt className="flex items-center gap-1 text-muted"> <dt className="flex items-center gap-1 text-muted">
{t('Average position')} {t('Average position')}
</dt> </dt>
<dd className="flex items-center gap-1"> <dd className="flex items-center gap-1" data-testid="average-position">
{addDecimalsFormatNumber( {addDecimalsFormatNumber(
dispatchStrategy?.notionalTimeWeightedAveragePositionRequirement || dispatchStrategy?.notionalTimeWeightedAveragePositionRequirement ||
0, 0,

View File

@ -59,7 +59,7 @@ def test_filtered_cards(continuous_market, vega: VegaServiceNull, page: Page):
next_epoch(vega=vega) next_epoch(vega=vega)
page.reload() page.reload()
expect(page.locator(".from-vega-cdark-400")).to_be_visible(timeout=15000) expect(page.get_by_test_id("active-rewards-card")).to_be_visible(timeout=15000)
governance.submit_oracle_data( governance.submit_oracle_data(
wallet=vega.wallet, wallet=vega.wallet,
payload={"trading.terminated": "true"}, payload={"trading.terminated": "true"},
@ -67,4 +67,4 @@ def test_filtered_cards(continuous_market, vega: VegaServiceNull, page: Page):
) )
next_epoch(vega=vega) next_epoch(vega=vega)
page.reload() page.reload()
expect(page.locator(".from-vega-cdark-400")).not_to_be_in_viewport() expect(page.get_by_test_id("active-rewards-card")).not_to_be_in_viewport()

View File

@ -3,7 +3,7 @@ from playwright.sync_api import expect, Page
import vega_sim.proto.vega as vega_protos import vega_sim.proto.vega as vega_protos
from vega_sim.null_service import VegaServiceNull from vega_sim.null_service import VegaServiceNull
from conftest import init_vega from conftest import init_vega
from actions.utils import next_epoch from actions.utils import next_epoch, change_keys
from fixtures.market import setup_continuous_market from fixtures.market import setup_continuous_market
from conftest import auth_setup, init_page, init_vega, risk_accepted_setup from conftest import auth_setup, init_page, init_vega, risk_accepted_setup
from wallet_config import PARTY_A, PARTY_B, PARTY_C, PARTY_D, MM_WALLET from wallet_config import PARTY_A, PARTY_B, PARTY_C, PARTY_D, MM_WALLET
@ -14,6 +14,7 @@ def vega(request):
with init_vega(request) as vega: with init_vega(request) as vega:
yield vega yield vega
@pytest.fixture(scope="module") @pytest.fixture(scope="module")
def team_page(vega, browser, request, setup_teams_and_games): def team_page(vega, browser, request, setup_teams_and_games):
with init_page(vega, browser, request) as page: with init_page(vega, browser, request) as page:
@ -23,9 +24,19 @@ def team_page(vega, browser, request, setup_teams_and_games):
page.goto(f"/#/competitions/teams/{team_id}") page.goto(f"/#/competitions/teams/{team_id}")
yield page yield page
@pytest.fixture(scope="module")
def competitions_page(vega, browser, request, setup_teams_and_games):
with init_page(vega, browser, request) as page:
risk_accepted_setup(page)
auth_setup(vega, page)
team_id = setup_teams_and_games["team_id"]
page.goto(f"/#/competitions/")
yield page
@pytest.fixture(scope="module") @pytest.fixture(scope="module")
def setup_teams_and_games(vega: VegaServiceNull): def setup_teams_and_games(vega: VegaServiceNull):
tDAI_market = setup_continuous_market(vega) tDAI_market = setup_continuous_market(vega, custom_quantum=100000)
tDAI_asset_id = vega.find_asset_id(symbol="tDAI") 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_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_C.name, asset=tDAI_asset_id, amount=100000)
@ -46,6 +57,18 @@ def setup_teams_and_games(vega: VegaServiceNull):
# list_teams actually returns a dictionary {"team_id": Team} # list_teams actually returns a dictionary {"team_id": Team}
team_id = list(teams.keys())[0] team_id = list(teams.keys())[0]
vega.create_referral_set(
key_name="market_maker",
name="test",
team_url="https://vega.xyz",
avatar_url="http://placekitten.com/200/200",
closed=False,
)
next_epoch(vega)
teams = vega.list_teams()
team_id_2 = list(teams.keys())[0]
vega.apply_referral_code("Key 1", team_id_2)
vega.apply_referral_code(PARTY_B.name, team_id) vega.apply_referral_code(PARTY_B.name, team_id)
@ -63,7 +86,7 @@ def setup_teams_and_games(vega: VegaServiceNull):
current_epoch = vega.statistics().epoch_seq current_epoch = vega.statistics().epoch_seq
game_start = current_epoch + 1 game_start = current_epoch + 1
game_end = current_epoch + 11 game_end = current_epoch + 14
current_epoch = vega.statistics().epoch_seq current_epoch = vega.statistics().epoch_seq
print(f"[EPOCH: {current_epoch}] creating recurring transfer") print(f"[EPOCH: {current_epoch}] creating recurring transfer")
@ -84,9 +107,42 @@ def setup_teams_and_games(vega: VegaServiceNull):
factor=1.0, factor=1.0,
start_epoch=game_start, start_epoch=game_start,
end_epoch=game_end, end_epoch=game_end,
window_length=10 window_length=15,
)
vega.wait_fn(1)
vega.wait_for_total_catchup()
vega.recurring_transfer(
from_key_name=PARTY_B.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,
entity_scope=vega_protos.vega.ENTITY_SCOPE_INDIVIDUALS,
individual_scope=vega_protos.vega.INDIVIDUAL_SCOPE_IN_TEAM,
n_top_performers=1,
amount=100,
factor=1.0,
window_length=15
)
vega.wait_fn(1)
vega.wait_for_total_catchup()
vega.recurring_transfer(
from_key_name=PARTY_C.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,
entity_scope=vega_protos.vega.ENTITY_SCOPE_INDIVIDUALS,
individual_scope=vega_protos.vega.INDIVIDUAL_SCOPE_NOT_IN_TEAM,
n_top_performers=1,
amount=100,
factor=1.0,
window_length=15
) )
next_epoch(vega) next_epoch(vega)
print(f"[EPOCH: {vega.statistics().epoch_seq}] starting order activity") print(f"[EPOCH: {vega.statistics().epoch_seq}] starting order activity")
@ -113,6 +169,22 @@ def setup_teams_and_games(vega: VegaServiceNull):
side="SIDE_BUY", side="SIDE_BUY",
volume=1, volume=1,
) )
vega.submit_order(
trading_key="Key 1",
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="market_maker",
market_id=tDAI_market,
order_type="TYPE_MARKET",
time_in_force="TIME_IN_FORCE_IOC",
side="SIDE_BUY",
volume=1,
)
next_epoch(vega) next_epoch(vega)
print(f"[EPOCH: {vega.statistics().epoch_seq}] {i} epoch passed") print(f"[EPOCH: {vega.statistics().epoch_seq}] {i} epoch passed")
@ -120,6 +192,7 @@ def setup_teams_and_games(vega: VegaServiceNull):
"market_id": tDAI_market, "market_id": tDAI_market,
"asset_id": tDAI_asset_id, "asset_id": tDAI_asset_id,
"team_id": team_id, "team_id": team_id,
"team_id_2": team_id_2,
"team_name": team_name, "team_name": team_name,
} }
@ -136,66 +209,103 @@ def create_team(vega: VegaServiceNull):
return team_name return team_name
def test_team_page_games_table(team_page: Page): def test_team_page_games_table(team_page: Page):
team_page.pause()
team_page.get_by_test_id("games-toggle").click() team_page.get_by_test_id("games-toggle").click()
expect(team_page.get_by_test_id("games-toggle")).to_have_text("Games (1)") expect(team_page.get_by_test_id("games-toggle")).to_have_text("Games (1)")
expect(team_page.get_by_test_id("rank-0")).to_have_text("1") expect(team_page.get_by_test_id("rank-0")).to_have_text("2")
expect(team_page.get_by_test_id("epoch-0")).to_have_text("18") expect(team_page.get_by_test_id("epoch-0")).to_have_text("19")
expect(team_page.get_by_test_id("type-0")).to_have_text("Price maker fees paid") expect(team_page.get_by_test_id("type-0")).to_have_text("Price maker fees paid")
expect(team_page.get_by_test_id("amount-0")).to_have_text("100,000,000") expect(team_page.get_by_test_id("amount-0")).to_have_text("74")
expect(team_page.get_by_test_id("participatingTeams-0")).to_have_text( expect(team_page.get_by_test_id("participatingTeams-0")).to_have_text("2")
"1" expect(team_page.get_by_test_id("participatingMembers-0")).to_have_text("4")
)
expect(team_page.get_by_test_id("participatingMembers-0")).to_have_text(
"2"
)
def test_team_page_members_table(team_page: Page): def test_team_page_members_table(team_page: Page):
team_page.get_by_test_id("members-toggle").click() team_page.get_by_test_id("members-toggle").click()
expect(team_page.get_by_test_id("members-toggle")).to_have_text("Members (4)") expect(team_page.get_by_test_id("members-toggle")).to_have_text("Members (4)")
expect(team_page.get_by_test_id("referee-0")).to_be_visible() expect(team_page.get_by_test_id("referee-0")).to_be_visible()
expect(team_page.get_by_test_id("joinedAt-0")).to_be_visible() expect(team_page.get_by_test_id("joinedAt-0")).to_be_visible()
expect(team_page.get_by_test_id("joinedAtEpoch-0")).to_have_text("8") expect(team_page.get_by_test_id("joinedAtEpoch-0")).to_have_text("9")
def test_team_page_headline(team_page: Page, setup_teams_and_games
): def test_team_page_headline(team_page: Page, setup_teams_and_games):
team_name = setup_teams_and_games["team_name"] team_name = setup_teams_and_games["team_name"]
expect(team_page.get_by_test_id("team-name")).to_have_text(team_name) expect(team_page.get_by_test_id("team-name")).to_have_text(team_name)
expect(team_page.get_by_test_id("members-count-stat")).to_have_text("4") expect(team_page.get_by_test_id("members-count-stat")).to_have_text("4")
expect(team_page.get_by_test_id("total-games-stat")).to_have_text( expect(team_page.get_by_test_id("total-games-stat")).to_have_text("2")
"1"
)
# TODO this still seems wrong as its always 0 # TODO this still seems wrong as its always 0
expect(team_page.get_by_test_id("total-volume-stat")).to_have_text( expect(team_page.get_by_test_id("total-volume-stat")).to_have_text("0")
"0"
)
expect(team_page.get_by_test_id("rewards-paid-stat")).to_have_text( expect(team_page.get_by_test_id("rewards-paid-stat")).to_have_text("214")
"100m"
)
def test_switch_teams(team_page: Page, vega: VegaServiceNull):
team_page.get_by_test_id("switch-team-button").click()
team_page.get_by_test_id("confirm-switch-button").click()
expect(team_page.get_by_test_id("dialog-content").first).to_be_visible()
vega.wait_fn(1)
vega.wait_for_total_catchup()
next_epoch(vega=vega)
team_page.reload()
expect(team_page.get_by_test_id("members-count-stat")).to_have_text("5")
@pytest.fixture(scope="module")
def competitions_page(vega, browser, request):
with init_page(vega, browser, request) as page:
risk_accepted_setup(page)
auth_setup(vega, page)
yield page
def test_leaderboard(competitions_page: Page, setup_teams_and_games): def test_leaderboard(competitions_page: Page, setup_teams_and_games):
team_name = setup_teams_and_games["team_name"] team_name = setup_teams_and_games["team_name"]
competitions_page.goto(f"/#/competitions/") competitions_page.reload()
expect(competitions_page.get_by_test_id("rank-0").locator(".text-yellow-300")).to_have_count(1) expect(
expect(competitions_page.get_by_test_id("team-0")).to_have_text(team_name) competitions_page.get_by_test_id("rank-0").locator(".text-yellow-300")
expect(competitions_page.get_by_test_id("status-0")).to_have_text("Open") ).to_have_count(1)
expect(
competitions_page.get_by_test_id("rank-1").locator(".text-vega-clight-500")
).to_have_count(1)
expect(competitions_page.get_by_test_id("team-1")).to_have_text(team_name)
expect(competitions_page.get_by_test_id("status-1")).to_have_text("Open")
expect(competitions_page.get_by_test_id("earned-0")).to_have_text("100,000,000") expect(competitions_page.get_by_test_id("earned-1")).to_have_text("160")
expect(competitions_page.get_by_test_id("games-0")).to_have_text("1") expect(competitions_page.get_by_test_id("games-1")).to_have_text("2")
# TODO still odd that this is 0 # TODO still odd that this is 0
expect(competitions_page.get_by_test_id("volume-0")).to_have_text("-") expect(competitions_page.get_by_test_id("volume-0")).to_have_text("-")
#TODO def test_games(competitions_page: Page):
#TODO currently no games appear which i think is a bug def test_game_card(competitions_page: Page):
expect(competitions_page.get_by_test_id("active-rewards-card")).to_have_count(2)
game_1 = competitions_page.get_by_test_id("active-rewards-card").first
expect(game_1).to_be_visible()
expect(game_1.get_by_test_id("entity-scope")).to_have_text("Individual")
expect(game_1.get_by_test_id("locked-for")).to_have_text("1 epoch")
expect(game_1.get_by_test_id("reward-value")).to_have_text("100.00")
expect(game_1.get_by_test_id("distribution-strategy")).to_have_text("Pro rata")
expect(game_1.get_by_test_id("dispatch-metric-info")).to_have_text("Price maker fees paid • ")
expect(game_1.get_by_test_id("assessed-over")).to_have_text("15 epochs")
expect(game_1.get_by_test_id("scope")).to_have_text("In team")
expect(game_1.get_by_test_id("staking-requirement")).to_have_text("0.00")
expect(game_1.get_by_test_id("average-position")).to_have_text("0.00")
def test_create_team(competitions_page: Page, vega: VegaServiceNull):
change_keys(competitions_page, vega, "market_maker_2")
competitions_page.get_by_test_id("create-public-team-button").click()
competitions_page.get_by_test_id("team-name-input").fill("e2e")
competitions_page.get_by_test_id("team-url-input").fill("https://vega.xyz")
competitions_page.get_by_test_id("avatar-url-input").fill(
"http://placekitten.com/200/200"
)
competitions_page.get_by_test_id("team-form-submit-button").click()
expect(competitions_page.get_by_test_id("team-form-submit-button")).to_have_text(
"Confirming transaction..."
)
vega.wait_fn(2)
vega.wait_for_total_catchup()
expect(
competitions_page.get_by_test_id("team-creation-success-message")
).to_be_visible()
expect(competitions_page.get_by_test_id("team-id-display")).to_be_visible()
expect(competitions_page.get_by_test_id("team-id-display")).to_be_visible()
competitions_page.get_by_test_id("view-team-button").click()
expect(competitions_page.get_by_test_id("team-name")).to_have_text("e2e")