parent
79c9c8571a
commit
1e0822eaa2
21 changed files with 126 additions and 47 deletions
|
|
@ -2,6 +2,7 @@ import { expect, test, type APIRequestContext } from '@playwright/test';
|
|||
import { Wallet } from 'ethers';
|
||||
import { createWalletContext } from '../setup/wallet-provider';
|
||||
import { getStackConfig, validateStackHealthy } from '../setup/stack';
|
||||
import { navigateSPA } from '../setup/navigate';
|
||||
|
||||
const ACCOUNT_PRIVATE_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80';
|
||||
const ACCOUNT_ADDRESS = new Wallet(ACCOUNT_PRIVATE_KEY).address.toLowerCase();
|
||||
|
|
@ -152,8 +153,8 @@ test.describe('Acquire & Stake', () => {
|
|||
console.log('[TEST] Stack version footer verified.');
|
||||
|
||||
console.log('[TEST] Navigating to cheats page...');
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/cheats`);
|
||||
await expect(page.getByRole('heading', { name: 'Cheat Console' })).toBeVisible();
|
||||
await navigateSPA(page, '/app/cheats');
|
||||
await expect(page.getByRole('heading', { name: 'Cheat Console' })).toBeVisible({ timeout: 10_000 });
|
||||
|
||||
console.log('[TEST] Minting test ETH...');
|
||||
await page.getByLabel('RPC URL').fill(STACK_RPC_URL);
|
||||
|
|
@ -217,7 +218,7 @@ test.describe('Acquire & Stake', () => {
|
|||
|
||||
// Now test staking via UI
|
||||
console.log('[TEST] Navigating to stake page...');
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await navigateSPA(page, '/app/stake');
|
||||
await page.waitForTimeout(2_000);
|
||||
|
||||
// Wait for the stake form to be initialized
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { expect, test, type APIRequestContext } from '@playwright/test';
|
|||
import { Wallet } from 'ethers';
|
||||
import { createWalletContext } from '../setup/wallet-provider';
|
||||
import { getStackConfig, validateStackHealthy } from '../setup/stack';
|
||||
import { navigateSPA } from '../setup/navigate';
|
||||
import { TAX_RATE_OPTIONS } from '../../kraiken-lib/src/taxRates';
|
||||
|
||||
const ACCOUNT_PRIVATE_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80';
|
||||
|
|
@ -163,8 +164,8 @@ test.describe('Max Stake All Tax Rates', () => {
|
|||
|
||||
// Step 1: Mint test ETH
|
||||
console.log('[TEST] Navigating to cheats page...');
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/cheats`);
|
||||
await expect(page.getByRole('heading', { name: 'Cheat Console' })).toBeVisible();
|
||||
await navigateSPA(page, '/app/cheats');
|
||||
await expect(page.getByRole('heading', { name: 'Cheat Console' })).toBeVisible({ timeout: 10_000 });
|
||||
|
||||
console.log('[TEST] Minting test ETH (10 ETH)...');
|
||||
await page.getByLabel('RPC URL').fill(STACK_RPC_URL);
|
||||
|
|
@ -217,7 +218,7 @@ test.describe('Max Stake All Tax Rates', () => {
|
|||
|
||||
// Step 3: Navigate to stake page
|
||||
console.log('[TEST] Navigating to stake page...');
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await navigateSPA(page, '/app/stake');
|
||||
await page.waitForTimeout(2_000);
|
||||
|
||||
const tokenAmountSlider = page.getByRole('slider', { name: 'Token Amount' });
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ test.describe('GraphQL URL Verification', () => {
|
|||
|
||||
try {
|
||||
console.log('[TEST] Navigating to staking page...');
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`, { waitUntil: 'domcontentloaded' });
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`, { waitUntil: 'domcontentloaded' });
|
||||
|
||||
// Wait for page to fully load and settle
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ test.describe('Dashboard Pages', () => {
|
|||
});
|
||||
|
||||
try {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/wallet/${ACCOUNT_ADDRESS}`, {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/wallet/${ACCOUNT_ADDRESS}`, {
|
||||
waitUntil: 'domcontentloaded',
|
||||
});
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
|
@ -143,7 +143,7 @@ test.describe('Dashboard Pages', () => {
|
|||
const page = await context.newPage();
|
||||
|
||||
try {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/wallet/${ACCOUNT_ADDRESS}`, {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/wallet/${ACCOUNT_ADDRESS}`, {
|
||||
waitUntil: 'domcontentloaded',
|
||||
});
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
|
@ -174,7 +174,7 @@ test.describe('Dashboard Pages', () => {
|
|||
try {
|
||||
// Navigate to a wallet with no balance
|
||||
const unknownAddr = '0x0000000000000000000000000000000000000001';
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/wallet/${unknownAddr}`, {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/wallet/${unknownAddr}`, {
|
||||
waitUntil: 'domcontentloaded',
|
||||
});
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
|
@ -224,7 +224,7 @@ test.describe('Dashboard Pages', () => {
|
|||
});
|
||||
|
||||
try {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/position/${positionId}`, {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/position/${positionId}`, {
|
||||
waitUntil: 'domcontentloaded',
|
||||
});
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
|
@ -297,7 +297,7 @@ test.describe('Dashboard Pages', () => {
|
|||
});
|
||||
|
||||
try {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/position/999999999`, {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/position/999999999`, {
|
||||
waitUntil: 'domcontentloaded',
|
||||
});
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
|
@ -340,7 +340,7 @@ test.describe('Dashboard Pages', () => {
|
|||
const page = await context.newPage();
|
||||
|
||||
try {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/position/${positionId}`, {
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/position/${positionId}`, {
|
||||
waitUntil: 'domcontentloaded',
|
||||
});
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ test.describe('Alex Rivera - Crypto-Curious Newcomer', () => {
|
|||
|
||||
// --- Navigate to Stake Page to Learn ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(3_000);
|
||||
recordPageVisit('Stake (learning)', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -143,7 +143,7 @@ test.describe('Alex Rivera - Crypto-Curious Newcomer', () => {
|
|||
logObservation(personaName, 'I need to get some tokens first... let me figure out how', report);
|
||||
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/cheats`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/cheats`);
|
||||
await page.waitForTimeout(2_000);
|
||||
recordPageVisit('Cheats (confused)', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -178,7 +178,7 @@ test.describe('Alex Rivera - Crypto-Curious Newcomer', () => {
|
|||
|
||||
// --- Navigate to Stake (Intimidated) ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(2_000);
|
||||
recordPageVisit('Stake (attempting)', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -212,7 +212,7 @@ test.describe('Alex Rivera - Crypto-Curious Newcomer', () => {
|
|||
await page.waitForTimeout(3_000);
|
||||
|
||||
// --- Check for Progress Indicators ---
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(2_000);
|
||||
await takeScreenshot(page, personaName, 'looking-for-my-position', report);
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ test.describe('All Personas - Fresh Pool State', () => {
|
|||
console.log(`[${persona.shortName}] ✅ Wallet connected`);
|
||||
|
||||
// 3. Mint ETH
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/cheats`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/cheats`);
|
||||
await page.waitForTimeout(1_000);
|
||||
await mintEth(page, STACK_RPC_URL, address, persona.ethToMint);
|
||||
await takeScreenshot(page, persona.shortName, '3-eth-minted', report);
|
||||
|
|
@ -128,7 +128,7 @@ test.describe('All Personas - Fresh Pool State', () => {
|
|||
await page.waitForTimeout(2_000);
|
||||
|
||||
// 5. Navigate to stake page
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(3_000);
|
||||
await takeScreenshot(page, persona.shortName, '5-stake-page', report);
|
||||
|
||||
|
|
@ -142,7 +142,7 @@ test.describe('All Personas - Fresh Pool State', () => {
|
|||
await page.waitForTimeout(2_000);
|
||||
|
||||
// 7. Verify position exists
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(2_000);
|
||||
|
||||
const myPositionsSection = page.locator('.my-positions-list, [class*="my-position"], [class*="MyPosition"]').first();
|
||||
|
|
|
|||
|
|
@ -511,7 +511,7 @@ export async function attemptStake(
|
|||
console.log(`[${personaName}] Attempting to stake ${amount} KRK at tax rate ${taxRateIndex}%...`);
|
||||
|
||||
const baseUrl = page.url().split('#')[0];
|
||||
await page.goto(`${baseUrl}#/stake`);
|
||||
await page.goto(`${baseUrl}stake`);
|
||||
|
||||
// Wait longer for page to load and stats to initialize
|
||||
await page.waitForTimeout(3_000);
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ test.describe('Marcus "Flash" Chen - Degen/MEV Hunter', () => {
|
|||
|
||||
// --- Mint ETH (Cheats) ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/cheats`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/cheats`);
|
||||
await page.waitForTimeout(1_000);
|
||||
recordPageVisit('Cheats', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ test.describe('Marcus "Flash" Chen - Degen/MEV Hunter', () => {
|
|||
|
||||
// --- Navigate to Stake Page ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(4_000);
|
||||
recordPageVisit('Stake', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -149,7 +149,7 @@ test.describe('Marcus "Flash" Chen - Degen/MEV Hunter', () => {
|
|||
// --- Try to Snatch Another Position (if visible) ---
|
||||
logObservation(personaName, 'Scrolling through active positions looking for snatch targets...', report);
|
||||
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(2_000);
|
||||
await takeScreenshot(page, personaName, 'looking-for-snatch-targets', report);
|
||||
|
||||
|
|
@ -166,7 +166,7 @@ test.describe('Marcus "Flash" Chen - Degen/MEV Hunter', () => {
|
|||
|
||||
// --- Check Statistics ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(1_000);
|
||||
|
||||
const statsVisible = await page.getByText('Statistics').isVisible().catch(() => false);
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ test.describe('Dr. Priya Malhotra - Institutional/Analytical Investor', () => {
|
|||
|
||||
// --- Examine Stake Page Statistics ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(3_000);
|
||||
recordPageVisit('Stake (analysis)', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -109,7 +109,7 @@ test.describe('Dr. Priya Malhotra - Institutional/Analytical Investor', () => {
|
|||
|
||||
// --- Examine Three-Position Liquidity Claim ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/cheats`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/cheats`);
|
||||
await page.waitForTimeout(2_000);
|
||||
recordPageVisit('Cheats (liquidity analysis)', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ test.describe('Dr. Priya Malhotra - Institutional/Analytical Investor', () => {
|
|||
|
||||
// --- Navigate to Stake for Optimal Tax Rate Analysis ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(2_000);
|
||||
recordPageVisit('Stake (optimization)', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -192,7 +192,7 @@ test.describe('Dr. Priya Malhotra - Institutional/Analytical Investor', () => {
|
|||
await page.waitForTimeout(3_000);
|
||||
|
||||
// --- Review Position Management Interface ---
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(2_000);
|
||||
await takeScreenshot(page, personaName, 'position-management', report);
|
||||
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ test.describe('Sarah Park - Cautious Yield Farmer', () => {
|
|||
|
||||
// --- Navigate to Stake Page to Learn ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(3_000);
|
||||
recordPageVisit('Stake (research)', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -115,7 +115,7 @@ test.describe('Sarah Park - Cautious Yield Farmer', () => {
|
|||
|
||||
// --- Mint ETH ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/cheats`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/cheats`);
|
||||
await page.waitForTimeout(1_000);
|
||||
recordPageVisit('Cheats', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -142,7 +142,7 @@ test.describe('Sarah Park - Cautious Yield Farmer', () => {
|
|||
|
||||
// --- Navigate Back to Stake ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(2_000);
|
||||
recordPageVisit('Stake (attempt)', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -169,7 +169,7 @@ test.describe('Sarah Park - Cautious Yield Farmer', () => {
|
|||
await page.waitForTimeout(3_000);
|
||||
|
||||
// --- Check Active Positions ---
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(2_000);
|
||||
await takeScreenshot(page, personaName, 'checking-my-position', report);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import { execSync } from 'child_process';
|
|||
|
||||
const STACK_CONFIG = getStackConfig();
|
||||
const STACK_RPC_URL = STACK_CONFIG.rpcUrl;
|
||||
const STAKE_PAGE_URL = `${STACK_CONFIG.webAppUrl}/app/#/stake`;
|
||||
const STAKE_PAGE_URL = `${STACK_CONFIG.webAppUrl}/app/stake`;
|
||||
|
||||
// Anvil test account keys
|
||||
const MARCUS_KEY = '0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6'; // Anvil #3
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import { join } from 'path';
|
|||
const STACK_CONFIG = getStackConfig();
|
||||
const STACK_RPC_URL = STACK_CONFIG.rpcUrl;
|
||||
const STACK_WEBAPP_URL = STACK_CONFIG.webAppUrl;
|
||||
const STAKE_PAGE_URL = 'http://localhost:5173/#/stake';
|
||||
const STAKE_PAGE_URL = 'http://localhost:5173/stake';
|
||||
|
||||
// Different accounts for different personas
|
||||
const MARCUS_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'; // Anvil #0
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ test.describe('Tyler "Bags" Morrison - Retail Degen', () => {
|
|||
|
||||
// --- Navigate to Cheats (Finds It Randomly) ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/cheats`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/cheats`);
|
||||
await page.waitForTimeout(1_000);
|
||||
recordPageVisit('Cheats', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -118,7 +118,7 @@ test.describe('Tyler "Bags" Morrison - Retail Degen', () => {
|
|||
|
||||
// --- Navigate to Stake (No Idea What He's Doing) ---
|
||||
pageStart = Date.now();
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(3_000);
|
||||
recordPageVisit('Stake', page.url(), pageStart, report);
|
||||
|
||||
|
|
@ -145,7 +145,7 @@ test.describe('Tyler "Bags" Morrison - Retail Degen', () => {
|
|||
await page.waitForTimeout(3_000);
|
||||
|
||||
// --- Checks for Immediate Gains ---
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`);
|
||||
await page.goto(`${STACK_WEBAPP_URL}/app/stake`);
|
||||
await page.waitForTimeout(2_000);
|
||||
await takeScreenshot(page, personaName, 'checking-gains', report);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue