{"id":25743020,"url":"https://github.com/thanasornsawan/end_to_end_testing_dapp_playwright_synpress","last_synced_at":"2026-04-09T13:55:32.751Z","repository":{"id":276150595,"uuid":"927024225","full_name":"Thanasornsawan/end_to_end_testing_dapp_playwright_synpress","owner":"Thanasornsawan","description":"Implemented Page Object Model (POM) structure for Synpress (Playwright) to conduct end-to-end (E2E) testing on a lending smart contract. Developed a Solidity smart contract for lending ETH to WETH, supporting deposit, withdraw, borrow, and repay flows (with an annual interest rate), Also built a staking contract that allows users to stake WETH","archived":false,"fork":false,"pushed_at":"2025-02-26T06:11:14.000Z","size":3438,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-26T07:20:41.312Z","etag":null,"topics":["blockchain","dapp","dapps","ethereum-contract","ethersjs","hardhat","mocha-chai","nextjs","playwright","playwright-typescript","qa-automation","reactjs","smart-contracts","solidity","synpress","testing","web3"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Thanasornsawan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-04T09:22:28.000Z","updated_at":"2025-02-26T06:11:17.000Z","dependencies_parsed_at":"2025-02-26T07:31:40.739Z","dependency_job_id":null,"html_url":"https://github.com/Thanasornsawan/end_to_end_testing_dapp_playwright_synpress","commit_stats":null,"previous_names":["thanasornsawan/e2e_blockchain_testing","thanasornsawan/end_to_end_testing_dapp_playwright_synpress"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thanasornsawan%2Fend_to_end_testing_dapp_playwright_synpress","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thanasornsawan%2Fend_to_end_testing_dapp_playwright_synpress/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thanasornsawan%2Fend_to_end_testing_dapp_playwright_synpress/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thanasornsawan%2Fend_to_end_testing_dapp_playwright_synpress/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Thanasornsawan","download_url":"https://codeload.github.com/Thanasornsawan/end_to_end_testing_dapp_playwright_synpress/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240831378,"owners_count":19864718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","dapp","dapps","ethereum-contract","ethersjs","hardhat","mocha-chai","nextjs","playwright","playwright-typescript","qa-automation","reactjs","smart-contracts","solidity","synpress","testing","web3"],"created_at":"2025-02-26T10:18:13.399Z","updated_at":"2025-12-30T19:38:49.823Z","avatar_url":"https://github.com/Thanasornsawan.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏦 End-to-End Testing of a DeFi Lending Protocol with Synpress \u0026 Playwright\n\nThis repository provides a complete **end-to-end (E2E) testing setup** for a **DeFi lending smart contract** using **Synpress v4, Playwright, and Hardhat**. \n\u003cbr/\u003e\nIt covers:\n\u003cbr/\u003e\n✅ Smart contract deployment \u0026 interaction (Hardhat)  \u003cbr/\u003e\n✅ Using Anvil to simulate different network and gas cost on local network \u003cbr/\u003e\n✅ Automated testing with **Synpress + Playwright** (MetaMask interaction included!)  \u003cbr/\u003e\n✅ Testing across Layer 1 (Ethereum) and Layer 2 (Optimism) networks  \u003cbr/\u003e\n✅ **Database integration testing** with PostgreSQL (Prisma ORM)  \u003cbr/\u003e\n\u003cbr/\u003e\nThis project is perfect for **QA engineers, blockchain testers, and developers** who want to learn **end-to-end blockchain testing** using real-world tools. 🚀 \u003cbr/\u003e\n\n## ⭐ Why Use This Repo?\n- **Hands-on Learning:** Learn how to test DeFi smart contracts with real tools.\n- **Complete Setup:** Covers both frontend and backend testing, including **MetaMask interaction**.\n- **Mainnet Forking:** Test against real Ethereum mainnet data using **Alchemy \u0026 Hardhat**.\n- **Database Testing:** Use **PostgreSQL + Prisma** for off-chain integration testing.\n\n🔹 If you find this repo useful, **please ⭐ star it** to support the project!\n\n## Project Structure Overview\nThe project is organized into three main sections, each with its own dependencies and functionality:\n\n```sh\nE2E_blockchain_testing/\n├── contracts/                  # Smart contract code (Solidity)\n├── scripts/                    # Deployment and utility scripts\n├── test/                       # Backend tests for smart contracts\n├── frontend/                   # React/Next.js frontend application\n├── web3_test/                  # Playwright/Synpress E2E tests\n├── services/                   # Shared services\n├── prisma/                     # Database schema and migrations\n├── hardhat.config.ts           # Hardhat configuration\n└── package.json                # Backend package configuration\n```\n\n\n### 🛠️ How to Setup project 🛠️\n\n1. Install dependencies:\n\n1.1 Install dependencies for Backend (smart contract):\n```bash\nnpm install\n```\n\nComplie all the smart contract to your local project:\n```bash\nnpx hardhat compile\n```\n\n1.2 Install dependencies for Frontend (react + nexjs):\n```bash\ncd frontend \u0026 npm install\n```\n1.3 Install dependencies for Synpress and Playwright:\n```bash\ncd web3_test \u0026 npm install\n```\n\n2. Set up environment variables:\n\n```bash\ncp .env.example .env\n```\n\nEdit `.env` with your configuration:\n\n3. database setup (off-chain data for tracking events):\u003cbr/\u003e\n\n3.1 Install dependencies:\n```sh\nnpm install @prisma/client\nnpm install prisma --save-dev\n```\n3.2 Start postgresql db with Prisma on docker compose:\n```sh\ndocker-compose up -d\n```\n\n![db4](https://github.com/Thanasornsawan/E2E_blockchain_testing/blob/main/pictures/db_set4.png?raw=true)\n\n3.3 Push schema to database:\u003cbr/\u003e\nCreates the tables according to your Prisma schema:\n\n```sh\nnpx prisma db push\n```\n![db2](https://github.com/Thanasornsawan/E2E_blockchain_testing/blob/main/pictures/db_set2.png?raw=true)\n\nGenerate client\u003cbr/\u003e\nGenerates the TypeScript client for your application\n```sh\nnpx prisma generate\n```\n3.4 Check database tables:\n```sh\nnpx prisma db pull\n```\n\n![db3](https://github.com/Thanasornsawan/E2E_blockchain_testing/blob/main/pictures/db_set3.png?raw=true)\n\n3.5 Test db connection:\n```sh\nnpx ts-node test-db-connection.ts\n```\n\n![db1](https://github.com/Thanasornsawan/E2E_blockchain_testing/blob/main/pictures/db_set1.png?raw=true)\n\nOptional: Delete all db data\n```sh\nnpx ts-node scripts/utils/clearDatabase.ts\n```\n\n4. Create wallet setup cache:\n\n```bash\ncd web3_test\nnpx synpress wallet-setup\n```\n![wallet](https://github.com/Thanasornsawan/E2E_blockchain_testing/blob/main/pictures/wallet_setup.gif?raw=true)\n\n5. Setup anvil (for custom network chainId and gas)\n```bash\ncurl -L https://foundry-paradigm.xyz\nfoundryup\n```\n![anvil](https://github.com/Thanasornsawan/E2E_blockchain_testing/blob/main/pictures/setup_anvil.png?raw=true)\n\n### How to run project locally (DApp test cases)\n\n```sh\n# Terminal 1: Start local network (if you want to test single network on local)\nnpx hardhat node\n\n# or use anvil to start 2 networks in the same time by custom script\nnode scripts/utils/run-local-l1-l2.js\n```\n\n![anvil_script1](https://github.com/Thanasornsawan/E2E_blockchain_testing/blob/main/pictures/anvil1.png?raw=true)\n![anvil_script2](https://github.com/Thanasornsawan/E2E_blockchain_testing/blob/main/pictures/anvil2.png?raw=true)\n![anvil_script3](https://github.com/Thanasornsawan/E2E_blockchain_testing/blob/main/pictures/anvil3.png?raw=true)\n\n```sh\n# Terminal 2: Deploy smart contract to both network\nnpx hardhat run scripts/deploy/deploy-l1.ts --network mainnetFork \nnpx hardhat run scripts/deploy/deploy-l2.ts --network optimismFork\n\n# Terminal 3: Start the front-end server (localhost:3000)\ncd frontend \u0026 npm run dev\n\n# Terminal 4: Run test cases with Playwright\nnpm run test:playwright:headless\n\n## or with UI headful\n\nnpm run test:playwright:headful\n```\n\nIf you want to update oracle price manually, run command:\n```sh\nnpx hardhat run scripts/utils/updatePrice.ts --network local\n```\n\nIf you want to simulate time pass for interest rate when borrow on local network, run command: \u003cbr/\u003e\n\ndefault time advance 15 seconds\n```sh\nnpx hardhat run scripts/utils/simulate-time-passage.js --network local\n```\nor simulate time advance 30 day\n\n```sh\nSIMULATE_30_DAYS=true npx hardhat run scripts/utils/simulate-time-passage.js --network local\n```\n\n![e2e](https://github.com/Thanasornsawan/E2E_blockchain_testing/blob/main/pictures/demo.gif?raw=true)\n\n### Topic Node Tesing on smart contract (Defi)\n\nCommand to run all test cases (refer backend test cases folder ./test/network)\n```sh\n# Terminal 1: Start local fork\nnpx hardhat node --fork https://eth-mainnet.alchemyapi.io/v2/YOUR_KEY\n\n# Terminal 2: Run tests\nnpm run test:main_network_fork_report\n```\n### References\n\n- [Playwright](https://playwright.dev/)\n- [Synpress](https://synpress.io/)\n- [MetaMask](https://metamask.io/)\n- [Hardhat](https://hardhat.org/docs)\n- [Anvil](https://book.getfoundry.sh/reference/anvil/)\n\n### Blog\n[QA Blockchain Testing: Smart Contract \u0026 Network Performance with Hardhat](https://medium.com/coinmonks/qa-blockchain-testing-smart-contract-network-performance-with-hardhat-d01e99e331e7) \u003cbr/\u003e\n[Guideline to be QA Web3: Complete E2E DeFi Project with Synpress (Playwright) and Hardhat/Anvil](https://medium.com/coinmonks/guideline-to-be-qa-web3-complete-e2e-defi-project-with-synpress-playwright-and-hardhat-anvil-5e3af494cca4)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthanasornsawan%2Fend_to_end_testing_dapp_playwright_synpress","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthanasornsawan%2Fend_to_end_testing_dapp_playwright_synpress","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthanasornsawan%2Fend_to_end_testing_dapp_playwright_synpress/lists"}