2026-03-09 14:59:57 +00:00
|
|
|
package snapshot
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"testing"
|
2026-03-09 15:10:49 +00:00
|
|
|
"time"
|
2026-03-09 14:59:57 +00:00
|
|
|
|
2026-03-22 00:04:10 +00:00
|
|
|
"dappco.re/go/core/scm/manifest"
|
2026-03-09 14:59:57 +00:00
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
)
|
|
|
|
|
|
2026-03-09 15:10:49 +00:00
|
|
|
var fixedTime = time.Date(2026, 3, 9, 15, 0, 0, 0, time.UTC)
|
|
|
|
|
|
2026-03-09 14:59:57 +00:00
|
|
|
func TestGenerate_Good(t *testing.T) {
|
|
|
|
|
m := &manifest.Manifest{
|
|
|
|
|
Code: "test-app",
|
|
|
|
|
Name: "Test App",
|
|
|
|
|
Version: "1.0.0",
|
|
|
|
|
Description: "A test application",
|
2026-03-09 15:10:49 +00:00
|
|
|
Layout: "HLCRF",
|
|
|
|
|
Slots: map[string]string{"C": "main-content"},
|
2026-03-09 14:59:57 +00:00
|
|
|
Daemons: map[string]manifest.DaemonSpec{
|
|
|
|
|
"serve": {Binary: "core-php", Args: []string{"php", "serve"}, Default: true},
|
|
|
|
|
},
|
2026-03-09 15:10:49 +00:00
|
|
|
Permissions: manifest.Permissions{
|
|
|
|
|
Read: []string{"./photos/"},
|
|
|
|
|
},
|
2026-03-09 14:59:57 +00:00
|
|
|
Modules: []string{"core/media"},
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-09 15:10:49 +00:00
|
|
|
data, err := GenerateAt(m, "abc123def456", "v1.0.0", fixedTime)
|
2026-03-09 14:59:57 +00:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
var snap Snapshot
|
|
|
|
|
require.NoError(t, json.Unmarshal(data, &snap))
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, 1, snap.Schema)
|
|
|
|
|
assert.Equal(t, "test-app", snap.Code)
|
2026-03-09 15:10:49 +00:00
|
|
|
assert.Equal(t, "Test App", snap.Name)
|
2026-03-09 14:59:57 +00:00
|
|
|
assert.Equal(t, "1.0.0", snap.Version)
|
2026-03-09 15:10:49 +00:00
|
|
|
assert.Equal(t, "A test application", snap.Description)
|
2026-03-09 14:59:57 +00:00
|
|
|
assert.Equal(t, "abc123def456", snap.Commit)
|
|
|
|
|
assert.Equal(t, "v1.0.0", snap.Tag)
|
2026-03-09 15:10:49 +00:00
|
|
|
assert.Equal(t, "2026-03-09T15:00:00Z", snap.Built)
|
|
|
|
|
assert.Equal(t, "HLCRF", snap.Layout)
|
|
|
|
|
assert.Equal(t, "main-content", snap.Slots["C"])
|
2026-03-09 14:59:57 +00:00
|
|
|
assert.Len(t, snap.Daemons, 1)
|
|
|
|
|
assert.Equal(t, "core-php", snap.Daemons["serve"].Binary)
|
2026-03-09 15:10:49 +00:00
|
|
|
require.NotNil(t, snap.Permissions)
|
|
|
|
|
assert.Equal(t, []string{"./photos/"}, snap.Permissions.Read)
|
|
|
|
|
assert.Equal(t, []string{"core/media"}, snap.Modules)
|
2026-03-09 14:59:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestGenerate_Good_NoDaemons(t *testing.T) {
|
|
|
|
|
m := &manifest.Manifest{
|
|
|
|
|
Code: "simple",
|
|
|
|
|
Name: "Simple",
|
|
|
|
|
Version: "0.1.0",
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-09 15:10:49 +00:00
|
|
|
data, err := GenerateAt(m, "abc123", "v0.1.0", fixedTime)
|
2026-03-09 14:59:57 +00:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
var snap Snapshot
|
|
|
|
|
require.NoError(t, json.Unmarshal(data, &snap))
|
|
|
|
|
|
2026-03-09 15:10:49 +00:00
|
|
|
assert.Equal(t, 1, snap.Schema)
|
2026-03-09 14:59:57 +00:00
|
|
|
assert.Equal(t, "simple", snap.Code)
|
|
|
|
|
assert.Nil(t, snap.Daemons)
|
2026-03-09 15:10:49 +00:00
|
|
|
assert.Nil(t, snap.Permissions)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestGenerate_Bad_NilManifest(t *testing.T) {
|
|
|
|
|
_, err := Generate(nil, "abc123", "v1.0.0")
|
|
|
|
|
assert.Error(t, err)
|
|
|
|
|
assert.Contains(t, err.Error(), "manifest is nil")
|
2026-03-09 14:59:57 +00:00
|
|
|
}
|