diff --git a/internal/app/pactproxy/interaction.go b/internal/app/pactproxy/interaction.go index e770b6b..cac6617 100644 --- a/internal/app/pactproxy/interaction.go +++ b/internal/app/pactproxy/interaction.go @@ -333,7 +333,7 @@ func (i *Interaction) loadValuesFromSource(constraint interactionConstraint, int } for i, v := range constraint.Values { - values[i], _ = jsonpath.Get(v.(string), sourceRequest) + values[i], _ = jsonpath.Get(v.(string), map[string]interface{}(sourceRequest)) } return values, nil diff --git a/internal/app/pactproxy/interaction_test.go b/internal/app/pactproxy/interaction_test.go index d615151..ed20176 100644 --- a/internal/app/pactproxy/interaction_test.go +++ b/internal/app/pactproxy/interaction_test.go @@ -618,3 +618,50 @@ func Test_getPathRegex(t *testing.T) { }) } } + +func Test_loadValuesFromSource(t *testing.T) { + lastRequest := map[string]any{ + "body": map[string]any{ + "name": "sam", + }, + } + tests := []*struct { + name string + sourceInteraction *Interaction + constraints interactionConstraint + want interface{} + wantErr bool + }{ + { + name: "", + sourceInteraction: &Interaction{ + Alias: "first-interaction", + LastRequest: lastRequest, + }, + constraints: interactionConstraint{ + Interaction: "first-interaction", + Path: "$.path", + Values: []interface{}{"$.body.name"}, + Format: "/v1/resource/%s/subresource", + Source: "", + }, + want: []interface{}{"sam"}, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + i := &Interaction{} + inter := &Interactions{} + inter.Store(tt.sourceInteraction) + got, err := i.loadValuesFromSource(tt.constraints, inter) + if tt.wantErr { + assert.NotNil(t, err) + } else { + assert.Nil(t, err) + } + assert.Equal(t, tt.want, got) + }) + } +}