Skip to content

Commit

Permalink
[pocketbase#1365] fixed Record.MergeExpand panic
Browse files Browse the repository at this point in the history
  • Loading branch information
ganigeorgiev committed Dec 24, 2022
1 parent f91f009 commit 4abc8ae
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
4 changes: 4 additions & 0 deletions models/record.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,10 @@ func (m *Record) SetExpand(expand map[string]any) {
// then both old and new records will be merged into a new slice (aka. a :merge: [b,c] => [a,b,c]).
// Otherwise the "old" expanded record will be replace with the "new" one (aka. a :merge: aNew => aNew).
func (m *Record) MergeExpand(expand map[string]any) {
if m.expand == nil && len(expand) > 0 {
m.expand = make(map[string]any)
}

for key, new := range expand {
old, ok := m.expand[key]
if !ok {
Expand Down
43 changes: 42 additions & 1 deletion models/record_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ func TestRecordSetAndGetExpand(t *testing.T) {
}
}

func TestRecordMergeExpandDirect(t *testing.T) {
func TestRecordMergeExpand(t *testing.T) {
collection := &models.Collection{}
m := models.NewRecord(collection)
m.Id = "m"
Expand Down Expand Up @@ -467,6 +467,47 @@ func TestRecordMergeExpandDirect(t *testing.T) {
}
}

func TestRecordMergeExpandNilCheck(t *testing.T) {
collection := &models.Collection{}

scenarios := []struct {
name string
expand map[string]any
expected string
}{
{
"nil expand",
nil,
`{"collectionId":"","collectionName":"","created":"","id":"","updated":""}`,
},
{
"empty expand",
map[string]any{},
`{"collectionId":"","collectionName":"","created":"","id":"","updated":""}`,
},
{
"non-empty expand",
map[string]any{"test": models.NewRecord(collection)},
`{"collectionId":"","collectionName":"","created":"","expand":{"test":{"collectionId":"","collectionName":"","created":"","id":"","updated":""}},"id":"","updated":""}`,
},
}

for _, s := range scenarios {
m := models.NewRecord(collection)
m.MergeExpand(s.expand)

raw, err := json.Marshal(m)
if err != nil {
t.Fatal(err)
}
rawStr := string(raw)

if rawStr != s.expected {
t.Fatalf("[%s] Expected \n%v, \ngot \n%v", s.name, s.expected, rawStr)
}
}
}

func TestRecordSchemaData(t *testing.T) {
collection := &models.Collection{
Type: models.CollectionTypeAuth,
Expand Down

0 comments on commit 4abc8ae

Please sign in to comment.