stretchr / testify

A toolkit with common assertions and mocks that plays nicely with the standard library
MIT License
23.08k stars 1.58k forks source link

Http Assertions does not allow the creation of a body #925

Open ihulsbus opened 4 years ago

ihulsbus commented 4 years ago

Hi,

It seems like the HTTP Assert package does not allow me to specify a body to pass in a POST request for example. Looking at the HTTPBody() function, the body argument is set to nil: req, err := http.NewRequest(method, url+"?"+values.Encode(), nil)

Is this by design, or am I looking at a missing feature?

Cheers,

mvdkleijn commented 4 years ago

We feel that it's reasonable to want to be able to set the body in certain cases. If you'd like to help out, feel free to open a PR.

gohargasparyan commented 4 years ago

Hi @mvdkleijn , I just made changes for the issue, tried to push to a new branch and got 403, do I need some permissions to make PR?

mvdkleijn commented 4 years ago

Hi @mvdkleijn , I just made changes for the issue, tried to push to a new branch and got 403, do I need some permissions to make PR?

This sounds like you're new or perhaps I'm misunderstanding? :smile:

The way you create a PR is by forking the repository to your own copy, create a branch with your changes pushed to it and then use the Github UI to create the PR. Basically that will be a request for us to merge changes from your fork into our original copy.

It sounds like you were trying to push to a branch in the main Testify repository which is indeed off limits to all but the maintainers.

Hope that helps!

gohargasparyan commented 4 years ago

Yeah first time trying to contribute to open source, thanks, it helps :)

mvdkleijn commented 4 years ago

Yeah first time trying to contribute to open source, thanks, it helps :)

No worries, feel free to ask more if desired. The Github docs also provide a lot of information on how to do things.

Once you have the PR in place, I'll take a look and see if anything needs adjustment and once satisfied all looks good, we can merge it. :+1:

gohargasparyan commented 4 years ago

No worries, it was straight forward. https://github.com/stretchr/testify/pull/938

fazypng commented 3 years ago

@mvdkleijn hi i need help. very much help. i just joined the Github community yesterday and i don't understand a single thing I've been reading here 😩

mvdkleijn commented 3 years ago

@mvdkleijn hi i need help. very much help. i just joined the Github community yesterday and i don't understand a single thing I've been reading here 😩

I'm not sure what exactly your question is that I could help with...?

lwlach commented 1 year ago

should this issue be closed?

mvdkleijn commented 1 year ago

Not really, since the merged PR was reverted by @boyan-soubachov and aa such the issue is still valid.

ossan-dev commented 1 year ago

Hello @boyan-soubachov, if you could share the details, I'm gonna file a PR to integrate this functionality. Let me know, thanks.

dolmen commented 1 year ago

@ossan-dev See #938.

ossan-dev commented 1 year ago

Hey @dolmen do you mean this issue could be closed as soon as #938 will be merged? I apologize for the silly question but I'm a beginner of open-source contributions.

hendrywiranto commented 11 months ago

Hey @dolmen do you mean this issue could be closed as soon as #938 will be merged? I apologize for the silly question but I'm a beginner of open-source contributions.

see the details in https://github.com/stretchr/testify/pull/938#issuecomment-660009610

myusko commented 7 months ago

Is an issue still relevant? cc @arjunmahishi

arjunmahishi commented 7 months ago

@myusko Looks like the linked PR's comments are still not addressed.

Is an issue still relevant?

Yes. The request raised in this issue is still not satisfied.


Based on my understanding of reading the comments on this issue and the PR, it looks like the PR was raised with v2 in mind. But that might not be happening. So, the next logical step for this would be to follow either suggestion 'b' or 'c' in this comment. 'c' being the best case scenario.

st3penta commented 7 months ago

Any ideas on how this could be done without introducing breaking changes?

I can't seem to find a solution that doesn't involve an extension of the surface of the library (the b scenario, in this comment)

brackendawson commented 7 months ago

1491 is related. What do the HTTP handler assertions offer over calling the handler with a httptest.ResponseRecorder?

st3penta commented 7 months ago

The only http assertions available right now are on the response status codes (HTTPSuccess, HTTPRedirect, HTTPStatusCode, etc) and body (HTTPBodyContains, HTTPBodyNotContains) (I hope this is what you asked, i'm not sure i understood your question!)

brackendawson commented 7 months ago

I mean, why are the HTTP assertions better than this:

r := httptest.NewRequest(http.MethodGet, "http://example.com/biscuit", nil)
w := httptest.NewRecorder()
myHandler(w, r)
assert.Equal(t, http.StatusOK, w.Code)
assert.Equal(t, "custard cream", w.Body.String())

This only calls the handler once, so is a better test as it doesn't allow a stateful handler to sneak incorrect behaviour past the test. Like returning status code 500 with a correct body for every request after the first, for example.

st3penta commented 7 months ago

I agree that your example is much more effective. However those methods are part of the promise too, so what we're supposed to do with them?

brackendawson commented 7 months ago

I agree that your example is much more effective. However those methods are part of the promise too, so what we're supposed to do with them?

Maintain the existing ones. 🙂

KianYang-Lee commented 4 months ago

I mean, why are the HTTP assertions better than this:

r := httptest.NewRequest(http.MethodGet, "http://example.com/biscuit", nil)
w := httptest.NewRecorder()
myHandler(w, r)
assert.Equal(t, http.StatusOK, w.Code)
assert.Equal(t, "custard cream", w.Body.String())

This only calls the handler once, so is a better test as it doesn't allow a stateful handler to sneak incorrect behaviour past the test. Like returning status code 500 with a correct body for every request after the first, for example.

Suggest to include this example in documentation and close this issue