From bdd9e663b982503ab7e6bb82287291d20524900d Mon Sep 17 00:00:00 2001 From: James Brechtel Date: Thu, 14 May 2026 14:50:23 -0400 Subject: [PATCH] chore: apply fourmolu formatting --- src/Converge.hs | 2 +- test/RelaySpec.hs | 153 +++++++++++++++++++++++----------------------- 2 files changed, 79 insertions(+), 76 deletions(-) diff --git a/src/Converge.hs b/src/Converge.hs index 1726578..9db2148 100644 --- a/src/Converge.hs +++ b/src/Converge.hs @@ -640,7 +640,7 @@ stripTrailingCr bs foldLines :: Maybe Text -> [BS.ByteString] -> [BS.ByteString] -> (Maybe Text, [BS.ByteString], [PushEvent]) foldLines evtType0 dLines0 sseLines = let (evt, dl, evts) = foldl' step (evtType0, dLines0, []) sseLines - in (evt, dl, reverse evts) + in (evt, dl, reverse evts) where step (evt, dl, events) line | BS.null line = diff --git a/test/RelaySpec.hs b/test/RelaySpec.hs index 4e975d6..020789e 100644 --- a/test/RelaySpec.hs +++ b/test/RelaySpec.hs @@ -1,18 +1,18 @@ module RelaySpec (spec) where -import Converge - ( PushEvent (..), - RepoConfig (..), - extractLines, - foldLines, - handleSSEEvent, - parseEvent, - ) +import Converge ( + PushEvent (..), + RepoConfig (..), + extractLines, + foldLines, + handleSSEEvent, + parseEvent, + ) import qualified Data.ByteString.Char8 as BSC import qualified Data.Text as T import System.FilePath (()) -import TestHelper (commitCount, runGitIn, testLogger, withTempGitRepoWithRemote) import Test.Hspec +import TestHelper (commitCount, runGitIn, testLogger, withTempGitRepoWithRemote) spec :: Spec spec = do @@ -65,29 +65,29 @@ foldLinesSpec :: Spec foldLinesSpec = describe "foldLines" $ do it "parses a single push event" $ do let lines' = - [ bsc "event: push", - bsc "data: {\"full_name\":\"myorg/myrepo\",\"branch\":\"main\",\"ref\":\"refs/heads/main\"}", - bsc "" + [ bsc "event: push" + , bsc "data: {\"full_name\":\"myorg/myrepo\",\"branch\":\"main\",\"ref\":\"refs/heads/main\"}" + , bsc "" ] (finalEvtType, finalDLines, events) = foldLines Nothing [] lines' - events `shouldBe` - [ PushEvent - { peFullName = "myorg/myrepo", - peBranch = "main", - peRef = "refs/heads/main" - } - ] + events + `shouldBe` [ PushEvent + { peFullName = "myorg/myrepo" + , peBranch = "main" + , peRef = "refs/heads/main" + } + ] finalEvtType `shouldBe` Nothing finalDLines `shouldBe` [] it "parses two push events" $ do let lines' = - [ bsc "event: push", - bsc "data: {\"full_name\":\"a/b\",\"branch\":\"main\",\"ref\":\"refs/heads/main\"}", - bsc "", - bsc "event: push", - bsc "data: {\"full_name\":\"c/d\",\"branch\":\"dev\",\"ref\":\"refs/heads/dev\"}", - bsc "" + [ bsc "event: push" + , bsc "data: {\"full_name\":\"a/b\",\"branch\":\"main\",\"ref\":\"refs/heads/main\"}" + , bsc "" + , bsc "event: push" + , bsc "data: {\"full_name\":\"c/d\",\"branch\":\"dev\",\"ref\":\"refs/heads/dev\"}" + , bsc "" ] (_, _, events) = foldLines Nothing [] lines' length events `shouldBe` 2 @@ -96,28 +96,28 @@ foldLinesSpec = describe "foldLines" $ do it "ignores non-push events" $ do let lines' = - [ bsc "event: ping", - bsc "data: hello", - bsc "" + [ bsc "event: ping" + , bsc "data: hello" + , bsc "" ] (_, _, events) = foldLines Nothing [] lines' events `shouldBe` [] it "ignores comment lines (starting with colon)" $ do let lines' = - [ bsc ": this is a comment", - bsc "event: push", - bsc "data: {\"full_name\":\"a/b\",\"branch\":\"main\",\"ref\":\"refs/heads/main\"}", - bsc "" + [ bsc ": this is a comment" + , bsc "event: push" + , bsc "data: {\"full_name\":\"a/b\",\"branch\":\"main\",\"ref\":\"refs/heads/main\"}" + , bsc "" ] (_, _, events) = foldLines Nothing [] lines' length events `shouldBe` 1 it "handles event: without space after colon" $ do let lines' = - [ bsc "event:push", - bsc "data:{\"full_name\":\"a/b\",\"branch\":\"main\",\"ref\":\"refs/heads/main\"}", - bsc "" + [ bsc "event:push" + , bsc "data:{\"full_name\":\"a/b\",\"branch\":\"main\",\"ref\":\"refs/heads/main\"}" + , bsc "" ] (_, _, events) = foldLines Nothing [] lines' length events `shouldBe` 1 @@ -143,12 +143,13 @@ parseEventSpec :: Spec parseEventSpec = describe "parseEvent" $ do it "parses a valid push event" $ do let evt = parseEvent (Just "push") [bsc "{\"full_name\":\"org/repo\",\"branch\":\"main\",\"ref\":\"refs/heads/main\"}"] - evt `shouldBe` Just - PushEvent - { peFullName = "org/repo", - peBranch = "main", - peRef = "refs/heads/main" - } + evt + `shouldBe` Just + PushEvent + { peFullName = "org/repo" + , peBranch = "main" + , peRef = "refs/heads/main" + } it "returns Nothing for non-push event type" $ do let evt = parseEvent (Just "ping") [bsc "{}"] @@ -159,17 +160,20 @@ parseEventSpec = describe "parseEvent" $ do evt `shouldBe` Nothing it "handles multiple data lines joined" $ do - let evt = parseEvent (Just "push") - [ bsc "{\"full_name\":\"x\"", - bsc ",\"branch\":\"y\"", - bsc ",\"ref\":\"z\"}" - ] - evt `shouldBe` Just - PushEvent - { peFullName = "x", - peBranch = "y", - peRef = "z" - } + let evt = + parseEvent + (Just "push") + [ bsc "{\"full_name\":\"x\"" + , bsc ",\"branch\":\"y\"" + , bsc ",\"ref\":\"z\"}" + ] + evt + `shouldBe` Just + PushEvent + { peFullName = "x" + , peBranch = "y" + , peRef = "z" + } ---------------------------------------------------------------------- -- handleSSEEvent (integration — uses real git repos) @@ -206,9 +210,9 @@ handleSSEEventSpec = describe "handleSSEEvent" $ do -- Send a matching push event let evt = PushEvent - { peFullName = "test-org/test-repo", - peBranch = "main", - peRef = "refs/heads/main" + { peFullName = "test-org/test-repo" + , peBranch = "main" + , peRef = "refs/heads/main" } handleSSEEvent logger [repoCfg] evt @@ -225,33 +229,32 @@ handleSSEEventSpec = describe "handleSSEEvent" $ do } let evt = PushEvent - { peFullName = "other-org/other-repo", - peBranch = "main", - peRef = "refs/heads/main" + { peFullName = "other-org/other-repo" + , peBranch = "main" + , peRef = "refs/heads/main" } -- This should not crash or pull — it just ignores handleSSEEvent logger [repoCfg] evt - -- Test passes if no exception is thrown + -- Test passes if no exception is thrown it "ignores events for repos with non-matching branch" $ withTempGitRepoWithRemote $ \localRepo -> do logger <- testLogger let repoCfg = (defaultRepoCfg localRepo) - { rcGiteaRepo = Just "test-org/test-repo", - rcBranch = "main" + { rcGiteaRepo = Just "test-org/test-repo" + , rcBranch = "main" } let evt = PushEvent - { peFullName = "test-org/test-repo", - peBranch = "dev", - peRef = "refs/heads/dev" + { peFullName = "test-org/test-repo" + , peBranch = "dev" + , peRef = "refs/heads/dev" } commitsBefore <- commitCount localRepo handleSSEEvent logger [repoCfg] evt commitsAfter <- commitCount localRepo - commitsAfter `shouldBe` commitsBefore -- no pull should have happened - + commitsAfter `shouldBe` commitsBefore -- no pull should have happened it "skips pull when an operation is in progress" $ withTempGitRepoWithRemote $ \localRepo -> do logger <- testLogger @@ -275,14 +278,14 @@ handleSSEEventSpec = describe "handleSSEEvent" $ do } let evt = PushEvent - { peFullName = "test-org/test-repo", - peBranch = "main", - peRef = "refs/heads/main" + { peFullName = "test-org/test-repo" + , peBranch = "main" + , peRef = "refs/heads/main" } handleSSEEvent logger [repoCfg] evt commitsAfter <- commitCount localRepo - commitsAfter `shouldBe` commitsBefore -- pull should be skipped + commitsAfter `shouldBe` commitsBefore -- pull should be skipped ---------------------------------------------------------------------- -- Helpers @@ -296,9 +299,9 @@ bsc = BSC.pack defaultRepoCfg :: FilePath -> RepoConfig defaultRepoCfg path = RepoConfig - { rcPath = path, - rcRemote = "origin", - rcBranch = "main", - rcNotifyOnPull = False, - rcGiteaRepo = Nothing + { rcPath = path + , rcRemote = "origin" + , rcBranch = "main" + , rcNotifyOnPull = False + , rcGiteaRepo = Nothing }