83 LOC docker, 224 LOC linuxkit, 234 LOC taskfile builder tests. Tests cover Name(), Detect(), Build() and config parsing. Co-Authored-By: Virgil <virgil@lethean.io>
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package builders
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"forge.lthn.ai/core/go-devops/build"
|
|
"forge.lthn.ai/core/go/pkg/io"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDockerBuilder_Name_Good(t *testing.T) {
|
|
builder := NewDockerBuilder()
|
|
assert.Equal(t, "docker", builder.Name())
|
|
}
|
|
|
|
func TestDockerBuilder_Detect_Good(t *testing.T) {
|
|
fs := io.Local
|
|
|
|
t.Run("detects Dockerfile", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
err := os.WriteFile(filepath.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 := os.WriteFile(filepath.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 := os.WriteFile(filepath.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 := filepath.Join(dir, "subdir")
|
|
require.NoError(t, os.MkdirAll(subDir, 0755))
|
|
err := os.WriteFile(filepath.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 TestDockerBuilder_Interface_Good(t *testing.T) {
|
|
// Verify DockerBuilder implements Builder interface
|
|
var _ build.Builder = (*DockerBuilder)(nil)
|
|
var _ build.Builder = NewDockerBuilder()
|
|
}
|