mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-19 00:56:16 +00:00
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>
65 lines
1.6 KiB
Go
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)
|
|
}
|
|
}
|