%% Copyright (c) 2008-2009 Nick Gerakines %% %% Permission is hereby granted, free of charge, to any person %% obtaining a copy of this software and associated documentation %% files (the "Software"), to deal in the Software without %% restriction, including without limitation the rights to use, %% copy, modify, merge, publish, distribute, sublicense, and/or sell %% copies of the Software, and to permit persons to whom the %% Software is furnished to do so, subject to the following %% conditions: %% %% The above copyright notice and this permission notice shall be %% included in all copies or substantial portions of the Software. %% %% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, %% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES %% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND %% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT %% HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, %% WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING %% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR %% OTHER DEALINGS IN THE SOFTWARE. %% %% @author Nick Gerakines [http://socklabs.com/] %% @copyright 2008 Nick Gerakines %% @todo Support cookies. %% @doc Provide testing functionality for web requests. -module(etap_web). -export([simple_200/2, simple_404/2, build_request/4]). %% @doc Fetch a url and verify that it returned a 200 status. simple_200(Url, Desc) -> Request = build_request(get, Url, [], []), Request:status_is(200, Desc). %% @doc Fetch a url and verify that it returned a 404 status. simple_404(Url, Desc) -> Request = build_request(get, Url, [], []), Request:status_is(404, Desc). %% @doc Create and return a request structure. build_request(Method, Url, Headers, Body) when Method==options;Method==get;Method==head;Method==delete;Method==trace -> try http:request(Method, {Url, Headers}, [{autoredirect, false}], []) of {ok, {OutStatus, OutHeaders, OutBody}} -> etap_request:new(Method, Url, Headers, Body, OutStatus, OutHeaders, OutBody); _ -> error catch _:_ -> error end; %% @doc Create and return a request structure. build_request(Method, Url, Headers, Body) when Method == post; Method == put -> ContentType = case lists:keysearch("Content-Type", 1, Headers) of {value, {"Content-Type", X}} -> X; _ -> [] end, try http:request(Method, {Url, Headers, ContentType, Body}, [{autoredirect, false}], []) of {ok, {OutStatus, OutHeaders, OutBody}} -> etap_request:new(Method, Url, Headers, Body, OutStatus, OutHeaders, OutBody); _ -> error catch _:_ -> error end.