diff --git a/partners_api/partners_api_tests/uber_tests.cpp b/partners_api/partners_api_tests/uber_tests.cpp index 44c25554c5..25426ac0c1 100644 --- a/partners_api/partners_api_tests/uber_tests.cpp +++ b/partners_api/partners_api_tests/uber_tests.cpp @@ -4,6 +4,8 @@ #include "geometry/latlon.hpp" +#include "base/scope_guard.hpp" + #include "std/algorithm.hpp" #include "std/atomic.hpp" #include "std/mutex.hpp" @@ -177,6 +179,9 @@ UNIT_TEST(Uber_Smoke) ms::LatLon const from(38.897724, -77.036531); ms::LatLon const to(38.862416, -76.883316); + uber::SetUberUrlForTesting("http://localhost:34568/partners"); + MY_SCOPE_GUARD(cleanup, []() { uber::SetUberUrlForTesting(""); }); + auto const errorCallback = [](uber::ErrorCode const code, uint64_t const requestId) { TEST(false, ()); @@ -250,22 +255,13 @@ UNIT_TEST(Uber_Smoke) testing::RunEventLoop(); - size_t countOfEqual = 0; + TEST_EQUAL(synchronousProducts.size(), productsContainer.size(), ()); - for (auto const & product : synchronousProducts) - { - auto const it = find_if( - productsContainer.begin(), productsContainer.end(), - [&product, countOfEqual](uber::Product const & item) - { - return product.m_productId == item.m_productId && product.m_name == item.m_name && - product.m_price == item.m_price; - }); - - if (it != productsContainer.end()) - ++countOfEqual; - } - - // At least 75 percents of products should be equal. - TEST_LESS_OR_EQUAL(static_cast(synchronousProducts.size() * 0.75), countOfEqual, ()); + auto const isEqual = + equal(synchronousProducts.begin(), synchronousProducts.end(), productsContainer.begin(), + [](uber::Product const & lhs, uber::Product const & rhs) { + return lhs.m_productId == rhs.m_productId && lhs.m_name == rhs.m_name && + lhs.m_price == rhs.m_price; + }); + TEST(isEqual, ()); } diff --git a/partners_api/uber_api.cpp b/partners_api/uber_api.cpp index 076f9d693e..52c96d1629 100644 --- a/partners_api/uber_api.cpp +++ b/partners_api/uber_api.cpp @@ -17,6 +17,9 @@ using namespace platform; namespace { +string const kUberEstimatesUrl = "https://api.uber.com/v1/estimates"; +string g_uberUrlForTesting = ""; + bool RunSimpleHttpRequest(string const & url, string & result) { HttpClient request(url); @@ -111,6 +114,14 @@ void MakeFromJson(char const * times, char const * prices, vector products.clear(); } } + +string GetUberURL() +{ + if (!g_uberUrlForTesting.empty()) + return g_uberUrlForTesting; + + return kUberEstimatesUrl; +} } // namespace namespace uber @@ -131,7 +142,7 @@ bool RawApi::GetEstimatedTime(ms::LatLon const & pos, string & result) { stringstream url; url << fixed << setprecision(6) - << "https://api.uber.com/v1/estimates/time?server_token=" << UBER_SERVER_TOKEN + << GetUberURL() << "/time?server_token=" << UBER_SERVER_TOKEN << "&start_latitude=" << pos.lat << "&start_longitude=" << pos.lon; return RunSimpleHttpRequest(url.str(), result); @@ -142,7 +153,7 @@ bool RawApi::GetEstimatedPrice(ms::LatLon const & from, ms::LatLon const & to, s { stringstream url; url << fixed << setprecision(6) - << "https://api.uber.com/v1/estimates/price?server_token=" << UBER_SERVER_TOKEN + << GetUberURL() << "/price?server_token=" << UBER_SERVER_TOKEN << "&start_latitude=" << from.lat << "&start_longitude=" << from.lon << "&end_latitude=" << to.lat << "&end_longitude=" << to.lon; @@ -250,6 +261,11 @@ RideRequestLinks Api::GetRideRequestLinks(string const & productId, ms::LatLon c return {"uber://" + url.str(), "https://m.uber.com/ul" + url.str()}; } +void SetUberUrlForTesting(string const & url) +{ + g_uberUrlForTesting = url; +} + string DebugPrint(ErrorCode error) { switch (error) diff --git a/partners_api/uber_api.hpp b/partners_api/uber_api.hpp index f25a0cbf62..34cf270fab 100644 --- a/partners_api/uber_api.hpp +++ b/partners_api/uber_api.hpp @@ -102,5 +102,6 @@ private: uint64_t m_requestId = 0; }; +void SetUberUrlForTesting(string const & url); string DebugPrint(ErrorCode error); } // namespace uber