go-scm/collect/state_extra_test.go
Virgil dd59b177c6
Some checks failed
Security Scan / security (push) Failing after 10s
Test / test (push) Successful in 2m2s
chore(ax): normalise test naming and usage annotations
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-30 06:37:20 +00:00

78 lines
1.7 KiB
Go

// SPDX-License-Identifier: EUPL-1.2
package collect
import (
"testing"
"dappco.re/go/core/io"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestState_Get_Good_ReturnsCopy_Good(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_Good(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_Good(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_Good(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)
}