66
77from git_draft .bots import Action , Bot , Goal , Toolbox
88import git_draft .drafter as sut
9- from git_draft .git import SHA , Repo
9+ from git_draft .git import SHA , GitError , Repo
1010from git_draft .store import Store
1111
1212from .conftest import RepoFS
@@ -71,28 +71,61 @@ def test_generate_empty_draft(self) -> None:
7171 assert len (self ._commits ()) == 1
7272 assert len (self ._commits ("@{u}" )) == 2
7373
74- def test_generate_draft_accept_merge (self ) -> None :
74+ def test_generate_draft_merge (self ) -> None :
7575 self ._fs .write ("p1" , "a" )
76+
7677 self ._drafter .generate_draft (
77- "hello" ,
78- _SimpleBot ({"p2" : "b" }),
79- accept = sut .Accept .MERGE ,
78+ "hello" , _SimpleBot ({"p2" : "b" }), merge_strategy = "ignore-all-space"
8079 )
81- assert len (self ._commits ()) == 5 # init, sync, prompt, sync, merge
80+ # No sync(merge) commit since no changes happened between.
81+ assert len (self ._commits ()) == 4 # init, sync(prompt), prompt, merge
8282 assert self ._fs .read ("p1" ) == "a"
8383 assert self ._fs .read ("p2" ) == "b"
8484
85- def test_generate_draft_accept_finalize (self ) -> None :
85+ def test_generate_draft_merge_no_conflict (self ) -> None :
8686 self ._fs .write ("p1" , "a" )
87+
88+ def update (_goal : Goal ) -> str :
89+ self ._fs .write ("p2" , "b" )
90+ return "A"
91+
8792 self ._drafter .generate_draft (
8893 "hello" ,
89- _SimpleBot ({"p1" : "A" , "p2" : "b" }),
90- accept = sut . Accept . FINALIZE ,
94+ _SimpleBot ({"p1" : update }),
95+ merge_strategy = "ignore-all-space" ,
9196 )
92- assert len (self ._commits ()) == 1 # init
97+ assert len (self ._commits ()) == 5 # init, sync, prompt, sync, merge
9398 assert self ._fs .read ("p1" ) == "A"
9499 assert self ._fs .read ("p2" ) == "b"
95100
101+ def test_generate_draft_merge_theirs (self ) -> None :
102+ self ._fs .write ("p1" , "a" )
103+
104+ def update (_goal : Goal ) -> str :
105+ self ._fs .write ("p1" , "b" )
106+ return "A"
107+
108+ self ._drafter .generate_draft (
109+ "hello" , _SimpleBot ({"p1" : update }), merge_strategy = "theirs"
110+ )
111+ # sync(merge) commit here since p1 was updated separately.
112+ assert len (self ._commits ()) == 5 # init, sync, prompt, sync, merge
113+ assert self ._fs .read ("p1" ) == "A"
114+
115+ def test_generate_draft_merge_conflict (self ) -> None :
116+ self ._fs .write ("p1" , "a" )
117+
118+ def update (_goal : Goal ) -> str :
119+ self ._fs .write ("p1" , "b" )
120+ return "A"
121+
122+ with pytest .raises (GitError ):
123+ self ._drafter .generate_draft (
124+ "hello" ,
125+ _SimpleBot ({"p1" : update }),
126+ merge_strategy = "ignore-all-space" ,
127+ )
128+
96129 def test_generate_outside_branch (self ) -> None :
97130 self ._repo .git ("checkout" , "--detach" )
98131 with pytest .raises (RuntimeError ):
@@ -104,18 +137,16 @@ def test_generate_empty_prompt(self) -> None:
104137
105138 def test_generate_reuse_branch (self ) -> None :
106139 bot = _SimpleBot ({"prompt" : lambda goal : goal .prompt })
107- self ._drafter .generate_draft ("prompt1" , bot , sut . Accept . MERGE )
108- self ._drafter .generate_draft ("prompt2" , bot , sut . Accept . MERGE )
140+ self ._drafter .generate_draft ("prompt1" , bot , "theirs" )
141+ self ._drafter .generate_draft ("prompt2" , bot , "theirs" )
109142 assert self ._fs .read ("prompt" ) == "prompt2"
110143
111144 def test_delete_unknown_file (self ) -> None :
112145 self ._drafter .generate_draft ("hello" , _SimpleBot ({"p1" : None }))
113146
114147 def test_finalize_keeps_changes (self ) -> None :
115148 self ._fs .write ("p1.txt" , "a1" )
116- self ._drafter .generate_draft (
117- "hello" , _SimpleBot .prompt (), sut .Accept .MERGE
118- )
149+ self ._drafter .generate_draft ("hello" , _SimpleBot .prompt (), "theirs" )
119150 self ._fs .write ("p1.txt" , "a2" )
120151 self ._drafter .finalize_folio ()
121152 assert self ._fs .read ("p1.txt" ) == "a2"
0 commit comments