fileserver/lib/restbed-4.8/test/unit/source/request_suite.cpp

178 lines
5.1 KiB
C++

//System Includes
#include <map>
#include <string>
//Project Includes
#include <corvusoft/restbed/request.hpp>
//External Includes
#include <catch.hpp>
//System Namespaces
using std::map;
using std::string;
using std::multimap;
//Project Namespaces
using restbed::Request;
//External Namespaces
TEST_CASE( "validate default instance values", "[request]" )
{
const Request request;
REQUIRE( request.get_port( ) == 80 );
REQUIRE( request.get_host( ) == "" );
REQUIRE( request.get_version( ) == 1.1 );
REQUIRE( request.get_path( ) == "/" );
REQUIRE( request.get_body( ).empty( ) );
REQUIRE( request.get_method( ) == "GET" );
REQUIRE( request.get_protocol( ) == "HTTP" );
REQUIRE( request.get_headers( ).empty( ) );
REQUIRE( request.get_response( ) == nullptr );
REQUIRE( request.get_path_parameters( ).empty( ) );
REQUIRE( request.get_query_parameters( ).empty( ) );
REQUIRE( request.has_query_parameter( "q" ) == false );
REQUIRE( request.has_path_parameter( "id" ) == false );
REQUIRE( request.has_header( "Content-Type" ) == false );
}
TEST_CASE( "confirm default destructor throws no exceptions", "[request]" )
{
auto request = new Request;
REQUIRE_NOTHROW( delete request );
}
TEST_CASE( "validate setters modify default values", "[request]" )
{
Request request;
request.set_body( "abc" );
request.set_port( 1984 );
request.set_version( 1.0 );
request.set_path( "/test case" );
request.set_host( "www.google.co.uk" );
request.set_method( "CONNECT" );
request.set_protocol( "HTTPS" );
multimap< string, string > headers { { "X-CUST", "1223" } };
request.set_headers( headers );
multimap< string, string > parameters { { "q", "search" } };
request.set_query_parameters( parameters );
REQUIRE( request.get_port( ) == 1984 );
REQUIRE( request.get_host( ) == "www.google.co.uk" );
REQUIRE( request.get_version( ) == 1.0 );
REQUIRE( request.get_path( ) == "/test case" );
REQUIRE( request.get_body( ).empty( ) == false );
REQUIRE( request.get_method( ) == "CONNECT" );
REQUIRE( request.get_protocol( ) == "HTTPS" );
REQUIRE( request.get_headers( ) == headers );
REQUIRE( request.get_response( ) == nullptr );
REQUIRE( request.get_path_parameters( ).empty( ) );
REQUIRE( request.get_query_parameters( ) == parameters );
REQUIRE( request.has_query_parameter( "q" ) == true );
REQUIRE( request.has_header( "X-CUST" ) == true );
}
TEST_CASE( "validate getter default value", "[request]" )
{
const Request request;
SECTION( "integer" )
{
int value = request.get_header( "Var", 12 );
REQUIRE( value == 12 );
}
SECTION( "unsigned integer" )
{
unsigned int value = request.get_header( "Var", 6 );
REQUIRE( value == 6 );
}
SECTION( "long" )
{
long value = request.get_header( "Var", 54 );
REQUIRE( value == 54 );
}
SECTION( "long long" )
{
long long value = request.get_header( "Var", 66 );
REQUIRE( value == 66 );
}
SECTION( "unsigned long" )
{
unsigned long default_value = static_cast< unsigned long >( -33 );
unsigned long value = request.get_header( "Var", default_value );
REQUIRE( value == default_value );
}
SECTION( "unsigned long long" )
{
long long value = request.get_header( "Var", -6 );
REQUIRE( value == -6 );
}
SECTION( "float" )
{
float value = request.get_header( "Var", 3.14f );
REQUIRE( value == 3.14f );
}
SECTION( "double" )
{
double value = request.get_header( "Var", 34.999443 );
REQUIRE( value == 34.999443 );
}
SECTION( "string" )
{
string header = request.get_header( "Var", "open" );
REQUIRE( header == "open" );
}
}
TEST_CASE( "validate set_header overrides previous value", "[request]" )
{
Request request;
request.set_header( "Content-Type", "application/json" );
REQUIRE( "application/json" == request.get_header( "Content-Type" ) );
request.set_header( "Content-Type", "application/xml" );
REQUIRE( "application/xml" == request.get_header( "Content-Type" ) );
const auto headers = request.get_headers( );
REQUIRE( headers.size( ) == 1 );
const auto expectation = multimap< string, string >
{
{ "Content-Type", "application/xml" }
};
REQUIRE( headers == expectation );
}
TEST_CASE( "validate add_header does not override a previous value", "[request]" )
{
Request request;
request.add_header( "Content-Type", "application/json" );
REQUIRE( "application/json" == request.get_header( "Content-Type" ) );
request.add_header( "Content-Type", "application/xml" );
REQUIRE( "application/json" == request.get_header( "Content-Type" ) );
const auto headers = request.get_headers( );
REQUIRE( headers.size( ) == 2 );
const auto expectation = multimap< string, string >
{
{ "Content-Type", "application/json" },
{ "Content-Type", "application/xml" }
};
REQUIRE( headers == expectation );
}