snapshot_restore_fixture_test.go RawHistoryFolder
1package daemon
2
3import (
4 "fmt"
5
6 "github.com/bnema/vev/internal/domain"
7 "github.com/bnema/vev/internal/ports"
8 snapcodec "github.com/bnema/vev/internal/usecase/snapshot"
9)
10
11func acceptancePublication(snapshot snapcodec.Session) (ports.SnapshotPublication, error) {
12 // acceptancePublication converts a restore fixture to repository form.
13 incarnation := domain.IncarnationID{1}
14 manifest := snapcodec.Manifest{Generation: 1, IncarnationID: incarnation, Name: snapshot.Name, CreatedAt: snapshot.CreatedAt, Active: snapshot.Active, Tabs: make([]snapcodec.ManifestTab, 0, len(snapshot.Tabs))}
15 objects := make([]ports.SnapshotObject, 0)
16 for _, tab := range snapshot.Tabs {
17 outTab := snapcodec.ManifestTab{StableID: tab.StableID, Cols: tab.Cols, Rows: tab.Rows, NextPaneID: tab.NextPaneID, Focus: tab.Focus, Tree: tab.Tree, Panes: make([]snapcodec.ManifestPane, 0, len(tab.Panes))}
18 for _, pane := range tab.Panes {
19 outPane := snapcodec.ManifestPane{ID: pane.ID, StableID: pane.StableID, Cwd: pane.Cwd, Process: pane.Process}
20 for i, payload := range pane.SealedChunks {
21 object, err := snapcodec.MarshalObject(snapcodec.HistoryChunk, payload)
22 if err != nil {
23 return ports.SnapshotPublication{}, fmt.Errorf("snapshot fixture conversion: tab %q pane %q sealed chunk %d: marshal object: %w", tab.StableID, pane.ID, i, err)
24 }
25 outPane.Sealed = append(outPane.Sealed, objectRef(snapcodec.HistoryChunk, object))
26 objects = append(objects, object)
27 }
28 tail, err := snapcodec.MarshalObject(snapcodec.HistoryTail, pane.Tail)
29 if err != nil {
30 return ports.SnapshotPublication{}, fmt.Errorf("snapshot fixture conversion: tab %q pane %q tail: marshal object: %w", tab.StableID, pane.ID, err)
31 }
32 transcript, err := snapcodec.MarshalObject(snapcodec.RecoveryTranscript, pane.Transcript)
33 if err != nil {
34 return ports.SnapshotPublication{}, fmt.Errorf("snapshot fixture conversion: tab %q pane %q recovery transcript: marshal object: %w", tab.StableID, pane.ID, err)
35 }
36 outPane.Tail, outPane.Transcript = objectRef(snapcodec.HistoryTail, tail), objectRef(snapcodec.RecoveryTranscript, transcript)
37 objects = append(objects, tail, transcript)
38 outTab.Panes = append(outTab.Panes, outPane)
39 }
40 manifest.Tabs = append(manifest.Tabs, outTab)
41 }
42 encoded, err := snapcodec.MarshalManifest(manifest)
43 if err != nil {
44 return ports.SnapshotPublication{}, fmt.Errorf("snapshot fixture conversion: marshal manifest: %w", err)
45 }
46 return ports.SnapshotPublication{IncarnationID: incarnation, Name: snapshot.Name, Generation: 1, Manifest: encoded, Objects: objects}, nil
47}