@@ -5,6 +5,7 @@ import ProjectM36.Base
5import ProjectM36.TransactionGraph
5import ProjectM36.TransactionGraph
6import ProjectM36.TransactionGraph.Show
6import ProjectM36.TransactionGraph.Show
7import ProjectM36.DateExamples
7import ProjectM36.DateExamples
8+import ProjectM36.Error
8import qualified Data.ByteString.Lazy as BS
9import qualified Data.ByteString.Lazy as BS
9import System.Exit
10import System.Exit
10import Data.Word
11import Data.Word
@@ -20,8 +21,8 @@ main = do
20testList :: Test
21testList :: Test
21testList = TestList [
22testList = TestList [
22 testSubGraphToFirstAncestorBasic,
23 testSubGraphToFirstAncestorBasic,
23− testSubGraphToFirstAncestorSnipBranch
24+ testSubGraphToFirstAncestorSnipBranch,
24− --testSelectedBranchMerge
25+ testSelectedBranchMerge
27-- | Create a transaction graph with two branches and no changes between them.
28-- | Create a transaction graph with two branches and no changes between them.
@@ -80,6 +81,7 @@ testSubGraphToFirstAncestorBasic = TestCase $ do
80 subgraph <- assertEither $ subGraphToFirstCommonAncestor graph (transactionHeadsForGraph graph) emptyTransactionGraph transA transB
81 subgraph <- assertEither $ subGraphToFirstCommonAncestor graph (transactionHeadsForGraph graph) emptyTransactionGraph transA transB
81 assertEqual "no graph changes" subgraph graph
82 assertEqual "no graph changes" subgraph graph
84+-- | Test that a branch anchored at the root transaction is removed when using the first ancestor function.
83testSubGraphToFirstAncestorSnipBranch :: Test
85testSubGraphToFirstAncestorSnipBranch :: Test
84testSubGraphToFirstAncestorSnipBranch = TestCase $ do
86testSubGraphToFirstAncestorSnipBranch = TestCase $ do
85 baseGraph <- basicTransactionGraph
87 baseGraph <- basicTransactionGraph
@@ -87,21 +89,19 @@ testSubGraphToFirstAncestorSnipBranch = TestCase $ do
87 transB <- assertMaybe (transactionForHead "branchB" baseGraph) "failed to get branchB"
89 transB <- assertMaybe (transactionForHead "branchB" baseGraph) "failed to get branchB"
88 rootTrans <- assertEither (transactionForUUID (fakeUUID 1) baseGraph)
90 rootTrans <- assertEither (transactionForUUID (fakeUUID 1) baseGraph)
89 (_, graph) <- addTransaction "branchC" (fakeUUID 12) (transactionContext transA) rootTrans baseGraph
91 (_, graph) <- addTransaction "branchC" (fakeUUID 12) (transactionContext transA) rootTrans baseGraph
90− subgraph <- assertEither $ subGraphToFirstCommonAncestor graph (transactionHeadsForGraph graph) emptyTransactionGraph transA transB
92+ subgraph <- assertEither $ subGraphToFirstCommonAncestor graph (transactionHeadsForGraph baseGraph) emptyTransactionGraph transA transB
91 assertGraph subgraph
93 assertGraph subgraph
92− -- putStrLn $ showGraphStructure graph
93− putStrLn $ showGraphStructure subgraph
94− putStrLn $ showGraphStructure baseGraph
95− assertEqual "failed to snip branch" (transactionHeadsForGraph subgraph) (transactionHeadsForGraph baseGraph)
94+ assertEqual "failed to snip branch" baseGraph subgraph
98testSelectedBranchMerge :: Test
96testSelectedBranchMerge :: Test
99testSelectedBranchMerge = TestCase $ do
97testSelectedBranchMerge = TestCase $ do
100 graph <- basicTransactionGraph
98 graph <- basicTransactionGraph
101 assertGraph graph
99 assertGraph graph
102− -- putStrLn (showGraphStructure graph)
104 let eGraph' = mergeTransactions (fakeUUID 3) (fakeUUID 10) (SelectedBranchMergeStrategy "branchA") ("branchA", "branchB") graph
101 let eGraph' = mergeTransactions (fakeUUID 3) (fakeUUID 10) (SelectedBranchMergeStrategy "branchA") ("branchA", "branchB") graph
105− (_, graph') <- assertEither eGraph'
102+ (DisconnectedTransaction _ mergedContext, graph') <- assertEither eGraph'
106 assertGraph graph'
103 assertGraph graph'
107− pure ()
104+ --validate that the branchB was removed
105+ rootTrans <- assertEither $ transactionForUUID (fakeUUID 1) graph'
106+ assertEqual "head still available" (transactionForHead "branchB" graph') Nothing
107+ --assertEqual "bad merge" mergedContext (transactionContext rootTrans)