MCPcopy Index your code
hub / github.com/docker/docker-agent / TestBranchSession

Function TestBranchSession

pkg/session/branch_test.go:244–372  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

242}
243
244func TestBranchSession(t *testing.T) {
245 t.Parallel()
246 t.Run("nil parent returns error", func(t *testing.T) {
247 t.Parallel()
248 _, err := BranchSession(nil, 0)
249 require.Error(t, err)
250 assert.Contains(t, err.Error(), "parent session is nil")
251 })
252
253 t.Run("negative position returns error", func(t *testing.T) {
254 t.Parallel()
255 parent := &Session{Messages: []Item{NewMessageItem(UserMessage("test"))}}
256 _, err := BranchSession(parent, -1)
257 require.Error(t, err)
258 assert.Contains(t, err.Error(), "out of range")
259 })
260
261 t.Run("position beyond messages returns error", func(t *testing.T) {
262 t.Parallel()
263 parent := &Session{Messages: []Item{NewMessageItem(UserMessage("test"))}}
264 _, err := BranchSession(parent, 2)
265 require.Error(t, err)
266 assert.Contains(t, err.Error(), "out of range")
267 })
268
269 t.Run("position equal to messages length no error", func(t *testing.T) {
270 t.Parallel()
271 parent := &Session{Messages: []Item{NewMessageItem(UserMessage("test"))}}
272 _, err := BranchSession(parent, 1)
273 require.NoError(t, err)
274 })
275
276 t.Run("branches across a persisted error item", func(t *testing.T) {
277 t.Parallel()
278 // Regression: a session containing a recorded failure must remain
279 // branchable. cloneSessionItem previously errored on error items,
280 // breaking branch/fork for any failed session.
281 parent := &Session{
282 Messages: []Item{
283 NewMessageItem(UserMessage("hi")),
284 NewErrorItem(&Error{Message: "boom", Code: "model_error"}),
285 NewMessageItem(UserMessage("again")),
286 },
287 }
288
289 branched, err := BranchSession(parent, 3)
290 require.NoError(t, err)
291 require.Len(t, branched.Messages, 3)
292 require.True(t, branched.Messages[1].IsError())
293 assert.Equal(t, "boom", branched.Messages[1].Error.Message)
294
295 // Deep copy: mutating the branch must not touch the parent.
296 branched.Messages[1].Error.Message = "mutated"
297 assert.Equal(t, "boom", parent.Messages[1].Error.Message)
298 })
299
300 t.Run("valid branch copies messages up to position", func(t *testing.T) {
301 t.Parallel()

Callers

nothing calls this directly

Calls 8

BranchSessionFunction · 0.85
NewMessageItemFunction · 0.85
NewErrorItemFunction · 0.85
IsErrorMethod · 0.80
UserMessageFunction · 0.70
RunMethod · 0.65
LenMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected