Browse Source

wip: torrents delete route, also some refactoring

master
Jørgen Lien Sellæg 9 years ago
parent
commit
b34eb6fb9b
  1. 34
      toREST/include/torrents.hpp
  2. 47
      toREST/tests/torrents_test.cpp

34
toREST/include/torrents.hpp

@ -39,6 +39,36 @@ void get(torrent_session &session, response resp, request req) {
} }
*resp << http_response; *resp << http_response;
} }
template <class torrent_session, class request, class response>
void del(torrent_session &session, response resp, request req) {
auto http_response = http::response();
const auto respond = [&](http::status status) {
const auto response_code = http::code(status);
http_response.set_body({{"code", response_code.first}, {"status", response_code.second}});
http_response.set_status(response_code.first);
*resp << http_response;
};
if (!session.is_valid()) {
return respond(http::service_unavailable);
}
auto request_object = util::json::parse(req->content);
if (request_object.is_null()) {
return respond(http::bad_request);
}
if (!request_object.is_object()) {
return respond(http::bad_request);
}
if (request_object.find("info_hash") == request_object.end()) {
return respond(http::bad_request);
}
}
template <class settings, class torrent_session, class request, class response> template <class settings, class torrent_session, class request, class response>
void post(settings opts, torrent_session &session, response resp, request req) { void post(settings opts, torrent_session &session, response resp, request req) {
auto http_response = http::response(); auto http_response = http::response();
@ -84,7 +114,7 @@ void post(settings opts, torrent_session &session, response resp, request req) {
} else } else
params.save_path = boost::filesystem::path(opts.root_dir / opts.default_download_dir).string(); params.save_path = boost::filesystem::path(opts.root_dir / opts.default_download_dir).string();
params.flags = params.flags & ~libtorrent::add_torrent_params::flag_paused; params.flags &= ~libtorrent::add_torrent_params::flag_paused;
if (request_object.find("paused") != request_object.end()) { if (request_object.find("paused") != request_object.end()) {
bool paused = false; bool paused = false;
@ -125,7 +155,7 @@ void post(settings opts, torrent_session &session, response resp, request req) {
if (request_object.find("name") != request_object.end()) { if (request_object.find("name") != request_object.end()) {
auto obj = request_object.at("name"); auto obj = request_object.at("name");
if(obj.is_string()) if (obj.is_string())
params.name = obj; params.name = obj;
} }

47
toREST/tests/torrents_test.cpp

@ -47,13 +47,48 @@ SCENARIO("We are running a GET /session/torrents resource") {
} }
} }
const std::string torrent_id = "c0b0a90089710812fe8c37385a4cc2978eabf3e8";
SCENARIO("We are running a DELETE /session/torrents resource") {
auto torrent_session = TestSession();
auto response = std::make_shared<TestResponse>();
auto request = std::make_shared<TestRequest>();
GIVEN("the server is not working properly") {
AND_WHEN("we recive a request") {
tr::session::torrents::del(torrent_session, response, request);
THEN("the server should reply with service unavailable") {
CommonResponse::service_unavailable(response);
}
}
}
GIVEN("the server is working properly") {
torrent_session.valid = true;
WHEN("we recive an invalid request") {
GIVEN("the request doesn't contain valid json") {
request->content << "Not valid";
THEN("the server should reply with bad request") {
tr::session::torrents::del(torrent_session, response, request);
CommonResponse::bad_request(response);
}
}
GIVEN("it is valid json but are missing requred field") {
request->content << nlohmann::json({{"up_speed", "100"}});
THEN("the server should reply with bad request") {
tr::session::torrents::del(torrent_session, response, request);
CommonResponse::bad_request(response);
}
}
}
}
}
SCENARIO("We are running a POST /session/torrents resource") { SCENARIO("We are running a POST /session/torrents resource") {
auto torrent_session = TestSession(); auto torrent_session = TestSession();
auto settings = Config(); auto settings = Config();
auto response = std::make_shared<TestResponse>(); auto response = std::make_shared<TestResponse>();
auto request = std::make_shared<TestRequest>(); auto request = std::make_shared<TestRequest>();
const std::string magnet_hash = "c0b0a90089710812fe8c37385a4cc2978eabf3e8"; const auto magnet_uri = "magnet:?xt=urn:btih:" + torrent_id + "&dn=Taylor Swift&tr=http://tracker.sout.no";
const auto magnet_uri = "magnet:?xt=urn:btih:" + magnet_hash + "&dn=Taylor Swift&tr=http://tracker.sout.no";
GIVEN("the server is not working properly") { GIVEN("the server is not working properly") {
AND_WHEN("we recive a request") { AND_WHEN("we recive a request") {
tr::session::torrents::post(settings, torrent_session, response, request); tr::session::torrents::post(settings, torrent_session, response, request);
@ -69,7 +104,7 @@ SCENARIO("We are running a POST /session/torrents resource") {
request->content << nlohmann::json::object({{"magnet_uri", magnet_uri}}); request->content << nlohmann::json::object({{"magnet_uri", magnet_uri}});
THEN("the server should reply with created") { THEN("the server should reply with created") {
tr::session::torrents::post(settings, torrent_session, response, request); tr::session::torrents::post(settings, torrent_session, response, request);
CommonResponse::created(response, request, "/session/torrents/" + magnet_hash); CommonResponse::created(response, request, "/session/torrents/" + torrent_id);
REQUIRE(torrent_session.get_torrents().size() == 1); REQUIRE(torrent_session.get_torrents().size() == 1);
REQUIRE((torrent_session.get_torrents()[0]).status().save_path == "/toREST"); REQUIRE((torrent_session.get_torrents()[0]).status().save_path == "/toREST");
} }
@ -90,7 +125,7 @@ SCENARIO("We are running a POST /session/torrents resource") {
{"save_path", "music"}}); {"save_path", "music"}});
THEN("the server should reply created") { THEN("the server should reply created") {
tr::session::torrents::post(settings, torrent_session, response, request); tr::session::torrents::post(settings, torrent_session, response, request);
CommonResponse::created(response, request, "/session/torrents/" + magnet_hash); CommonResponse::created(response, request, "/session/torrents/" + torrent_id);
REQUIRE(torrent_session.get_torrents().size() == 1); REQUIRE(torrent_session.get_torrents().size() == 1);
REQUIRE_FALSE(torrent_session.get_torrents()[0].status().paused); REQUIRE_FALSE(torrent_session.get_torrents()[0].status().paused);
REQUIRE(torrent_session.get_torrents()[0].upload_limit() == -1); REQUIRE(torrent_session.get_torrents()[0].upload_limit() == -1);
@ -105,7 +140,7 @@ SCENARIO("We are running a POST /session/torrents resource") {
{"paused", "true"}}); {"paused", "true"}});
THEN("the server should reply with bad request") { THEN("the server should reply with bad request") {
tr::session::torrents::post(settings, torrent_session, response, request); tr::session::torrents::post(settings, torrent_session, response, request);
CommonResponse::created(response, request, "/session/torrents/" + magnet_hash); CommonResponse::created(response, request, "/session/torrents/" + torrent_id);
REQUIRE(torrent_session.get_torrents().size() == 1); REQUIRE(torrent_session.get_torrents().size() == 1);
REQUIRE(torrent_session.get_torrents()[0].status().paused); REQUIRE(torrent_session.get_torrents()[0].status().paused);
REQUIRE(torrent_session.get_torrents()[0].upload_limit() == -1); REQUIRE(torrent_session.get_torrents()[0].upload_limit() == -1);
@ -123,7 +158,7 @@ SCENARIO("We are running a POST /session/torrents resource") {
{"name", name}}); {"name", name}});
THEN("the server should reply with bad request") { THEN("the server should reply with bad request") {
tr::session::torrents::post(settings, torrent_session, response, request); tr::session::torrents::post(settings, torrent_session, response, request);
CommonResponse::created(response, request, "/session/torrents/" + magnet_hash); CommonResponse::created(response, request, "/session/torrents/" + torrent_id);
REQUIRE(torrent_session.get_torrents().size() == 1); REQUIRE(torrent_session.get_torrents().size() == 1);
REQUIRE_FALSE(torrent_session.get_torrents()[0].status().paused); REQUIRE_FALSE(torrent_session.get_torrents()[0].status().paused);
REQUIRE(torrent_session.get_torrents()[0].status().name == name); REQUIRE(torrent_session.get_torrents()[0].status().name == name);

Loading…
Cancel
Save