Files
Tobias GesellchenandClaude Opus 4.7 feadc478d5 test: sweep example data in test files to RFC-5737 + placeholders
Mirrors the .md/.txt sweep across all tracked _test.go, testdata XML,
and .http integration files. Test files are self-contained (producer
+ assertion in the same file), so the matched-pair swap stays green
under `go test ./...`.

Mapping applied:
  192.168.178.[0-9]+   → 192.0.2.[same]
  192.168.1.[0-9]+     → 192.0.2.[same]
  Sound Machinechen    → Living Room SoundTouch
  A Sound Machine      → Kitchen SoundTouch
  A81B6A536A98 + case/separator variants → AABBCCDDEEFF (etc.)
  A81B6A849D99         → AABBCCDDEE01
  A81B6A849D88         → AABBCCDDEE03
  A81B6A536A09         → AABBCCDDEE04
  884AEAEEBD27         → AABBCCDDEE02
  3230304              → 1000001
  9569497              → 1000002

Two semantic fixes alongside the bulk swap:

- pkg/service/zeroconf/zeroconf_test.go: the "private 192" and
  "strips query" cases pin acceptance of RFC-1918 192.168/16. They
  must use a real 192.168 value; doc-range IPs would (correctly) be
  rejected by validateZcBaseURL. Switched to 192.168.10.10 — generic
  enough not to match any home LAN default, real enough for the
  validator. Added a comment explaining why this single test still
  carries a 192.168 literal.

- pkg/service/setup/setup_test.go: TestTestDNSRedirection mocks the
  device's `od -An -tu1` byte output, which is space-separated
  octets ("192 168 1 100"). My sed only matched the dot-separated
  form, so the mock was returning the old IP while the test
  assertions had moved to the doc range. Updated to " 192 0 2 100".

go build ./... clean. go test ./... clean (only TestDocsConsistency
remains failing, which is a pre-existing/untracked-file issue).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 22:05:13 +02:00

65 lines
1.6 KiB
Go

package datastore
import (
"os"
"testing"
"github.com/gesellix/bose-soundtouch/pkg/models"
)
func TestSaveDeviceInfo_MergesName(t *testing.T) {
tempDir, err := os.MkdirTemp("", "datastore-test")
if err != nil {
t.Fatalf("Failed to create temp dir: %v", err)
}
defer os.RemoveAll(tempDir)
ds := NewDataStore(tempDir)
account := "1234567"
device := "001122334455"
// 1. Initial save with name
info1 := &models.ServiceDeviceInfo{
DeviceID: device,
AccountID: account,
Name: "Living Room",
ProductCode: "SoundTouch 20",
}
if err := ds.SaveDeviceInfo(account, device, info1); err != nil {
t.Fatalf("First SaveDeviceInfo failed: %v", err)
}
// 2. Verify name is saved
saved1, err := ds.GetDeviceInfo(account, device)
if err != nil {
t.Fatalf("First GetDeviceInfo failed: %v", err)
}
if saved1.Name != "Living Room" {
t.Errorf("Expected name 'Living Room', got '%s'", saved1.Name)
}
// 3. Save with empty name (simulating power_on)
info2 := &models.ServiceDeviceInfo{
DeviceID: device,
AccountID: account,
Name: "",
ProductCode: "SoundTouch 20",
IPAddress: "192.0.2.100",
}
if err := ds.SaveDeviceInfo(account, device, info2); err != nil {
t.Fatalf("Second SaveDeviceInfo failed: %v", err)
}
// 4. Verify name is preserved
saved2, err := ds.GetDeviceInfo(account, device)
if err != nil {
t.Fatalf("Second GetDeviceInfo failed: %v", err)
}
if saved2.Name != "Living Room" {
t.Errorf("Expected name 'Living Room' to be preserved, but got '%s'", saved2.Name)
}
if saved2.IPAddress != "192.0.2.100" {
t.Errorf("Expected IPAddress '192.0.2.100', got '%s'", saved2.IPAddress)
}
}