go-scm/collect/state_extra_test.go
Claude 2dcb86738a
Some checks failed
Security Scan / security (push) Failing after 8s
Test / test (push) Failing after 22s
chore: migrate to dappco.re vanity import path
Change module path from forge.lthn.ai/core/go-scm to dappco.re/go/core/scm.
Update all Go source imports for migrated packages:
- go-log  -> dappco.re/go/core/log
- go-io   -> dappco.re/go/core/io
- go-i18n -> dappco.re/go/core/i18n
- go-ws   -> dappco.re/go/core/ws
- api     -> dappco.re/go/core/api

Non-migrated packages (cli, config) left on forge.lthn.ai paths.
Replace directives use local paths (../go, ../go-io, etc.) until the
dappco.re vanity URL server resolves these modules.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 23:54:23 +00:00

76 lines
1.7 KiB
Go

package collect
import (
"testing"
"dappco.re/go/core/io"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestState_Get_Good_ReturnsCopy(t *testing.T) {
m := io.NewMockMedium()
s := NewState(m, "/state.json")
s.Set("test", &StateEntry{Source: "test", Items: 5})
// Get returns a copy, so mutating it shouldn't affect internal state.
got, ok := s.Get("test")
require.True(t, ok)
got.Items = 999
again, ok := s.Get("test")
require.True(t, ok)
assert.Equal(t, 5, again.Items, "internal state should not be mutated")
}
func TestState_Save_Good_WritesJSON(t *testing.T) {
m := io.NewMockMedium()
s := NewState(m, "/data/state.json")
s.Set("src-a", &StateEntry{Source: "src-a", Items: 10, LastID: "abc"})
err := s.Save()
require.NoError(t, err)
// Verify the raw JSON was written.
content, err := m.Read("/data/state.json")
require.NoError(t, err)
assert.Contains(t, content, `"src-a"`)
assert.Contains(t, content, `"abc"`)
}
func TestState_Load_Good_NullJSON(t *testing.T) {
m := io.NewMockMedium()
m.Files["/state.json"] = "null"
s := NewState(m, "/state.json")
err := s.Load()
require.NoError(t, err)
// Null JSON should result in empty entries.
_, ok := s.Get("anything")
assert.False(t, ok)
}
func TestState_SaveLoad_Good_WithCursor(t *testing.T) {
m := io.NewMockMedium()
s := NewState(m, "/state.json")
s.Set("paginated", &StateEntry{
Source: "paginated",
Items: 50,
Cursor: "page_token_abc123",
})
err := s.Save()
require.NoError(t, err)
s2 := NewState(m, "/state.json")
err = s2.Load()
require.NoError(t, err)
entry, ok := s2.Get("paginated")
require.True(t, ok)
assert.Equal(t, "page_token_abc123", entry.Cursor)
}