diff --git a/.travis.yml b/.travis.yml index 59eff99..6c27f31 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: go go: - - 1.11 + - 1.12 script: - make test diff --git a/README.md b/README.md index 2f7fc86..d52cb4d 100644 --- a/README.md +++ b/README.md @@ -238,8 +238,13 @@ You can use variable data in response. The variables will be defined as tags lik - request.url (full url with scheme, hostname, port, path and query parameters) - request.autority (return scheme, hostname and port (optional)) - request.body - - request.body."*key*" (both `application/json` and `application/x-www-form-urlencoded requests) - - request.body."*deep*"."*key*" (only for `application/json` requests) + +You can extract information from the request body too, using a dot notation path: + + - request.body."*key*" (support for `application/json`, `application/xml` and `application/x-www-form-urlencoded` requests) + - request.body."*deep*"."*key*" (support for `application/json`, `application/xml` requests) + +Quick overview of the path syntax available to extract values form the request: [https://github.com/tidwall/gjson#path-syntax] (https://github.com/tidwall/gjson#path-syntax) **External streams:** Perfect for embedding big payloads or getting data from another service. @@ -546,7 +551,7 @@ You can always disable this behavior adding the following flag `-server-statisti Clone this repository to ```$GOPATH/src/github.com/jmartin82/mmock``` and type ```go get .```. -Requires Go 1.11+ to build. +Requires Go 1.12+ to build. If you make any changes, run ```go fmt ./...``` before submitting a pull request. diff --git a/go.mod b/go.mod index a3a4116..0029680 100644 --- a/go.mod +++ b/go.mod @@ -1,29 +1,21 @@ module github.com/jmartin82/mmock +go 1.12 + require ( github.com/azer/url-router v0.0.0-20140924232216-1a0aa252538c github.com/basgys/goxml2json v1.1.0 - github.com/bitly/go-simplejson v0.5.0 // indirect - github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect - github.com/corpix/uarand v0.0.0 // indirect + github.com/corpix/uarand v0.1.0 // indirect github.com/elazarl/go-bindata-assetfs v1.0.0 - github.com/fatih/color v1.7.0 // indirect github.com/ghodss/yaml v1.0.0 github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428 github.com/joeljunstrom/go-luhn v0.0.0-20190413165225-1e071b33b576 - github.com/kr/pretty v0.1.0 // indirect github.com/labstack/echo v3.3.10+incompatible - github.com/labstack/gommon v0.2.8 // indirect - github.com/mattn/go-colorable v0.1.1 // indirect - github.com/mattn/go-isatty v0.0.7 // indirect - github.com/myesui/uuid v1.0.0 // indirect + github.com/labstack/gommon v0.2.9 // indirect github.com/radovskyb/watcher v1.0.6 - github.com/rakyll/gotest v0.0.0-20180125184505-86f0749cd8cc // indirect github.com/ryanuber/go-glob v1.0.0 github.com/stathat/go v1.0.0 - github.com/stretchr/testify v1.3.0 // indirect + github.com/tidwall/gjson v1.3.2 github.com/twinj/uuid v1.0.0 - github.com/valyala/fasttemplate v1.0.1 // indirect - golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c - gopkg.in/yaml.v2 v2.2.2 // indirect + golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 ) diff --git a/go.sum b/go.sum index 8c11322..59f9265 100644 --- a/go.sum +++ b/go.sum @@ -1,54 +1,49 @@ +github.com/Masterminds/glide v0.13.2/go.mod h1:STyF5vcenH/rUqTEv+/hBXlSTo7KYwg2oc2f4tzPWic= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/vcs v1.13.0/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA= github.com/azer/url-router v0.0.0-20140924232216-1a0aa252538c h1:vpYPra7G75NhuxN28VqQhTepM8a6c201AsJWdRaINqY= github.com/azer/url-router v0.0.0-20140924232216-1a0aa252538c/go.mod h1:YT0FE3RD8ecPJBNkCdpeEAdZXPZgD2CqcRtpwuzjt9M= github.com/basgys/goxml2json v1.1.0 h1:4ln5i4rseYfXNd86lGEB+Vi652IsIXIvggKM/BhUKVw= github.com/basgys/goxml2json v1.1.0/go.mod h1:wH7a5Np/Q4QoECFIU8zTQlZwZkrilY0itPfecMw41Dw= -github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/corpix/uarand v0.0.0 h1:mNbzro1GwUcZ1hmO2rWXytkR3JBxNxxctzjyuhO+Aig= -github.com/corpix/uarand v0.0.0/go.mod h1:JSm890tOkDN+M1jqN8pUGDKnzJrsVbJwSMHBY4zwz7M= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA= +github.com/corpix/uarand v0.1.0 h1:HgE/0ismPNM4n3z2VeZxzwpMJiN4uSZ+SMpxxvoyffY= +github.com/corpix/uarand v0.1.0/go.mod h1:SFKZvkcRoLqVRFZ4u25xPmp6m9ktANfbpXZ7SJ0/FNU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk= github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428 h1:Mo9W14pwbO9VfRe+ygqZ8dFbPpoIK1HFrG/zjTuQ+nc= github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428/go.mod h1:uhpZMVGznybq1itEKXj6RYw9I71qK4kH+OGMjRC4KEo= github.com/joeljunstrom/go-luhn v0.0.0-20190413165225-1e071b33b576 h1:k82KNEG8vk59eHv/8xwBUh4dSR/t1wPiht4aDJm0SOY= github.com/joeljunstrom/go-luhn v0.0.0-20190413165225-1e071b33b576/go.mod h1:pE5zuSeg07RZZfWS158WpV7oUWb1++8T2jZ/UklLM3E= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg= github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= -github.com/labstack/gommon v0.2.8 h1:JvRqmeZcfrHC5u6uVleB4NxxNbzx6gpbJiQknDbKQu0= -github.com/labstack/gommon v0.2.8/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4= -github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/myesui/uuid v1.0.0 h1:xCBmH4l5KuvLYc5L7AS7SZg9/jKdIFubM7OVoLqaQUI= -github.com/myesui/uuid v1.0.0/go.mod h1:2CDfNgU0LR8mIdO8vdWd8i9gWWxLlcoIGGpSNgafq84= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/labstack/gommon v0.2.9 h1:heVeuAYtevIQVYkGj6A41dtfT91LrvFG220lavpWhrU= +github.com/labstack/gommon v0.2.9/go.mod h1:E8ZTmW9vw5az5/ZyHWCp0Lw4OH2ecsaBP1C/NKavGG4= +github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/ngdinhtoan/glide-cleanup v0.2.0/go.mod h1:UQzsmiDOb8YV3nOsCxK/c9zPpCZVNoHScRE3EO9pVMM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/radovskyb/watcher v1.0.6 h1:8WIQ9UxEYMZjem1OwU7dVH94DXXk9mAIE1i8eqHD+IY= github.com/radovskyb/watcher v1.0.6/go.mod h1:78okwvY5wPdzcb1UYnip1pvrZNIVEIh/Cm+ZuvsUYIg= -github.com/rakyll/gotest v0.0.0-20180125184505-86f0749cd8cc h1:hrzpgS8mnUi65ieVrD3TKJMxHP84bzmybMTQIdK/XhM= -github.com/rakyll/gotest v0.0.0-20180125184505-86f0749cd8cc/go.mod h1:iln+RRtJaJ52lKwqrSmNgQYw32Fk16CgChX85eFqBgI= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/stathat/go v1.0.0 h1:HFIS5YkyaI6tXu7JXIRRZBLRvYstdNZm034zcCeaybI= github.com/stathat/go v1.0.0/go.mod h1:+9Eg2szqkcOGWv6gfheJmBBsmq9Qf5KDbzy8/aYYR0c= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/tidwall/gjson v1.3.2 h1:+7p3qQFaH3fOMXAJSrdZwGKcOO/lYdGS0HqGhPqDdTI= +github.com/tidwall/gjson v1.3.2/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= +github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc= +github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/twinj/uuid v1.0.0 h1:fzz7COZnDrXGTAOHGuUGYd6sG+JMq+AoE7+Jlu0przk= github.com/twinj/uuid v1.0.0/go.mod h1:mMgcE1RHFUFqe5AfiwlINXisXfDGro23fWdPUfOMjRY= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= @@ -57,14 +52,13 @@ github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8W github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c h1:uOCk1iQW6Vc18bnC13MfzScl+wdKBmM9Y9kU7Z83/lw= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/internal/vars/evaluator_test.go b/internal/vars/evaluator_test.go index 8f50ecf..b0bbae7 100644 --- a/internal/vars/evaluator_test.go +++ b/internal/vars/evaluator_test.go @@ -446,13 +446,19 @@ func TestReplaceJsonBodyEncodedTags(t *testing.T) { "email": "hilari@hilarimoragrega.com", "age": 34, "height": 5.66, - "weight": null, + "weight": , "active": true, "level": -8, - "friends": ["jordi.martin@gmail.com","alfons.faubert@gmail.com"], + "friends": [ + "jordi.martin@gmail.com", + "alfons.faubert@gmail.com" + ], "first-friend": "jordi.martin@gmail.com", "last-friend": "alfons.faubert@gmail.com", - "attributes": {"programming":15,"trolling":27}, + "attributes": { + "programming": 15, + "trolling": 27 + }, "tracking": { "uuid": "0bd74115-2307-458f-8288-b726724045ef", "deeper": { @@ -461,7 +467,84 @@ func TestReplaceJsonBodyEncodedTags(t *testing.T) { } } ` + mock := mock.Definition{Request: req, Response: res} + varsProcessor := getProcessor() + varsProcessor.Eval(&req, &mock) + if mock.Response.Body != expected { + t.Error("Replaced tags from body form do not match", mock.Response.Body) + } +} + +func TestReplaceXmlBodyEncodedTags(t *testing.T) { + req := mock.Request{} + req.Headers = make(mock.Values) + req.Headers["Content-Type"] = []string{"application/xml"} + req.Body = ` + + + true + 34 + + 15 + 27 + + hilari@hilarimoragrega.com + + jordi.martin@gmail.com + alfons.faubert@gmail.com + + 5.66 + -8 + + do not return + + nesting is ok + + 0bd74115-2307-458f-8288-b726724045ef + + +` + res := mock.Response{} + res.Body = ` + + + {{request.root.body.active}} + {{request.body.root.email}} + {{request.body.root.email}} + + {{request.body.root.friends.element.0}} + {{request.body.root.friends.element.1}} + + {{request.body.root.level}} + + + {{request.body.root.tracking.nesting.level}} + + {{request.body.root.tracking.uuid}} + + +` + + expected := ` + + + {{request.root.body.active}} + hilari@hilarimoragrega.com + hilari@hilarimoragrega.com + + jordi.martin@gmail.com + alfons.faubert@gmail.com + + -8 + + + nesting is ok + + 0bd74115-2307-458f-8288-b726724045ef + + +` mock := mock.Definition{Request: req, Response: res} varsProcessor := getProcessor() varsProcessor.Eval(&req, &mock) diff --git a/internal/vars/request.go b/internal/vars/request.go index e2f1441..2a23f60 100644 --- a/internal/vars/request.go +++ b/internal/vars/request.go @@ -1,16 +1,17 @@ package vars import ( - "encoding/json" "fmt" - "github.com/jmartin82/mmock/pkg/mock" "net/url" "os" "sort" - "strconv" "strings" + "github.com/jmartin82/mmock/pkg/mock" + urlmatcher "github.com/azer/url-router" + xj "github.com/basgys/goxml2json" + "github.com/tidwall/gjson" ) type Request struct { @@ -164,14 +165,14 @@ func (rp Request) getHeaderParam(name string) (string, bool) { } func (rp Request) getBodyParam(name string) (string, bool) { - contentType, found := rp.Request.Headers["Content-Type"] if !found { return "", false } - if strings.HasPrefix(contentType[0], "application/x-www-form-urlencoded") { return rp.getUrlEncodedFormBodyParam(name) + } else if strings.HasPrefix(contentType[0], "application/xml") { + return rp.getXmlBodyParam(name) } else if strings.HasPrefix(contentType[0], "application/json") { return rp.getJsonBodyParam(name) } @@ -179,69 +180,45 @@ func (rp Request) getBodyParam(name string) (string, bool) { return "", false } -func (rp Request) getUrlEncodedFormBodyParam(name string) (string, bool) { - - values, err := url.ParseQuery(rp.Request.Body) +func (rp Request) getXmlBodyParam(name string) (string, bool) { + xml := strings.NewReader(rp.Request.Body) + json, err := xj.Convert(xml) if err != nil { return "", false } - value := values.Get(name) - if value == "" { + value := gjson.Get(json.String(), name) + if !value.Exists() { return "", false } - return value, true -} - -func (rp Request) getJsonBodyParam(name string) (string, bool) { - - hierarchy := strings.Split(name, ".") - - var payload interface{} - if err := json.Unmarshal([]byte(rp.Request.Body), &payload); err != nil { + //TODO: Add support to complex types extraction like arrays or maps + if value.Type == gjson.JSON { return "", false } - for _, value := range hierarchy { - if mapper, ok := payload.(map[string]interface{}); ok { - payload, ok = mapper[value] - - if !ok { - return "", false - } - - continue - } - - if arrayMapper, ok := payload.([]interface{}); ok { - index, err := strconv.Atoi(value) - - if err != nil || index >= len(arrayMapper) { - return "", false - } + return value.String(), true +} - payload = arrayMapper[index] - continue - } +func (rp Request) getJsonBodyParam(name string) (string, bool) { + value := gjson.Get(rp.Request.Body, name) + if !value.Exists() { + return "", false } - - return rp.getJsonValue(payload) + return value.String(), true } -func (rp Request) getJsonValue(object interface{}) (string, bool) { - - stringContent, ok := object.(string) +func (rp Request) getUrlEncodedFormBodyParam(name string) (string, bool) { - if ok { - return stringContent, true + values, err := url.ParseQuery(rp.Request.Body) + if err != nil { + return "", false } - genericContent, err := json.Marshal(object) - - if err == nil { - return string(genericContent), true + value := values.Get(name) + if value == "" { + return "", false } - return "", false + return value, true } diff --git a/internal/vars/stream_test.go b/internal/vars/stream_test.go index 180c673..75770a7 100644 --- a/internal/vars/stream_test.go +++ b/internal/vars/stream_test.go @@ -44,7 +44,7 @@ func TestReadFile(t *testing.T) { func TestHTTPContent(t *testing.T) { st := Stream{} - k := "http.contents(http://example.com)" + k := "http.contents(https://golang.org/)" holders := []string{k} result := st.Fill(holders) @@ -53,7 +53,7 @@ func TestHTTPContent(t *testing.T) { t.Errorf("Stream key not found") } - if !strings.Contains(v[0], "Example") { + if !strings.Contains(v[0], "Go") { t.Errorf("Couldn't get the content. Value: %s", v) } }