191 lines
5.3 KiB
Go
191 lines
5.3 KiB
Go
package artifacts
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/narratio/internal/config"
|
|
)
|
|
|
|
func TestCollectPreviousArtifactRequirements(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
artifactsCfg map[string]config.ScriptoriumArtifactConfig
|
|
want []PreviousArtifactRequirement
|
|
}{
|
|
{
|
|
name: "no artifacts",
|
|
artifactsCfg: nil,
|
|
want: nil,
|
|
},
|
|
{
|
|
name: "no previous inputs",
|
|
artifactsCfg: map[string]config.ScriptoriumArtifactConfig{
|
|
"session_recap": {
|
|
Enabled: true,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"transcript": {Source: "narratio.transcript.trimmed", Required: true},
|
|
},
|
|
},
|
|
},
|
|
want: nil,
|
|
},
|
|
{
|
|
name: "one optional previous input",
|
|
artifactsCfg: map[string]config.ScriptoriumArtifactConfig{
|
|
"session_recap": {
|
|
Enabled: true,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"previous_recap": {Source: "narratio.previous_session.artifact.session_recap", Required: false},
|
|
},
|
|
},
|
|
},
|
|
want: []PreviousArtifactRequirement{
|
|
{
|
|
Name: "session_recap",
|
|
Required: false,
|
|
Sources: []string{"pipeline.scriptorium.artifacts.session_recap.inputs.previous_recap.source"},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "one required previous input",
|
|
artifactsCfg: map[string]config.ScriptoriumArtifactConfig{
|
|
"quest_log": {
|
|
Enabled: true,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"previous_quest_log": {Source: "narratio.previous_session.artifact.quest_log", Required: true},
|
|
},
|
|
},
|
|
},
|
|
want: []PreviousArtifactRequirement{
|
|
{
|
|
Name: "quest_log",
|
|
Required: true,
|
|
Sources: []string{"pipeline.scriptorium.artifacts.quest_log.inputs.previous_quest_log.source"},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "duplicate references are deduped",
|
|
artifactsCfg: map[string]config.ScriptoriumArtifactConfig{
|
|
"a": {
|
|
Enabled: true,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"x": {Source: "narratio.previous_session.artifact.session_recap", Required: false},
|
|
},
|
|
},
|
|
"b": {
|
|
Enabled: true,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"y": {Source: "narratio.previous_session.artifact.session_recap", Required: false},
|
|
},
|
|
},
|
|
},
|
|
want: []PreviousArtifactRequirement{
|
|
{
|
|
Name: "session_recap",
|
|
Required: false,
|
|
Sources: []string{
|
|
"pipeline.scriptorium.artifacts.a.inputs.x.source",
|
|
"pipeline.scriptorium.artifacts.b.inputs.y.source",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "required plus optional reference becomes required",
|
|
artifactsCfg: map[string]config.ScriptoriumArtifactConfig{
|
|
"a": {
|
|
Enabled: true,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"x": {Source: "narratio.previous_session.artifact.session_recap", Required: false},
|
|
},
|
|
},
|
|
"b": {
|
|
Enabled: true,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"y": {Source: "narratio.previous_session.artifact.session_recap", Required: true},
|
|
},
|
|
},
|
|
},
|
|
want: []PreviousArtifactRequirement{
|
|
{
|
|
Name: "session_recap",
|
|
Required: true,
|
|
Sources: []string{
|
|
"pipeline.scriptorium.artifacts.a.inputs.x.source",
|
|
"pipeline.scriptorium.artifacts.b.inputs.y.source",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "disabled artifact references are ignored",
|
|
artifactsCfg: map[string]config.ScriptoriumArtifactConfig{
|
|
"disabled_artifact": {
|
|
Enabled: false,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"x": {Source: "narratio.previous_session.artifact.session_recap", Required: true},
|
|
},
|
|
},
|
|
"enabled_artifact": {
|
|
Enabled: true,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"y": {Source: "narratio.previous_session.artifact.quest_log", Required: false},
|
|
},
|
|
},
|
|
},
|
|
want: []PreviousArtifactRequirement{
|
|
{
|
|
Name: "quest_log",
|
|
Required: false,
|
|
Sources: []string{"pipeline.scriptorium.artifacts.enabled_artifact.inputs.y.source"},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "deterministic ordering",
|
|
artifactsCfg: map[string]config.ScriptoriumArtifactConfig{
|
|
"zz": {
|
|
Enabled: true,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"b_input": {Source: "narratio.previous_session.artifact.quest_log", Required: false},
|
|
"a_input": {Source: "narratio.previous_session.artifact.session_recap", Required: false},
|
|
},
|
|
},
|
|
"aa": {
|
|
Enabled: true,
|
|
Inputs: map[string]config.ScriptoriumInputConfig{
|
|
"c_input": {Source: "narratio.previous_session.artifact.session_recap", Required: false},
|
|
},
|
|
},
|
|
},
|
|
want: []PreviousArtifactRequirement{
|
|
{
|
|
Name: "quest_log",
|
|
Required: false,
|
|
Sources: []string{"pipeline.scriptorium.artifacts.zz.inputs.b_input.source"},
|
|
},
|
|
{
|
|
Name: "session_recap",
|
|
Required: false,
|
|
Sources: []string{
|
|
"pipeline.scriptorium.artifacts.aa.inputs.c_input.source",
|
|
"pipeline.scriptorium.artifacts.zz.inputs.a_input.source",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := CollectPreviousArtifactRequirements(tt.artifactsCfg)
|
|
if !reflect.DeepEqual(got, tt.want) {
|
|
t.Fatalf("CollectPreviousArtifactRequirements() = %#v, want %#v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|