[hotfix][go] harden NewCell creation checks
diff --git a/statefun-sdk-go/v3/pkg/statefun/internal/cell.go b/statefun-sdk-go/v3/pkg/statefun/internal/cell.go
index f3479c8..16f7e42 100644
--- a/statefun-sdk-go/v3/pkg/statefun/internal/cell.go
+++ b/statefun-sdk-go/v3/pkg/statefun/internal/cell.go
@@ -43,7 +43,7 @@
typeTypeName: typeTypeName,
}
- if state.StateValue != nil {
+ if state.StateValue != nil && state.StateValue.HasValue {
c.hasValue = true
c.buf = state.StateValue.Value
}
diff --git a/statefun-sdk-go/v3/pkg/statefun/internal/cell_test.go b/statefun-sdk-go/v3/pkg/statefun/internal/cell_test.go
index 198c74a..d59096e 100644
--- a/statefun-sdk-go/v3/pkg/statefun/internal/cell_test.go
+++ b/statefun-sdk-go/v3/pkg/statefun/internal/cell_test.go
@@ -23,6 +23,39 @@
"testing"
)
+func TestNewCell(t *testing.T) {
+ cell := NewCell(&protocol.ToFunction_PersistedValue{
+ StateName: "state",
+ }, "typename")
+
+ assert.False(t, cell.HasValue(), "cell should not have a value")
+ assert.Equal(t, cell.typeTypeName, "typename")
+
+ cell = NewCell(&protocol.ToFunction_PersistedValue{
+ StateName: "state",
+ StateValue: &protocol.TypedValue{
+ Typename: "blah",
+ HasValue: false,
+ Value: []byte{1, 1, 1, 1},
+ },
+ }, "typename")
+
+ assert.False(t, cell.HasValue(), "cell should not have a value")
+ assert.Equal(t, cell.typeTypeName, "typename")
+
+ cell = NewCell(&protocol.ToFunction_PersistedValue{
+ StateName: "state",
+ StateValue: &protocol.TypedValue{
+ Typename: "blah",
+ HasValue: true,
+ Value: []byte{1, 1, 1, 1},
+ },
+ }, "typename")
+
+ assert.True(t, cell.HasValue(), "cell should have a value")
+ assert.Equal(t, cell.typeTypeName, "typename")
+}
+
func TestCellReadWrite(t *testing.T) {
cell := NewCell(&protocol.ToFunction_PersistedValue{
StateName: "state",