From bfde3e156c27a93fc89627eb4f63d941fa5975e5 Mon Sep 17 00:00:00 2001 From: Alexander Soudarikov Date: Sun, 12 Jun 2022 03:19:11 +0300 Subject: [PATCH 1/3] Bugfix: Fix incorrect forwarding for common root at the same level --- src/Saturn/Router.fs | 2 +- tests/Saturn.UnitTests/RouterTests.fs | 37 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/Saturn/Router.fs b/src/Saturn/Router.fs index 10ca8118..a16cb8be 100644 --- a/src/Saturn/Router.fs +++ b/src/Saturn/Router.fs @@ -232,8 +232,8 @@ module Router = for e in deletesf do yield DELETE >=> e - yield! forwards yield! forwardsf + yield! forwards if state.NotFoundHandler.IsSome then siteMap.NotFound () yield state.NotFoundHandler.Value diff --git a/tests/Saturn.UnitTests/RouterTests.fs b/tests/Saturn.UnitTests/RouterTests.fs index f159a5cc..7454142a 100644 --- a/tests/Saturn.UnitTests/RouterTests.fs +++ b/tests/Saturn.UnitTests/RouterTests.fs @@ -111,3 +111,40 @@ let caseInsensitiveTest = ] + +let wsId = System.Guid.NewGuid() +let root = "roots" + +let testForwardingRouter = + router { + forward $"/{root}" (fun next context -> + text $"{root}" next context + ) + forwardf "/roots/%O" (fun id next context -> + text (sprintf "roots/%O" id) next context + ) + } + +[] +let forwardingTests = + testList "Common root forwarding tests" [ + testCase "FORWARD to `/WORKSPACES` returns `workspaces`" <| fun _ -> + let ctx = getEmptyContext "FORWARD" $"/{root}" + let expected = root + let result = testForwardingRouter next ctx |> runTask + match result with + | None -> failtestf "Result was expected to be %s" expected + | Some ctx -> + let body = (getBody ctx) + Expect.equal body expected "Result should be equal" + + testCase $"FORWARD to `/WORKSPACES/{wsId}` returns `workspaces`" <| fun _ -> + let ctx = getEmptyContext "FORWARD" $"/{root}/{wsId}" + let expected = $"{root}/{wsId}" + let result = testForwardingRouter next ctx |> runTask + match result with + | None -> failtestf "Result was expected to be %s" expected + | Some ctx -> + let body = (getBody ctx) + Expect.equal body expected "Result should be equal" + ] From 9e9bf8d662a426c3a5cdc76167c2a9897707d70b Mon Sep 17 00:00:00 2001 From: Alexander Soudarikov Date: Sun, 12 Jun 2022 03:22:07 +0300 Subject: [PATCH 2/3] Fix typo --- tests/Saturn.UnitTests/RouterTests.fs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Saturn.UnitTests/RouterTests.fs b/tests/Saturn.UnitTests/RouterTests.fs index 7454142a..8c1256d8 100644 --- a/tests/Saturn.UnitTests/RouterTests.fs +++ b/tests/Saturn.UnitTests/RouterTests.fs @@ -112,7 +112,7 @@ let caseInsensitiveTest = ] -let wsId = System.Guid.NewGuid() +let rootId = System.Guid.NewGuid() let root = "roots" let testForwardingRouter = @@ -128,7 +128,7 @@ let testForwardingRouter = [] let forwardingTests = testList "Common root forwarding tests" [ - testCase "FORWARD to `/WORKSPACES` returns `workspaces`" <| fun _ -> + testCase "FORWARD to `/ROOTS` returns `roots`" <| fun _ -> let ctx = getEmptyContext "FORWARD" $"/{root}" let expected = root let result = testForwardingRouter next ctx |> runTask @@ -138,9 +138,9 @@ let forwardingTests = let body = (getBody ctx) Expect.equal body expected "Result should be equal" - testCase $"FORWARD to `/WORKSPACES/{wsId}` returns `workspaces`" <| fun _ -> - let ctx = getEmptyContext "FORWARD" $"/{root}/{wsId}" - let expected = $"{root}/{wsId}" + testCase $"FORWARD to `/ROOTS/{rootId}` returns `roots/{rootId}`" <| fun _ -> + let ctx = getEmptyContext "FORWARD" $"/{root}/{rootId}" + let expected = $"{root}/{rootId}" let result = testForwardingRouter next ctx |> runTask match result with | None -> failtestf "Result was expected to be %s" expected From fbbd6bad1164d09c500685073acd4afaf896b493 Mon Sep 17 00:00:00 2001 From: Alexander Soudarikov Date: Sun, 12 Jun 2022 13:57:13 +0300 Subject: [PATCH 3/3] Reorganize order of sequences in chooser --- src/Saturn/Router.fs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Saturn/Router.fs b/src/Saturn/Router.fs index a16cb8be..15e9d2d7 100644 --- a/src/Saturn/Router.fs +++ b/src/Saturn/Router.fs @@ -207,30 +207,30 @@ module Router = let lst = choose [ - for e in gets do - yield GET >=> e for e in getsf do yield GET >=> e + for e in gets do + yield GET >=> e - for e in posts do - yield POST >=> e for e in postsf do yield POST >=> e + for e in posts do + yield POST >=> e - for e in patches do - yield PATCH >=> e for e in patchesf do yield PATCH >=> e + for e in patches do + yield PATCH >=> e - for e in puts do - yield PUT >=> e for e in putsf do yield PUT >=> e + for e in puts do + yield PUT >=> e - for e in deletes do - yield DELETE >=> e for e in deletesf do yield DELETE >=> e + for e in deletes do + yield DELETE >=> e yield! forwardsf yield! forwards