A target's settings move from the per-type JSON string in targets.config to columns: url, headers, timeout_seconds, forward_query, archive_expiry and archive_rotation. A column a type does not use stays empty. headers holds the header map as JSON text through GORM's JSON serializer, and archive_expiry holds a time.Duration, 0 meaning never. The forms check each setting once, with the same refusals and messages, and the edit form is filled from the columns, so the per-type config structs, their parsers and the "could not be read" branches are gone. A delivery task carries the six settings in place of the JSON string; tests check that each copy into a task, and back out of one, keeps all six. Model: opus-5-5
This commit was merged in pull request #554.
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
@@ -54,15 +55,26 @@ func TestHandleSourceCreateSubmit_CreatesRequestedTargets(t *testing.T) {
|
||||
|
||||
env := setupSourceTest(t)
|
||||
|
||||
// Each value the archive pruning choice submits, after an empty
|
||||
// one that stands for the archive checkbox left off.
|
||||
expiries := []string{
|
||||
"", "never", "1h", "12h", "24h", "720h", "2160h", "8760h",
|
||||
// Each value the archive pruning choice submits and the expiry it
|
||||
// stores, after an empty one that stands for the archive checkbox
|
||||
// left off.
|
||||
expiries := []struct {
|
||||
value string
|
||||
stored time.Duration
|
||||
}{
|
||||
{"", 0},
|
||||
{expiryNever, 0},
|
||||
{"1h", time.Hour},
|
||||
{"12h", 12 * time.Hour},
|
||||
{"24h", 24 * time.Hour},
|
||||
{"720h", 720 * time.Hour},
|
||||
{"2160h", 2160 * time.Hour},
|
||||
{"8760h", 8760 * time.Hour},
|
||||
}
|
||||
|
||||
for _, httpURL := range []string{"", editOriginalURL} {
|
||||
for _, expiry := range expiries {
|
||||
name := "url=" + httpURL + " archive=" + expiry
|
||||
name := "url=" + httpURL + " archive=" + expiry.value
|
||||
|
||||
t.Run(name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -72,9 +84,9 @@ func TestHandleSourceCreateSubmit_CreatesRequestedTargets(t *testing.T) {
|
||||
form.Set("http_url", httpURL)
|
||||
form.Set("archive_expiry", "720h")
|
||||
|
||||
if expiry != "" {
|
||||
if expiry.value != "" {
|
||||
form.Set("archive", "on")
|
||||
form.Set("archive_expiry", expiry)
|
||||
form.Set("archive_expiry", expiry.value)
|
||||
}
|
||||
|
||||
w := submitCreateForm(env, form)
|
||||
@@ -96,17 +108,16 @@ func TestHandleSourceCreateSubmit_CreatesRequestedTargets(t *testing.T) {
|
||||
wantCount++
|
||||
|
||||
assert.Equal(t, "HTTP", byType[database.TargetTypeHTTP].Name)
|
||||
assert.JSONEq(t, `{"url":"`+httpURL+`"}`,
|
||||
byType[database.TargetTypeHTTP].Config)
|
||||
assert.Equal(t, httpURL, byType[database.TargetTypeHTTP].URL)
|
||||
}
|
||||
|
||||
if expiry != "" {
|
||||
if expiry.value != "" {
|
||||
wantCount++
|
||||
|
||||
assert.Equal(t, "Archive",
|
||||
byType[database.TargetTypeDatabase].Name)
|
||||
assert.JSONEq(t, `{"expiry":"`+expiry+`"}`,
|
||||
byType[database.TargetTypeDatabase].Config)
|
||||
assert.Equal(t, expiry.stored,
|
||||
byType[database.TargetTypeDatabase].ArchiveExpiry)
|
||||
}
|
||||
|
||||
assert.Len(t, byType, wantCount)
|
||||
|
||||
Reference in New Issue
Block a user