I’m writing a Plug which verifies a signature in the header of a request. The signature is the SHA256 HMAC hash of the request body signed with a secret. I’m having trouble testing this because I don’t know how to put the request body in the %Conn{} to run it through the plug. Setting up the headers are easy with put_req_header/3. Is there an equivalent for setting the body?
I’m trying to setup my connection like this in my test:
I can see that working for a test. I think part of my problem is I got off track when Plug.Conn.read_body/2 returned nothing. This isn’t due to setting the body incorrectly, however. It’s part of this long issue where the request body can only be read once - and that happens when Plug.Parsers is called.
I tried to use this solution to populate a %Plug.Conn{}'s body_params key; however, the conn.body_params was set to %{} after calling conn = post(conn, "/path") in my test. However, when I simply wrote it thus: