v0.275.0: a backup's data and its version travel together (R-696, 07 §6.6, D4 option A); R-695, R-691, R-694
gates / gates (push) Successful in 23s
gates / gates (push) Successful in 23s
The unit's data files are stamped with the versions that wrote them; the capture keeps the definition the data belongs to; a restore never starts data under another version's definition (unit restores refuse a mismatch; the off-site restore writes the snapshot's definition); every tier's time is its data's; the conversion-copy release needs a dump on the new engine. File-browser sync single-flight + no empty kept folder (R-695); the kept view joins the folder's owning group, language switch resyncs (R-691); a restore-generated login is not shown as the password (R-694). Red-proofs in felhom.eu/documentation/audits/version-travel-2026-09-26/. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"gitea.dooplex.hu/admin/felhom-controller/internal/stacks"
|
||||
)
|
||||
|
||||
// R-694 (v0.275.0) — a deployed app whose admin login was GENERATED by a restore: the page shows no value
|
||||
// for it and says the old password is the one that works; an app without that record renders as before.
|
||||
// Rendered through the production template path (renderI18nCase), both languages.
|
||||
func TestR694_TheDeployPageDoesNotOfferAGeneratedLogin(t *testing.T) {
|
||||
s := i18nTestServer(t)
|
||||
base := func() map[string]interface{} { return i18nDeployData(true, stacks.StateRunning, 1) }
|
||||
restored := func() map[string]interface{} {
|
||||
d := base()
|
||||
d["DeployedFieldValues"] = map[string]string{"SUBDOMAIN": "paste"} // the handler removed the value
|
||||
d["RestoredLogins"] = map[string]bool{"ADMIN_PASSWORD": true}
|
||||
return d
|
||||
}
|
||||
hu := renderI18nCase(t, s, "hu", i18nCase{"r694", "deploy", restored})
|
||||
if !strings.Contains(hu, "Mentésből töltötted vissza") || strings.Contains(hu, "rejtett érték") || strings.Contains(hu, "Telepítéskor beállított kezdeti jelszó") {
|
||||
t.Fatalf("hu page does not say to use the old password, or still shows a value")
|
||||
}
|
||||
en := renderI18nCase(t, s, "en", i18nCase{"r694", "deploy", restored})
|
||||
if !strings.Contains(en, "Restored from a backup: log in with the password that was valid when the backup was taken") {
|
||||
t.Fatal("en page lacks the sentence")
|
||||
}
|
||||
plain := renderI18nCase(t, s, "hu", i18nCase{"r694-plain", "deploy", base})
|
||||
if strings.Contains(plain, "Mentésből töltötted vissza") || !strings.Contains(plain, "Telepítéskor beállított kezdeti jelszó") {
|
||||
t.Fatal("an app without restored_logins changed")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user