From 015b80e04665bc9b55e874dfa5701938d9a7cec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Dan?= Date: Sat, 10 Jun 2023 16:58:48 -0400 Subject: [PATCH] test: add e2e tests (#2) --- .github/workflows/deploy.yml | 7 +++--- .github/workflows/test:e2e.yml | 36 +++++++++++++++++++++++++++++ cypress.config.ts | 10 ++++++++ cypress/e2e/home.cy.ts | 30 ++++++++++++++++++++++++ cypress/fixtures/example.json | 5 ++++ cypress/support/commands.ts | 37 +++++++++++++++++++++++++++++ cypress/support/e2e.ts | 20 ++++++++++++++++ cypress/tsconfig.json | 8 +++++++ cypress/videos/home.cy.ts.mp4 | Bin 0 -> 45855 bytes package.json | 2 +- src/components/Content.tsx | 41 +++++++++++++++++---------------- src/components/FaucetForm.tsx | 2 +- src/constants/wordings.ts | 4 ++++ tsconfig.json | 8 ++++++- 14 files changed, 183 insertions(+), 27 deletions(-) create mode 100644 .github/workflows/test:e2e.yml create mode 100644 cypress.config.ts create mode 100644 cypress/e2e/home.cy.ts create mode 100644 cypress/fixtures/example.json create mode 100644 cypress/support/commands.ts create mode 100644 cypress/support/e2e.ts create mode 100644 cypress/tsconfig.json create mode 100644 cypress/videos/home.cy.ts.mp4 create mode 100644 src/constants/wordings.ts diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 570e0b0..bbbbc10 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,12 +1,11 @@ name: Deploy to Github Pages on: push: - pull_request: branches: - main concurrency: - group: "pages" + group: 'pages' cancel-in-progress: true jobs: @@ -19,7 +18,7 @@ jobs: uses: actions/setup-node@v3 with: node-version: 18 - cache: "npm" + cache: 'npm' - name: Install dependencies run: npm ci - name: Build @@ -29,7 +28,7 @@ jobs: - name: Upload artifact uses: actions/upload-pages-artifact@v1 with: - path: "dist" + path: 'dist' deploy: runs-on: ubuntu-latest diff --git a/.github/workflows/test:e2e.yml b/.github/workflows/test:e2e.yml new file mode 100644 index 0000000..9012356 --- /dev/null +++ b/.github/workflows/test:e2e.yml @@ -0,0 +1,36 @@ +name: Run e2e tests +on: + pull_request: + branches: + - main +jobs: + e2e: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup NodeJS + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Run E2E tests + run: npm run test:e2e + + - name: Archive e2e artifacts + uses: actions/upload-artifact@v3 + if: always() + with: + name: e2e-artifacts + path: | + cypress/videos + cypress/screenshots + continue-on-error: true diff --git a/cypress.config.ts b/cypress.config.ts new file mode 100644 index 0000000..e8d7a16 --- /dev/null +++ b/cypress.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'cypress' + +export default defineConfig({ + e2e: { + baseUrl: 'http://localhost:4173', + setupNodeEvents(on, config) { + // implement node event listeners here + }, + }, +}) diff --git a/cypress/e2e/home.cy.ts b/cypress/e2e/home.cy.ts new file mode 100644 index 0000000..c6c4209 --- /dev/null +++ b/cypress/e2e/home.cy.ts @@ -0,0 +1,30 @@ +import { INFO } from '../../src/constants/wordings' + +describe('Home', () => { + beforeEach(() => { + cy.visit('/') + }) + + it('should have Builders Program banner', () => { + cy.get('.ant-alert-banner') + .as('banner') + .find('span') + .contains(INFO.JOIN_BUILDERS_PROGRAM) + .should('exist') + .and('be.visible') + cy.get('@banner') + .find('a') + .as('banner-link') + .should('have.text', INFO.BUILDERS_PROGRAM) + .and( + 'have.attr', + 'href', + 'https://builders.toposware.com/topos-builders-program-v1-0' + ) + .and('not.be.disabled') + }) + + it('should have disabled address input', () => { + cy.get('#faucet_address').should('be.visible').and('be.disabled') + }) +}) diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json new file mode 100644 index 0000000..02e4254 --- /dev/null +++ b/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts new file mode 100644 index 0000000..698b01a --- /dev/null +++ b/cypress/support/commands.ts @@ -0,0 +1,37 @@ +/// +// *********************************************** +// This example commands.ts shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) +// +// declare global { +// namespace Cypress { +// interface Chainable { +// login(email: string, password: string): Chainable +// drag(subject: string, options?: Partial): Chainable +// dismiss(subject: string, options?: Partial): Chainable +// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable +// } +// } +// } \ No newline at end of file diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts new file mode 100644 index 0000000..f80f74f --- /dev/null +++ b/cypress/support/e2e.ts @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/e2e.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands' + +// Alternatively you can use CommonJS syntax: +// require('./commands') \ No newline at end of file diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json new file mode 100644 index 0000000..18edb19 --- /dev/null +++ b/cypress/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["es5", "dom"], + "types": ["cypress", "node"] + }, + "include": ["**/*.ts"] +} diff --git a/cypress/videos/home.cy.ts.mp4 b/cypress/videos/home.cy.ts.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..266681c6f1c9a8565a6be1ec3057aaf577826194 GIT binary patch literal 45855 zcmbrl1yo$kwlLUeaCdFo-Q5BNg1fuBYjAfB?(VK31cDQs;O@cQ^>6asd*{8G_h!vn zv)1X_Qd?_R)v0s38vpFb0RV8oI|O}L4c&}cY#rEH0001tnUkq008sH{ zYhvgEp#EfUYYKF>uy?gF0a_TknF2*!Ep1Fpot%LRPWI+bhPFT>LpwWDCy*wBshzP2 z000I65dA;23{6a&Or4#9mUa%VF8@sy0G_wg?<6JNOpSW!OF=F zWB?l5JDCDmI9WjGCq@v9NmfBzl7Ss4q9z9FGch#=b%@zJc-oknxd2(2nb{avnOT`Z zObZtm2VN#7cXxM2H%k*!dmBSLMtdi7rgyuH7B03nAQ^iH7fX9PXI`MOp^>4n01ME` z)J%XCXkuz)V{dFNz{1PS%M3KMGqmw^HWgs@VB=->U}0ec+L{Vjn0f%6U5!8(C(yy! z6Ql}i^_@%vSQwc>N}vX4Yw2NXqW^A@1*D8uUsj>iFoJ?(O zES*6Zw+FY0u?q+>cC-~>28Cc~;$?4VD!|G@&%y#UGjw**cW}10ba`s>8l($>)BJrGMf z7gHx2Ly!=NZ)D@@Waz1HY;Wse=mMgRL1X0NWN2vzG652FGJKaY1J&NtS%3{_r0?Jf z!YxfeBWI*>W()^v&%ZK)wGk-?Oqd z^#s`#VC7)`7piY-X$K;K&c>#8rpB%=0_@E1VLBPUk11#}S%B1?jP?JMt^nIREnw_q z2DCK-4eWbbAVPqRm5~|f_@0aaGb1Mmb$B=Y7aDp9aPoi{&Mu}70_;Fb2T+wjGXhjZ zkS{|=&;)odC%_*7AdoQ)4~BT_A@8BZ4s|nU?5H|>M&i#d*Sqfq1_ddv-hyNx{&fje zcik~^eMK)_79tx7*fDr#V{d1j1Hg{HtdagDKcFHvmEU%?c^XqOYSp*_wB|S1YUbfn z02Q9!k(9+zZQR$0Q)Bhn(mZOvW20K7X$zLhpe1i-GePY?wSp;=3j}p!dFK55gUKdv+rfuWaOtY2=`2=Rb;aY zuf|uuMCEGW9s+R7zmBfM5l=Qjv zOYK|m5peYz;#-cVZ?n4;BA`rL$KtWdVwKGJ_R{U(Z9j)j^OXJu8G2wfkq{0(-r_TT zGWhn$ze}G6LuuR3jFv@GMNn1P=vLfdniV)kyp|n`yeKPdq-+|I;Ep#gvX-m^#BHqj z0_%-ISzPccrl-F^>wtkO-Oj z?%W&?$$URII7)A!v2$7E*4m5R;YlC)t&6)qWk4UDDd!$XVAHT{8&|l6Ds?G~*H?+y z4MO%s|KaM4vSlXKzpBBp@U;(h)0D6KQPozaccV#{Z^wGjtJ5S-Ju2s`tH_<$vkT;` zat#WK10xd({-qGlphA=+dAILtnAjBmpp-SUVkK$$?OoaLga!Tj#iC02n*j9HvN9pq zY=LS*J)14cKUkiD*n4O72Hm|AtBLaj!t`&u$EBqAZi&({Lnn6$gECR77y`kE`ItDe zY!i|n$`yvvuud{tz%p;Bzh!sv@DcC}k;?rchWVU&v`i5USz~W7uI>U@nx-u!25iukRP+$>o($X>zwi03GL+;Li#B#|r}_TbYUR+%+E2T;WL{bX=42 zN(=fmXrqaH*e$hEX>#HnP`HUJSyzMfWzE0OTMTrUpdl3?hO7(JlaGANF>r=+!b@Mf zKkWB2Z{3G%4L1&r7xk+{F0-wm+qFzMl$b zcGo|?m6=*-)qYCh)5>i3oxJ0OXrGIuMl-%H8xcu6s*=J)A)sluu)O^k?B zOCok$+)wQ=Ema>6Sb`SKb9FsDTcBnX>3B~(t=BC{Qz||OpCz-vS@AQoGW=c@ph@UA zqCz)lu;5y}lxktMeZq7gg0F0h577`piI>kKf}NeqlJ0!tBCUlaoRV2gZ%-P- zBYAs!4(lU?Too%>m7g})bp{sdMlMG>zf?YmzjPzjMQY`rVtO>}qY9DA$?SZg$#~?C-i)@{fb}`xgb(L1Zxi(&%~6adOj<>=0af zxP!1I;WK`N13#z5pU$wZb#(9B3mbl3;XzeXed(rQ5;PVw$EtIq24psdK$qdA>1&3l@5LS$DW5c)3K-N>z#qZ7K7mN z^mf|{nySTRioxYT;j{hveJ3{G(L>{!X}oNEpI#2WozaZXRd+i*1V4^!MrD@Zclsq` z$V}CIUNqmnjJ8-0uYw)aN0+CW^7w6X=;(MmoQekb7p|7*JLCpqHe@6ETuoEqm{>}m zq^5nz`!1Zjb9UIxb5nM8l@aH|JRPk;=3{!dx02OSoN1+p*Ng<5_4 z-{Ej0%=*B%7T`X%II`ho5_101Lbc}ZC-42dfA7HiN70a9SYJlTu@i z!Z%O$_KfsM#OD$VHz629l-B_6Ui*aS934{Qf3Wzm!EZF+iP7eJLJ$@@cF#=TQ+)s= znm*;+H?v-7431k-@vKoS4-H{n2bl5Qr8QdG)?THVm2K8iF=?o&LKS@4 z>KsJzVGFchw=yk!#igWp#J*ADvz9^OV&z(K@V3{cjbIC8=G7IeDYz=NDfq;9c^k=Q zK|_7gSxv0z{Z7T*Y(9MK2ki_sxH+sY?~O_J_vQ=vXHb69jYgn9(7mSiIG8x4=ppm8 z8U^;oj;^~pu=sE`g(i?;nbo6@E68VuA;f-QSRVqca;2-ErDn5iF8Rbq(-^06S4IxZ zT?Kp6B5nD>4-x%d0bRzg0dMYF^R7-3N;E_t5{bpe9FcVE>=Y2-*(jDRuOK(gfjyFN zQ*5gl#&*5Vkm!bh3)0*&_WA4b_3jKHcL4o8@g$}q~8mW~Eelx2b;DIgm}NKM7ygW1y7 zOuKH51GgtNXo8p#VK%E}CM_hy6RzO~M9xFbbTERkT>|(=jzrQ5Cg3C1}ppP;n=zEOAbj%41_-tHBg558RSa4i>rm(ztfJ*xC0+Arx zDy*1PQ|&GH%lYFj3f_*S>ZxJ7u}ZwJQ$TCHOP3t+lWuT>W2soy?Tdd2S2eUqxPYwi z4Y@i-H&Xmg=i6!|($E;G;LG9{IIW)&{*F(hVQMayR&YL~Q2aL@aquu~b)O7f zm_jx~6!w_b{!~pNiV^AOiuUlX()outxWQVwcMd!PZzq#IJ4h;7UP z@BHwvd)sz>#8+R`SNJv_w8*i`H#(J9fq*(_~<9?Jl6sq{}{@sWTVfe;Dl`7Eifm{LLW5KUN1n>{Z+t z@m=Z45B+?9!`yAx?33SXKUQ(CSdm|Yt;w{o{*>E>ZAO(^;9i3VI!!f$s+)H1c|b011rD+_E#U@8pdXU=?>?!Hno^ zm!W;k-v&`diParF(R4an$-@=cP(5-A66py;HrTnEpYtJXs*`S3+X>FjAD1$OosIm{ zNSwq%EAF8OquuKO0AXr5^wYdwX+$%(djr=^q{2%FQS+4V*p4QAg`88a14zR!8@n}Kd; z#QM;bK==Bqv{0Vbh(YNvoL5Dng-(UkF_;S%N)8Hmc2u~?bmH<@#4vjD?Mq#FxNTj3V5n?5+Pzr|L^$1lcbwFZaMJ!G zsxaLt#Qq3E!8cB9mpJbo#22&a!{Aui;9+!xyoH6Cs{pXZN2AgDiE&JHz3u1l*soo5 zCFI~E*nRKPV3E%}JnN;*05Cr>UCr`} z%_CjRUZJ>jXl0DE$?|>@{koB`sHR!EMrS{80cEesTZb;0&5GNy`cUSG8^$JsAziw3 zc75iIBZc9I9_c}i8h^#g-{2tta9j`A41ZoY^lvRF>iFhW)=yrCtJm8;RFqF3XKHpQ zr*Ccf^--&t6QTX#R6HVa)F75%7>KmK+~0KcIFN=B%ar)w^Oefr8uHuIK-MN|vKDR^ zzxoUhg47wcu}CJ>f}# zO=W|AtM*wFa>{?cf2tz6F9rr7$40-3aPD|}*#-splUrlCEVY*uud(=9qiK=_EuVNn zSoSh$7}&56Z=FT*$R>}UST}{2Goid8!4+!3KVbOJVW0j{pl)4&p){ChuwL#w3blry zX%{Gt?;l)m4qWJ^0wc$wr*PbXD@Y9!t}|QKV)DkBU3WDKYf-z zYMmDbtYJI}HXPY-&%j_ctQy^A&r|oyv1pAcB%|p(Quq<$$5CSDATq-dlkPRRFPP-h-xj_z*@0N=+4te-?P*0aLet4 z=(I_P9O_TMYK=&3_*<*(#pc~*!3AvD6lrT3k8u~d~IeKWLd(DlIByg*VJ#x6St;?Pp1sAW`O>L^mo+) zK7aL91p}=uoE|9;09ZbQ%*e3w1^@uvTzy-hKJI>rH6Gzc%3Cfu ze9=Gzkq{85*kWdZS!b5d?*oD`w4ANaJ+MkHXgT>#V}l(mgG{0|8vwxX@%=H517UTm z-a9(;;DbOAtPTKlA<>p40O8;v0O3pk0Mi28XgScE@?FY}kUQca4*-FAk2U`~Rr~@G z{wZ=X>Z8u1W^X#lCra}~jRJYLs6-r?R#LUK(*nZMq#N)v41(>Vaf1V+sh& z55Ih!EZ?p&CU#%TOdBG{v6TNLA<$D?-}QXB+~ELZL-t0B42cz|8GMIVUMJ;)T! z9bJM#qb&s-hlUZm%Yu9jt>mKA7sVJ=cNpD*T%(qHB4VU6lr08qvwgZ|daOLhe)L!E zhS_@X;ScT}g4hjJpM4?ZRB%4!q0QxkOS(=yij-}rH`MZ5G+HT5S7eLG^%C>-{x0$c z@0aMlh6jEDki>&3?JOz=1DIZK!WaKAI5&IffaBNjqcOZ0b6AMn`whxir0#WSjNw4` zsc0hNF2Ys3E3Yg3OSAI%3@>FIdiHruLAyax>xRVsgJIuZadWE-9>JpDv>ML*x!Ks8 zbGw!$M_GB!%O7rWgI?m4)&R2P^(_>v0RXa<8yzAgl|lBPntU`Tu`hzRuO*ZT{qqWC zC*#h$mzF0DovfJ`MZ)bT9kk(c|z4l9<*ICC7zo_ zcp#f5a?is1oCg?1pZ*?m0tni*$506(UaWDH^O#Rqwt9c zO_kBq=<(t&Ga?NcGYWvfh%r{sQihV|TdM0P-6{E0LfX#rlsFhPMvJ9@?e%G((VPyk@@ttSO~%?) zG(uoId(kG-FuP%kw@>jrwaW?@7RM^A{O?yqG`*dYUg$#}htHfYuU(|5anUU=1xeCb z^X@*!JFpqK-|Y?k@P%dkxCBC4hifF>#oy6RWZM6_KTXy2 zg}LTa>GF(Jl{Dh>gL@5%U50g>K;6ZRYl)l4Vah{Th#(G8AO?Iqte6&k0GJ_L4S{pU zGx(zT1v{qf9e|#35JnRs7h1a{4d*scJ$0$eSc=;`=jKiV;26$3ZXRJL_!!bsWSHPR zOY0WVXA@hdbVu?C=6z~|I59&Yr+Lg{6i(&tH#VogoyQk5q^m}7Za?ji)m?)t-B=8T zjh5nwcKcOuwvaFI&)1SB)3z^OQOU7|FD!?@RZ?E1jr4~m~0oCLq{)YlT2 zlC=J$B-VB~KQ%D`4~(1+TAQwBhuXJIPjJ`s{X&CV!dsy)Rz5bbGm03D%N4fbiiHM# zfT6}IWN{Ub=e}vM0RWsyv<}S9F21iQNwi9Vl%ke|h0h)p2Kve9eIjDc5Wi@PnU>rS zgIXXBfWkc3^2$dM{J$ul=7iETIQ?mbu2eNc6H&Y8(z~2L4MD-Fs>4ulJxfgrKC=?X z4d;?txLjVkA5{6+wo^2Gi*!N{R$Ff+>5G@zUS#eyPDEc?(a(3h=qNmxs!ohiX@GuOn1WoNAMV`nSP$RoW&GVG6I0@HSQ`kD2U0C@(rDDoiP2Z;P=ey8*X1CG;(@c7NiE<}H02&Xh_w;fw6 zC0wRUz!w5~1&<~2yT#R4It>!tg_ugv&BCeEh6U#UQ?%KdMq>HnFY88AUy7N-8XVs=-u= zgNBsO%hvVse0mF@9!DyNdH7c%IyX{FE5f101(x2n+2xy1`%feL1)t!aS->}rU*A;WDH)+9 z6LJ*`m4noRKQFu!NEQA002~Ka6JnE zpkElvD6;Vm<=yr*fa4z-a~eACi+4R@VTgn}0GOIT{Vs*+p#g{mu@7+N1OR9!p|VP< z#$?`wd;my$-2f;p!1u41S>^r!0CFDK3g~`QDU9V*QP{-}k^!dxsJMe}CS~B4sw#ea zAeoPOaIqVp(-%Nb`d0!!=s*XP45kQrj4{fCAJ$Y#%>XHZq50GD{f*g^uEOX_7yuwu zfQoYfJze>;7Q4#6f})3%2GpMd04xg7E_LNs;qTEr0*GS#0dP%V+4QtNTkjk}{||+r zGh#Ks;xlbQ+duK`|BVk1?N_-k5F`W2%Ij}d(D4lwN&nqW0ewa7|IJPmZS}wM{Ffcl zUsZSp|IJQd*-?i#4Po7uCQf8_9LVVh?HSQAG?M`f!cuh~5Dfu7;{1iL`#nI=1?C3; zwEoB@UOTud`xgtuEx&mmyuTN6Db~MH)B>A-qhiVLUf(Zpx9fj1xtRWqL4W*rH<-@( zznL1L|HjB7-s5<`5F-C#p{&aiM7`{;^Sp|q000B>!wK#`#N|l5cb~Va~I!u9oTHeStU$bS^rwJa^sD`!U zLI!2U-yt(^!;qw(+BftkL(1=!*49`pWFe_X_a{^N8a}^+@-~=P2gr>rwGh^U>_l?$PSm zr{a3c{m7S}bt4v}4oyPrZ=7#jZ%pU)=M4^x4$ThD86qp7QUDr7azs61-{=A8)~rv{ zlK=&Ohq9`v4Y2qxRxKrvrXfFZgxr&1lrzlBzz4v(>eWf;Sn@^Jdd)*$P%U_c$D+_3 z;0Ih7cK$#r5^xvwemPkCVdNw6(t8k>X8jN^EaJc2_exmQF22s>7&q3ID_NszQo+^p zN{fb=B{G+NaF{c7LmUYPWQEJyLe8x)XC&QbRN7;7I$$VF5mSY9{^XR8@KhzLl@Cp7JnQ;7;eY+>0=_4m7P`x0H1>xN^D~V0^%}j5)h_) zL^Cie3<&3eaRdXGILD|9==PXja6S+NX@i{U#adAMJ};I<-17GS znB*>HkHZwx{sdjg1f*(8cdklu2>@*+=XOB^BMnZVW5M~y#>ZM%-sxt%C` zn?wYQ*MwH^e^GXH#Kv_>WpTllvL*P2PtBGo)(q!7WYn%O=1fxYM@)P=bfg@#odLdp z^$QS?+@p08_6gj3OU-Pvw8SV9qau-+RDPH3zkS{by`iT^Oc8bSVJ zL^3Sci+;WVz&cjGXQmaSC_3nXAuk<)4$(2Fls+Ubz!5o7V>;GRnol328`5$ZWgy}p zfb{7+Kz#zxPcqEx_Ji7OcDkgiGKTE9oO-}D5~+`ZT*0i#P{OiZoj0L`=WkHZE}(lk?B6j9erLc?zqg>h8v=l80BS+6ML;Mm2!#ag@eqKN_Xg#C zHwXW7eeEa=e5VNv{Q-b(?^5+a9N~9*=JNhKhy(pscjKKy1|p%}5y0QI0qh0

33; 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 D-p^wF literal 0 HcmV?d00001 diff --git a/package.json b/package.json index b124982..b729b1a 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", "start": "tsc && vite build --mode development --watch --sourcemap true", - "test:e2e": "env-cmd --silent cypress run --browser chrome --headed" + "test:e2e": "start-server-and-test 'npm run preview' http-get://localhost:4173 'cypress run'" }, "dependencies": { "@ant-design/icons": "^5.0.1", diff --git a/src/components/Content.tsx b/src/components/Content.tsx index d06fc34..fdc953f 100644 --- a/src/components/Content.tsx +++ b/src/components/Content.tsx @@ -1,35 +1,36 @@ -import { Alert, Button, Result, Space, Typography } from "antd"; +import { Alert, Button, Result, Space, Typography } from 'antd' -import logo from "/logo.svg"; -import { useCallback, useContext, useMemo } from "react"; -import useTracingCreateSpan from "../hooks/useTracingCreateSpan"; -import { TracingContext } from "../contexts/tracing"; +import logo from '/logo.svg' +import { useCallback, useContext, useMemo } from 'react' +import useTracingCreateSpan from '../hooks/useTracingCreateSpan' +import { TracingContext } from '../contexts/tracing' +import { INFO } from '../constants/wordings' -const { Text } = Typography; +const { Text } = Typography interface Props { - children: React.ReactNode; + children: React.ReactNode } const Content = ({ children }: Props) => { - const { rootSpan } = useContext(TracingContext); + const { rootSpan } = useContext(TracingContext) const span = useMemo( - () => useTracingCreateSpan("show-content", rootSpan), + () => useTracingCreateSpan('show-content', rootSpan), [rootSpan] - ); + ) const handleClick = useCallback(() => { - span.addEvent("click on builders program link"); - span.end(); - rootSpan?.end(); - }, [span]); + span.addEvent('click on builders program link') + span.end() + rootSpan?.end() + }, [span]) return ( - Wanna be part of something cool landing soon? + {INFO.JOIN_BUILDERS_PROGRAM} 👉 @@ -38,9 +39,9 @@ const Content = ({ children }: Props) => { target="_blank" type="link" onClick={handleClick} - style={{ paddingLeft: "0.2rem", paddingRight: "0.2rem" }} + style={{ paddingLeft: '0.2rem', paddingRight: '0.2rem' }} > - Builders Program + {INFO.BUILDERS_PROGRAM} @@ -56,7 +57,7 @@ const Content = ({ children }: Props) => { extra={[

]} /> - ); -}; + ) +} -export default Content; +export default Content diff --git a/src/components/FaucetForm.tsx b/src/components/FaucetForm.tsx index 91bbac9..8087b8b 100644 --- a/src/components/FaucetForm.tsx +++ b/src/components/FaucetForm.tsx @@ -16,7 +16,7 @@ const FaucetForm = () => { return (