@@ -395,4 +395,140 @@ mod tests {
395
395
396
396
cleanup_env ( ) ;
397
397
}
398
+
399
+ #[ test]
400
+ fn test_execute_main_logic_with_invalid_language_env ( ) {
401
+ initialize ( ) ;
402
+ cleanup_env ( ) ;
403
+ env:: set_var ( "LANGUAGE" , "invalid-lang" ) ;
404
+
405
+ let rt = Runtime :: new ( ) . unwrap ( ) ;
406
+ let result = rt. block_on ( async {
407
+ let run_result = mock_run_ok ( ) ;
408
+ match run_result {
409
+ Ok ( _) => mock_translate_success (
410
+ "invalid-lang" ,
411
+ "main_logger_msg" ,
412
+ ) ,
413
+ Err ( e) => Err ( e) ,
414
+ }
415
+ } ) ;
416
+
417
+ assert ! ( result. is_ok( ) ) ;
418
+ assert_eq ! ( result. unwrap( ) , "Success message in invalid-lang" ) ;
419
+
420
+ cleanup_env ( ) ;
421
+ }
422
+
423
+ #[ test]
424
+ fn test_execute_main_logic_run_and_translate_failures ( ) {
425
+ initialize ( ) ;
426
+ cleanup_env ( ) ;
427
+
428
+ let rt = Runtime :: new ( ) . unwrap ( ) ;
429
+
430
+ let result = rt. block_on ( async {
431
+ let run_result = mock_run_err ( ) ;
432
+ match run_result {
433
+ Ok ( _) => mock_translate_failure ( "" , "main_logger_msg" ) ,
434
+ Err ( e) => {
435
+ Err ( format ! ( "Run and translate failed: {}" , e) )
436
+ }
437
+ }
438
+ } ) ;
439
+
440
+ assert ! ( result. is_err( ) ) ;
441
+ assert_eq ! (
442
+ result. unwrap_err( ) ,
443
+ "Run and translate failed: Site generation failed"
444
+ ) ;
445
+
446
+ cleanup_env ( ) ;
447
+ }
448
+
449
+ #[ test]
450
+ fn test_execute_main_logic_with_unsupported_language ( ) {
451
+ initialize ( ) ;
452
+ cleanup_env ( ) ;
453
+ env:: set_var ( "LANGUAGE" , "unsupported-lang" ) ;
454
+
455
+ let rt = Runtime :: new ( ) . unwrap ( ) ;
456
+ let result = rt. block_on ( async {
457
+ let run_result = mock_run_ok ( ) ;
458
+ match run_result {
459
+ Ok ( _) => mock_translate_failure (
460
+ "unsupported-lang" ,
461
+ "main_logger_msg" ,
462
+ ) ,
463
+ Err ( e) => Err ( e) ,
464
+ }
465
+ } ) ;
466
+
467
+ assert ! ( result. is_err( ) ) ;
468
+ assert_eq ! ( result. unwrap_err( ) , "Translation error" ) ;
469
+
470
+ cleanup_env ( ) ;
471
+ }
472
+
473
+ #[ test]
474
+ fn test_concurrent_translate_with_mixed_results ( ) {
475
+ initialize ( ) ;
476
+ cleanup_env ( ) ;
477
+ let rt = Runtime :: new ( ) . unwrap ( ) ;
478
+
479
+ let languages = vec ! [ "en" , "fr" , "error-lang" , "es" , "de" ] ;
480
+ let futures: Vec < _ > = languages
481
+ . into_iter ( )
482
+ . map ( |lang| async move {
483
+ if lang == "error-lang" {
484
+ mock_translate_failure ( lang, "main_logger_msg" )
485
+ } else {
486
+ mock_translate_success ( lang, "main_logger_msg" )
487
+ }
488
+ } )
489
+ . collect ( ) ;
490
+
491
+ let results = rt. block_on ( async {
492
+ let mut results = vec ! [ ] ;
493
+ for future in futures {
494
+ results. push ( future. await ) ;
495
+ }
496
+ results
497
+ } ) ;
498
+
499
+ assert ! ( results[ 0 ] . is_ok( ) ) ;
500
+ assert_eq ! (
501
+ results[ 0 ] . as_ref( ) . unwrap( ) ,
502
+ "Success message in en"
503
+ ) ;
504
+
505
+ assert ! ( results[ 1 ] . is_ok( ) ) ;
506
+ assert_eq ! (
507
+ results[ 1 ] . as_ref( ) . unwrap( ) ,
508
+ "Success message in fr"
509
+ ) ;
510
+
511
+ assert ! ( results[ 2 ] . is_err( ) ) ;
512
+ assert_eq ! (
513
+ results[ 2 ] . as_ref( ) . err( ) ,
514
+ Some ( & "Translation error" . to_string( ) )
515
+ ) ;
516
+
517
+ cleanup_env ( ) ;
518
+ }
519
+
520
+ #[ test]
521
+ fn test_translate_with_empty_key ( ) {
522
+ initialize ( ) ;
523
+ cleanup_env ( ) ;
524
+
525
+ let rt = Runtime :: new ( ) . unwrap ( ) ;
526
+ let result =
527
+ rt. block_on ( async { mock_translate_failure ( "en" , "" ) } ) ;
528
+
529
+ assert ! ( result. is_err( ) ) ;
530
+ assert_eq ! ( result. unwrap_err( ) , "Translation error" ) ;
531
+
532
+ cleanup_env ( ) ;
533
+ }
398
534
}
0 commit comments