package engineimage_test import ( "testing" "galaxy/lobby/internal/domain/engineimage" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestNewResolverAcceptsValidTemplate(t *testing.T) { t.Parallel() resolver, err := engineimage.NewResolver("galaxy/game:{engine_version}") require.NoError(t, err) require.NotNil(t, resolver) assert.Equal(t, "galaxy/game:{engine_version}", resolver.Template()) } func TestNewResolverRejectsEmptyTemplate(t *testing.T) { t.Parallel() cases := []string{"", " "} for _, candidate := range cases { _, err := engineimage.NewResolver(candidate) require.Error(t, err) } } func TestNewResolverRejectsTemplateWithoutPlaceholder(t *testing.T) { t.Parallel() _, err := engineimage.NewResolver("galaxy/game:1.0.0") require.Error(t, err) } func TestResolveSubstitutesVersion(t *testing.T) { t.Parallel() resolver, err := engineimage.NewResolver("registry.example.com/galaxy/game:{engine_version}") require.NoError(t, err) got, err := resolver.Resolve("v1.4.7") require.NoError(t, err) assert.Equal(t, "registry.example.com/galaxy/game:v1.4.7", got) } func TestResolveSubstitutesEveryPlaceholderOccurrence(t *testing.T) { t.Parallel() resolver, err := engineimage.NewResolver( "registry.example.com/{engine_version}/game:{engine_version}", ) require.NoError(t, err) got, err := resolver.Resolve("v2.0.1") require.NoError(t, err) assert.Equal(t, "registry.example.com/v2.0.1/game:v2.0.1", got) } func TestResolveRejectsEmptyVersion(t *testing.T) { t.Parallel() resolver, err := engineimage.NewResolver("galaxy/game:{engine_version}") require.NoError(t, err) cases := []string{"", " "} for _, candidate := range cases { _, err := resolver.Resolve(candidate) require.Error(t, err) } } func TestResolveReusesValidatedTemplate(t *testing.T) { t.Parallel() resolver, err := engineimage.NewResolver("galaxy/game:{engine_version}") require.NoError(t, err) first, err := resolver.Resolve("v1.0.0") require.NoError(t, err) second, err := resolver.Resolve("v2.0.0") require.NoError(t, err) assert.Equal(t, "galaxy/game:v1.0.0", first) assert.Equal(t, "galaxy/game:v2.0.0", second) } func TestNilResolverResolveReturnsError(t *testing.T) { t.Parallel() var resolver *engineimage.Resolver _, err := resolver.Resolve("v1.0.0") require.Error(t, err) }