@@ -452,7 +452,20 @@ let notifyFailure (PostId _) (UserId uId) =
452452 return Ok()
453453 }
454454
455- let traverseAsyncResultATests =
455+ let traverseTaskResultATests =
456+ let notifyNewPostSuccess ( PostId post ) ( UserId user ) = TaskResult.ok ( post, user)
457+
458+ let notifyNewPostFailure ( PostId _ ) ( UserId uId ) = TaskResult.error $" error: %O {uId}"
459+
460+ let notifyFailure ( PostId _ ) ( UserId uId ) =
461+ if
462+ uId = userId1
463+ || uId = userId3
464+ then
465+ TaskResult.error $" error: %O {uId}"
466+ else
467+ TaskResult.ok ()
468+
456469 let userIds =
457470 seq {
458471 userId1
@@ -462,15 +475,17 @@ let traverseAsyncResultATests =
462475 }
463476 |> Seq.map UserId
464477
465- testList " Seq.traverseAsyncResultA Tests" [
466- testCaseAsync " traverseAsyncResultA with a sequence of valid data"
478+ testList " Seq.traverseTaskResultA Tests" [
479+ testCaseAsync " traverseTaskResultA with a sequence of valid data"
467480 <| async {
468481 let expected =
469482 userIds
470483 |> Seq.map ( fun ( UserId user ) -> ( newPostId, user))
471484 |> Seq.toArray
472485
473- let! actual = Seq.traverseAsyncResultA ( notifyNewPostSuccess ( PostId newPostId)) userIds
486+ let! actual =
487+ Seq.traverseTaskResultA ( notifyNewPostSuccess ( PostId newPostId)) userIds
488+ |> Async.AwaitTask
474489
475490 let actual = Expect.wantOk actual " Expected result to be Ok"
476491
@@ -484,7 +499,9 @@ let traverseAsyncResultATests =
484499 sprintf " error: %s " ( userId3.ToString())
485500 |]
486501
487- let! actual = Seq.traverseAsyncResultA ( notifyFailure ( PostId newPostId)) userIds
502+ let! actual =
503+ Seq.traverseTaskResultA ( notifyFailure ( PostId newPostId)) userIds
504+ |> Async.AwaitTask
488505
489506 let actual = Expect.wantError actual " Expected result to be Error"
490507
@@ -533,6 +550,46 @@ let sequenceAsyncResultMTests =
533550
534551#if ! FABLE_ COMPILER
535552
553+ let traverseAsyncResultATests =
554+ let userIds =
555+ seq {
556+ userId1
557+ userId2
558+ userId3
559+ userId4
560+ }
561+ |> Seq.map UserId
562+
563+ testList " Seq.traverseAsyncResultA Tests" [
564+ testCaseAsync " traverseAsyncResultA with a sequence of valid data"
565+ <| async {
566+ let expected =
567+ userIds
568+ |> Seq.map ( fun ( UserId user ) -> ( newPostId, user))
569+ |> Seq.toArray
570+
571+ let! actual = Seq.traverseAsyncResultA ( notifyNewPostSuccess ( PostId newPostId)) userIds
572+
573+ let actual = Expect.wantOk actual " Expected result to be Ok"
574+
575+ Expect.equal actual expected " Should have a sequence of valid data"
576+ }
577+
578+ testCaseAsync " traverseResultA with few invalid data"
579+ <| async {
580+ let expected = [|
581+ sprintf " error: %s " ( userId1.ToString())
582+ sprintf " error: %s " ( userId3.ToString())
583+ |]
584+
585+ let! actual = Seq.traverseAsyncResultA ( notifyFailure ( PostId newPostId)) userIds
586+
587+ let actual = Expect.wantError actual " Expected result to be Error"
588+
589+ Expect.equal actual expected " Should have a sequence of errors"
590+ }
591+ ]
592+
536593let sequenceTaskResultMTests =
537594 let notifyNewPostSuccess ( PostId post ) ( UserId user ) = TaskResult.ok ( post, user)
538595
@@ -672,6 +729,58 @@ let sequenceAsyncResultATests =
672729 ]
673730
674731#if ! FABLE_ COMPILER
732+ let sequenceTaskResultATests =
733+ let notifyNewPostSuccess ( PostId post ) ( UserId user ) = TaskResult.ok ( post, user)
734+ let notifyFailure ( PostId _ ) ( UserId uId ) =
735+ if
736+ uId = userId1
737+ || uId = userId3
738+ then
739+ TaskResult.error $" error: %O {uId}"
740+ else
741+ TaskResult.ok ()
742+
743+ let userIds =
744+ seq {
745+ userId1
746+ userId2
747+ userId3
748+ userId4
749+ }
750+ |> Seq.map UserId
751+
752+ testList " Seq.sequenceTaskResultA Tests" [
753+ testCaseAsync " sequenceTaskResultA with a sequence of valid data"
754+ <| async {
755+ let expected =
756+ userIds
757+ |> Seq.map ( fun ( UserId user ) -> ( newPostId, user))
758+ |> Seq.toArray
759+
760+ let actual =
761+ Seq.map ( notifyNewPostSuccess ( PostId newPostId)) userIds
762+ |> Seq.sequenceTaskResultA
763+
764+ do ! Expect.hasTaskOkValue expected actual |> Async.AwaitTask
765+ }
766+
767+ testCaseAsync " sequenceTaskResultA with few invalid data"
768+ <| async {
769+ let expected = [|
770+ sprintf " error: %s " ( userId1.ToString())
771+ sprintf " error: %s " ( userId3.ToString())
772+ |]
773+
774+ let! actual =
775+ Seq.map ( notifyFailure ( PostId newPostId)) userIds
776+ |> Seq.sequenceTaskResultA
777+ |> Async.AwaitTask
778+
779+ let actual = Expect.wantError actual " Expected result to be Error"
780+ Expect.equal actual expected " Should have a sequence of errors"
781+ }
782+ ]
783+
675784let traverseVOptionMTests =
676785 testList " Seq.traverseVOptionM Tests" [
677786 let tryTweetVOption x =
@@ -797,11 +906,13 @@ let allTests =
797906 traverseAsyncResultATests
798907 sequenceAsyncResultMTests
799908#if ! FABLE_ COMPILER
909+ traverseTaskResultATests
800910 sequenceTaskResultMTests
801911#endif
802912 sequenceAsyncOptionMTests
803913 sequenceAsyncResultATests
804914#if ! FABLE_ COMPILER
915+ sequenceTaskResultATests
805916 traverseVOptionMTests
806917 sequenceVOptionMTests
807918#endif
0 commit comments