package contract import ( "encoding/json" "testing" "github.com/stretchr/testify/require" ) // ValidateAPIResponseEnvelope checks that the response has success, data/error. func ValidateAPIResponseEnvelope(t *testing.T, body []byte, expectSuccess bool) map[string]interface{} { t.Helper() var resp map[string]interface{} require.NoError(t, json.Unmarshal(body, &resp)) success, ok := resp["success"].(bool) require.True(t, ok, "response must have success field") require.Equal(t, expectSuccess, success) if expectSuccess { require.Contains(t, resp, "data") require.Nil(t, resp["error"]) } else { require.Contains(t, resp, "error") } return resp } // RequireDataKeys checks that data has the required top-level keys. func RequireDataKeys(t *testing.T, data map[string]interface{}, keys ...string) { t.Helper() for _, k := range keys { require.Contains(t, data, k, "data must contain key %q", k) } }