@@ -39,9 +39,23 @@ let tests =
3939 <| fun _ ->
4040 let result = ClientResultHelpers.success " bridge"
4141
42- let matched = ClientResultHelpers.matchClientResult result id ( fun _ -> " problem" )
42+ let mapped =
43+ ClientResultHelpers.mapClientResult result ( fun value -> value + " -mapped" )
4344
44- Expect.equal matched " bridge" " Match should return success value"
45+ let folded = ClientResultHelpers.foldClientResult result id ( fun _ -> " problem" )
46+ let mutable successHandled = false
47+ let mutable failureHandled = false
48+
49+ ClientResultHelpers.handleClientResult result ( fun value -> successHandled <- value = " bridge" ) ( fun _ ->
50+ failureHandled <- true )
51+
52+ match mapped with
53+ | ClientResult.Success value -> Expect.equal value " bridge-mapped" " Map should transform success value"
54+ | ClientResult.Failure _ -> failtest " Expected mapped success"
55+
56+ Expect.equal folded " bridge" " Fold should return success projection"
57+ Expect.isTrue successHandled " Handle should invoke success callback"
58+ Expect.isFalse failureHandled " Handle should not invoke failure callback"
4559 Expect.isTrue ( ClientResultHelpers.isClientSuccess result) " Result should be success"
4660 Expect.isFalse ( ClientResultHelpers.isClientFailure result) " Result should not be failure"
4761 Expect.equal ( ClientResultHelpers.getClientValue result) ( Some " bridge" ) " Value should be available"
@@ -51,11 +65,30 @@ let tests =
5165 testCase " ergonomic helpers expose failure result"
5266 <| fun _ ->
5367 let result : ClientResult < string > = ClientResultHelpers.problem problem
68+ let mutable mapCalled = false
69+
70+ let mapped =
71+ ClientResultHelpers.mapClientResult result ( fun value ->
72+ mapCalled <- true
73+ value + " -mapped" )
74+
75+ let folded =
76+ ClientResultHelpers.foldClientResult result id ( fun actual -> string actual.title)
77+
78+ let mutable successHandled = false
79+ let mutable failureHandled = false
80+
81+ ClientResultHelpers.handleClientResult result ( fun _ -> successHandled <- true ) ( fun actual ->
82+ failureHandled <- actual = problem)
5483
55- let matched =
56- ClientResultHelpers.matchClientResult result id ( fun actual -> string actual.title)
84+ match mapped with
85+ | ClientResult.Success _ -> failtest " Expected mapped failure"
86+ | ClientResult.Failure actual -> Expect.equal actual problem " Map should preserve problem"
5787
58- Expect.equal matched ( string problem.title) " Match should return problem projection"
88+ Expect.isFalse mapCalled " Map should not invoke success mapper for failure"
89+ Expect.equal folded ( string problem.title) " Fold should return problem projection"
90+ Expect.isFalse successHandled " Handle should not invoke success callback"
91+ Expect.isTrue failureHandled " Handle should invoke failure callback"
5992 Expect.isFalse ( ClientResultHelpers.isClientSuccess result) " Result should not be success"
6093 Expect.isTrue ( ClientResultHelpers.isClientFailure result) " Result should be failure"
6194 Expect.equal ( ClientResultHelpers.getClientValue result) None " Value should not be available"
0 commit comments