104 lines
2.9 KiB
Go
104 lines
2.9 KiB
Go
package builders
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"dappco.re/go/core/build/internal/ax"
|
|
|
|
"dappco.re/go/core/build/pkg/build"
|
|
"dappco.re/go/core/io"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDocker_DockerBuilderName_Good(t *testing.T) {
|
|
builder := NewDockerBuilder()
|
|
assert.Equal(t, "docker", builder.Name())
|
|
}
|
|
|
|
func TestDocker_DockerBuilderDetect_Good(t *testing.T) {
|
|
fs := io.Local
|
|
|
|
t.Run("detects Dockerfile", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
err := ax.WriteFile(ax.Join(dir, "Dockerfile"), []byte("FROM alpine\n"), 0644)
|
|
require.NoError(t, err)
|
|
|
|
builder := NewDockerBuilder()
|
|
detected, err := builder.Detect(fs, dir)
|
|
assert.NoError(t, err)
|
|
assert.True(t, detected)
|
|
})
|
|
|
|
t.Run("returns false for empty directory", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
|
|
builder := NewDockerBuilder()
|
|
detected, err := builder.Detect(fs, dir)
|
|
assert.NoError(t, err)
|
|
assert.False(t, detected)
|
|
})
|
|
|
|
t.Run("returns false for non-Docker project", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
// Create a Go project instead
|
|
err := ax.WriteFile(ax.Join(dir, "go.mod"), []byte("module test"), 0644)
|
|
require.NoError(t, err)
|
|
|
|
builder := NewDockerBuilder()
|
|
detected, err := builder.Detect(fs, dir)
|
|
assert.NoError(t, err)
|
|
assert.False(t, detected)
|
|
})
|
|
|
|
t.Run("does not match docker-compose.yml", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
err := ax.WriteFile(ax.Join(dir, "docker-compose.yml"), []byte("version: '3'\n"), 0644)
|
|
require.NoError(t, err)
|
|
|
|
builder := NewDockerBuilder()
|
|
detected, err := builder.Detect(fs, dir)
|
|
assert.NoError(t, err)
|
|
assert.False(t, detected)
|
|
})
|
|
|
|
t.Run("does not match Dockerfile in subdirectory", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
subDir := ax.Join(dir, "subdir")
|
|
require.NoError(t, ax.MkdirAll(subDir, 0755))
|
|
err := ax.WriteFile(ax.Join(subDir, "Dockerfile"), []byte("FROM alpine\n"), 0644)
|
|
require.NoError(t, err)
|
|
|
|
builder := NewDockerBuilder()
|
|
detected, err := builder.Detect(fs, dir)
|
|
assert.NoError(t, err)
|
|
assert.False(t, detected)
|
|
})
|
|
}
|
|
|
|
func TestDocker_DockerBuilderInterface_Good(t *testing.T) {
|
|
// Verify DockerBuilder implements Builder interface
|
|
var _ build.Builder = (*DockerBuilder)(nil)
|
|
var _ build.Builder = NewDockerBuilder()
|
|
}
|
|
|
|
func TestDocker_DockerBuilderResolveDockerCli_Good(t *testing.T) {
|
|
builder := NewDockerBuilder()
|
|
fallbackDir := t.TempDir()
|
|
fallbackPath := ax.Join(fallbackDir, "docker")
|
|
require.NoError(t, ax.WriteFile(fallbackPath, []byte("#!/bin/sh\nexit 0\n"), 0o755))
|
|
t.Setenv("PATH", "")
|
|
|
|
command, err := builder.resolveDockerCli(fallbackPath)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, fallbackPath, command)
|
|
}
|
|
|
|
func TestDocker_DockerBuilderResolveDockerCli_Bad(t *testing.T) {
|
|
builder := NewDockerBuilder()
|
|
t.Setenv("PATH", "")
|
|
|
|
_, err := builder.resolveDockerCli(ax.Join(t.TempDir(), "missing-docker"))
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "docker CLI not found")
|
|
}
|