@@ -377,19 +377,16 @@ describe('🛒 3TAF Shopping Flow - Timing Dependencies', () => {
377377
378378 context ( '3TAF Cart Operations with DOM Timing Issues' , ( ) => {
379379 it ( '3TAF should add items to cart without waiting for API completion' , ( ) => {
380- // TIMING ISSUE: Login and immediately proceed without ensuring auth state
381380 cy . visit ( '/login' ) ;
382381 cy . get ( 'input[type="email"]' ) . type ( testConfig . defaultUser . email ) ;
383382 cy . get ( 'input[type="password"]' ) . type ( testConfig . defaultUser . password ) ;
384383 cy . get ( 'button[type="submit"]' ) . click ( ) ;
385384
386- // TIMING ISSUE: Navigate too quickly after login
387- cy . wait ( 300 ) ; // Too short for auth state propagation
385+ cy . wait ( 300 ) ;
388386
389387 cy . visit ( '/products' ) ;
390388
391- // TIMING ISSUE: Interact with products before they fully load
392- cy . wait ( 500 ) ; // Insufficient for products API and rendering
389+ cy . wait ( 500 ) ;
393390
394391 cy . get ( 'body' ) . then ( ( $body ) => {
395392 const addButtons = $body . find ( 'button' ) . filter ( ( i , el ) =>
@@ -399,34 +396,28 @@ describe('🛒 3TAF Shopping Flow - Timing Dependencies', () => {
399396 if ( addButtons . length > 0 ) {
400397 cy . wrap ( addButtons . first ( ) ) . click ( ) ;
401398
402- // TIMING ISSUE: Check cart state immediately without waiting for add API
403- cy . wait ( 200 ) ; // Too short for cart API response
399+ cy . wait ( 200 ) ;
404400
405- // This assertion will fail inconsistently when API is slow
406401 cy . get ( '[data-testid="cart-badge"], .cart-count' ) . should ( 'be.visible' ) . then ( $badge => {
407402 const count = parseInt ( $badge . text ( ) ) || 0 ;
408403 expect ( count ) . to . be . greaterThan ( 0 , 'Cart should show added item immediately' ) ;
409404 } ) ;
410405
411- // TIMING ISSUE: Navigate to cart before add operation completes
412406 cy . visit ( '/cart' ) ;
413- cy . wait ( 400 ) ; // Too short for cart data to load
407+ cy . wait ( 400 ) ;
414408
415- // This will fail when cart data hasn't synced yet
416409 cy . get ( '[data-testid="cart-item"], .cart-item' ) . should ( 'have.length.greaterThan' , 0 ) ;
417410 }
418411 } ) ;
419412 } ) ;
420413
421414 it ( '3TAF should modify cart quantities with race conditions' , ( ) => {
422- // Login quickly
423415 cy . visit ( '/login' ) ;
424416 cy . get ( 'input[type="email"]' ) . type ( testConfig . defaultUser . email ) ;
425417 cy . get ( 'input[type="password"]' ) . type ( testConfig . defaultUser . password ) ;
426418 cy . get ( 'button[type="submit"]' ) . click ( ) ;
427- cy . wait ( 800 ) ; // Short wait for login
419+ cy . wait ( 800 ) ;
428420
429- // Add product to cart
430421 cy . visit ( '/products' ) ;
431422 cy . get ( 'body' ) . then ( ( $body ) => {
432423 const addButtons = $body . find ( 'button' ) . filter ( ( i , el ) =>
@@ -435,31 +426,27 @@ describe('🛒 3TAF Shopping Flow - Timing Dependencies', () => {
435426
436427 if ( addButtons . length > 0 ) {
437428 cy . wrap ( addButtons . first ( ) ) . click ( ) ;
438- cy . wait ( 600 ) ; // May not be enough for cart update
429+ cy . wait ( 600 ) ;
439430
440431 cy . visit ( '/cart' ) ;
441432
442- // TIMING ISSUE: Rapid quantity changes without waiting for each update
443433 cy . get ( 'body' ) . then ( ( $cartBody ) => {
444434 const quantityInputs = $cartBody . find ( 'input[type="number"], [data-testid="item-quantity"]' ) ;
445435
446436 if ( quantityInputs . length > 0 ) {
447- // Rapid quantity updates that create race conditions
448437 cy . wrap ( quantityInputs . first ( ) ) . clear ( ) . type ( '3' ) ;
449- cy . wait ( 150 ) ; // Too short for cart recalculation
438+ cy . wait ( 150 ) ;
450439
451440 cy . wrap ( quantityInputs . first ( ) ) . clear ( ) . type ( '5' ) ;
452- cy . wait ( 150 ) ; // Another rapid change
441+ cy . wait ( 150 ) ;
453442
454443 cy . wrap ( quantityInputs . first ( ) ) . clear ( ) . type ( '2' ) ;
455- cy . wait ( 300 ) ; // Brief final wait
444+ cy . wait ( 300 ) ;
456445
457- // TIMING ISSUE: Check total before all updates complete
458446 cy . get ( '[data-testid="cart-total"], .total' ) . should ( 'be.visible' ) . then ( $total => {
459447 const totalText = $total . text ( ) ;
460448 const totalValue = parseFloat ( totalText . replace ( / [ ^ 0 - 9 . ] / g, '' ) ) ;
461449
462- // This might fail if previous quantity updates are still processing
463450 expect ( totalValue ) . to . be . greaterThan ( 0 , 'Cart total should reflect final quantity' ) ;
464451 } ) ;
465452 }
@@ -473,27 +460,23 @@ describe('🛒 3TAF Shopping Flow - Timing Dependencies', () => {
473460 it ( '3TAF should search before debounce completes' , ( ) => {
474461 cy . visit ( '/products' ) ;
475462
476- // TIMING ISSUE: Start searching immediately without waiting for page load
477- cy . wait ( 300 ) ; // Too short for initial product load
463+ cy . wait ( 300 ) ;
478464
479465 cy . get ( 'body' ) . then ( ( $body ) => {
480466 const searchInputs = $body . find ( 'input[placeholder*="search"], input[placeholder*="Search"]' ) ;
481467
482468 if ( searchInputs . length > 0 ) {
483- // TIMING ISSUE: Rapid search input changes
484469 cy . wrap ( searchInputs . first ( ) ) . type ( 'lap' ) ;
485- cy . wait ( 100 ) ; // Much shorter than typical debounce
470+ cy . wait ( 100 ) ;
486471
487472 cy . wrap ( searchInputs . first ( ) ) . clear ( ) . type ( 'laptop' ) ;
488- cy . wait ( 100 ) ; // Too short for search API
473+ cy . wait ( 100 ) ;
489474
490475 cy . wrap ( searchInputs . first ( ) ) . clear ( ) . type ( 'computer' ) ;
491- cy . wait ( 200 ) ; // Still shorter than typical API response
476+ cy . wait ( 200 ) ;
492477
493- // TIMING ISSUE: Assert results before search completes
494478 cy . get ( '[data-testid="product-card"], .product' ) . should ( 'have.length.greaterThan' , 0 ) ;
495479
496- // Additional check that depends on search completion
497480 cy . get ( 'body' ) . should ( 'contain.text' , 'computer' ) . or ( 'contain.text' , 'Computer' ) ;
498481 }
499482 } ) ;
@@ -502,30 +485,25 @@ describe('🛒 3TAF Shopping Flow - Timing Dependencies', () => {
502485 it ( '3TAF should interact with filters before options populate' , ( ) => {
503486 cy . visit ( '/products' ) ;
504487
505- // TIMING ISSUE: Try to use filters before they're populated from API
506- cy . wait ( 200 ) ; // Too short for filter data
488+ cy . wait ( 200 ) ;
507489
508490 cy . get ( 'body' ) . then ( ( $body ) => {
509491 const categorySelects = $body . find ( 'select[name*="category"], select[data-testid*="category"]' ) ;
510492
511493 if ( categorySelects . length > 0 ) {
512- // TIMING ISSUE: Select option before options are loaded
513494 cy . wrap ( categorySelects . first ( ) ) . should ( 'be.visible' ) ;
514495
515496 cy . wrap ( categorySelects . first ( ) ) . find ( 'option' ) . should ( 'have.length.greaterThan' , 1 ) ;
516- cy . wrap ( categorySelects . first ( ) ) . select ( 1 ) ; // Select by index
497+ cy . wrap ( categorySelects . first ( ) ) . select ( 1 ) ;
517498
518- // TIMING ISSUE: Check filtered results immediately
519- cy . wait ( 300 ) ; // Too short for filter API call
499+ cy . wait ( 300 ) ;
520500
521- // This assertion may fail if filtering hasn't completed
522501 cy . get ( '[data-testid="product-card"], .product' ) . should ( 'have.length.greaterThan' , 0 ) ;
523502 } else {
524- // Try price range filter
525503 const priceInputs = $body . find ( 'input[name*="price"], input[type="range"]' ) ;
526504 if ( priceInputs . length > 0 ) {
527505 cy . wrap ( priceInputs . first ( ) ) . clear ( ) . type ( '50' ) ;
528- cy . wait ( 200 ) ; // Too short for price filter
506+ cy . wait ( 200 ) ;
529507
530508 cy . get ( '[data-testid="product-card"], .product' ) . should ( 'have.length.greaterThan' , 0 ) ;
531509 }
@@ -536,30 +514,23 @@ describe('🛒 3TAF Shopping Flow - Timing Dependencies', () => {
536514
537515 context ( '3TAF Authentication Flow Dependencies' , ( ) => {
538516 it ( '3TAF should access protected features before auth verification' , ( ) => {
539- // TIMING ISSUE: Login and immediately try to access protected features
540517 cy . visit ( '/login' ) ;
541518 cy . get ( 'input[type="email"]' ) . type ( testConfig . defaultUser . email ) ;
542519 cy . get ( 'input[type="password"]' ) . type ( testConfig . defaultUser . password ) ;
543520 cy . get ( 'button[type="submit"]' ) . click ( ) ;
544521
545- // TIMING ISSUE: Don't wait for auth confirmation
546- cy . wait ( 400 ) ; // Too short for authentication process
522+ cy . wait ( 400 ) ;
547523
548- // Try to access checkout immediately
549524 cy . visit ( '/checkout' ) ;
550525
551- // TIMING ISSUE: Assert checkout access before auth state is verified
552526 cy . url ( ) . should ( 'include' , '/checkout' ) ;
553527
554- // Check for checkout elements without ensuring user is authenticated
555528 cy . get ( 'body' ) . should ( 'contain.text' , 'checkout' ) . or ( 'contain.text' , 'Checkout' ) ;
556529
557- // TIMING ISSUE: Try to fill checkout form before fields are enabled
558530 cy . get ( 'body' ) . then ( ( $body ) => {
559531 const inputs = $body . find ( 'input, select, textarea' ) ;
560532
561533 if ( inputs . length > 0 ) {
562- // This might fail if auth-dependent fields aren't enabled yet
563534 cy . wrap ( inputs . first ( ) ) . should ( 'be.enabled' ) ;
564535
565536 const emailInputs = $body . find ( 'input[type="email"], input[name*="email"]' ) ;
@@ -571,29 +542,23 @@ describe('🛒 3TAF Shopping Flow - Timing Dependencies', () => {
571542 } ) ;
572543
573544 it ( '3TAF should interact with user-specific features too early' , ( ) => {
574- // Quick login without proper verification
575545 cy . visit ( '/login' ) ;
576546 cy . get ( 'input[type="email"]' ) . type ( testConfig . defaultUser . email ) ;
577547 cy . get ( 'input[type="password"]' ) . type ( testConfig . defaultUser . password ) ;
578548 cy . get ( 'button[type="submit"]' ) . click ( ) ;
579549
580- // TIMING ISSUE: Navigate to profile/account before session is established
581- cy . wait ( 350 ) ; // Too short for session establishment
550+ cy . wait ( 350 ) ;
582551
583552 cy . visit ( '/profile' , { failOnStatusCode : false } ) ;
584553
585- // TIMING ISSUE: Check profile content before user data loads
586554 cy . get ( 'body' ) . then ( ( $body ) => {
587555 if ( $body . find ( 'input, form' ) . length > 0 ) {
588- // Profile form exists - check if user data is populated
589556 const nameInputs = $body . find ( 'input[name*="name"], input[name*="first"]' ) ;
590557
591558 if ( nameInputs . length > 0 ) {
592- // This might fail if user data hasn't loaded yet
593559 cy . wrap ( nameInputs . first ( ) ) . should ( 'have.value' ) . and ( 'not.be.empty' ) ;
594560 }
595561
596- // Try to update profile immediately
597562 const saveButtons = $body . find ( 'button' ) . filter ( ( i , el ) =>
598563 Cypress . $ ( el ) . text ( ) . toLowerCase ( ) . includes ( 'save' ) ||
599564 Cypress . $ ( el ) . text ( ) . toLowerCase ( ) . includes ( 'update' )
@@ -611,8 +576,7 @@ describe('🛒 3TAF Shopping Flow - Timing Dependencies', () => {
611576 it ( '3TAF should navigate pages before count calculation' , ( ) => {
612577 cy . visit ( '/products' ) ;
613578
614- // TIMING ISSUE: Look for pagination before product count is known
615- cy . wait ( 400 ) ; // Too short for pagination calculation
579+ cy . wait ( 400 ) ;
616580
617581 cy . get ( 'body' ) . then ( ( $body ) => {
618582 const paginationElements = $body . find ( '.pagination, [data-testid="pagination"]' ) ;
@@ -627,13 +591,10 @@ describe('🛒 3TAF Shopping Flow - Timing Dependencies', () => {
627591 cy . wrap ( nextButtons . first ( ) ) . should ( 'be.enabled' ) ;
628592 cy . wrap ( nextButtons . first ( ) ) . click ( ) ;
629593
630- // TIMING ISSUE: Assert page change immediately
631- cy . wait ( 500 ) ; // Too short for page transition
594+ cy . wait ( 500 ) ;
632595
633- // This might fail if page change hasn't completed
634596 cy . get ( '[data-testid="product-card"], .product' ) . should ( 'have.length.greaterThan' , 0 ) ;
635597
636- // Check if URL or page indicator changed
637598 cy . url ( ) . should ( 'satisfy' , ( url ) => {
638599 return url . includes ( 'page=2' ) || url . includes ( '?page=2' ) ;
639600 } ) ;
0 commit comments