diff --git a/partners_api/CMakeLists.txt b/partners_api/CMakeLists.txt index 4bd4fd1be2..96d17f518d 100644 --- a/partners_api/CMakeLists.txt +++ b/partners_api/CMakeLists.txt @@ -10,6 +10,8 @@ set( ads/ads_engine.hpp ads/ads_utils.cpp ads/ads_utils.hpp + ads/arsenal_ads.cpp + ads/arsenal_ads.hpp ads/banner.hpp ads/bookmark_catalog_ads.cpp ads/bookmark_catalog_ads.hpp diff --git a/partners_api/ads/ads_engine.cpp b/partners_api/ads/ads_engine.cpp index 484fe517a1..92cd26f562 100644 --- a/partners_api/ads/ads_engine.cpp +++ b/partners_api/ads/ads_engine.cpp @@ -1,9 +1,9 @@ #include "partners_api/ads/ads_engine.hpp" +#include "partners_api/ads/arsenal_ads.hpp" #include "partners_api/ads/bookmark_catalog_ads.hpp" #include "partners_api/ads/citymobil_ads.hpp" #include "partners_api/ads/facebook_ads.hpp" -#include "partners_api/ads/mastercard_sber_ads.hpp" #include "partners_api/ads/mopub_ads.hpp" #include "partners_api/ads/rb_ads.hpp" @@ -50,8 +50,16 @@ Engine::Engine(std::unique_ptr delegate) m_searchBanners.emplace_back(Banner::Type::Facebook, std::make_unique()); - m_downloadOnMapBanners.emplace_back(Banner::Type::MastercardSberbank, - std::make_unique(*m_delegate)); + m_downloadOnMapBanners.emplace_back(Banner::Type::ArsenalMedic, + std::make_unique(*m_delegate)); + m_downloadOnMapBanners.emplace_back(Banner::Type::ArsenalFlat, + std::make_unique(*m_delegate)); + m_downloadOnMapBanners.emplace_back(Banner::Type::ArsenalInsuranceCrimea, + std::make_unique(*m_delegate)); + m_downloadOnMapBanners.emplace_back(Banner::Type::ArsenalInsuranceRussia, + std::make_unique(*m_delegate)); + m_downloadOnMapBanners.emplace_back(Banner::Type::ArsenalInsuranceWorld, + std::make_unique(*m_delegate)); m_downloadOnMapPromo.emplace_back(Banner::Type::BookmarkCatalog, std::make_unique(*m_delegate)); m_searchCategoryBanners.emplace_back(Banner::Type::Citymobil, diff --git a/partners_api/ads/arsenal_ads.cpp b/partners_api/ads/arsenal_ads.cpp new file mode 100644 index 0000000000..4544d6c655 --- /dev/null +++ b/partners_api/ads/arsenal_ads.cpp @@ -0,0 +1,208 @@ +#include "partners_api/ads/arsenal_ads.hpp" + +namespace +{ +std::initializer_list const kSupportedLanguages = {"ru"}; + +std::initializer_list const kSupportedCountriesMedic = { + "Russia_Moscow", + "Russia_Saint Petersburg" +}; + +std::initializer_list const kSupportedCountriesFlat = { + "United States of America", + "Greece", + "Mexico", + "Cuba", + "Tunisia", + "Jordan", + "Brazil", + "Tanzania", + "Morocco", + "Macedonia", + "Andorra", + "Haiti", + "Egypt", + "Maldives", + "Kenya", + "Dominican Republic", + "Russia_Moscow Oblast_East", + "Russia_Moscow Oblast_West", + "Russia_Rostov Oblast", + "Russia_Tatarstan", + "Russia_Sverdlovsk Oblast_Ekaterinburg", + "Russia_Voronezh Oblast", + "Russia_Tver Oblast", + "Russia_Tula Oblast", + "Russia_Bashkortostan", + "Russia_Smolensk Oblast", + "Russia_Samara Oblast", + "Russia_Nizhny Novgorod Oblast", + "Russia_Chelyabinsk Oblast", + "Russia_Vladimir Oblast", + "Russia_Novosibirsk Oblast", + "Russia_Pskov Oblast", + "Russia_Kaluga Oblast", + "Russia_Yaroslavl Oblast", + "Russia_Lipetsk Oblast", + "Russia_Novgorod Oblast", + "Russia_Volgograd Oblast", + "Russia_Perm Krai_South", + "Russia_Saratov Oblast", + "Russia_Krasnoyarsk Krai_South", + "Russia_Ryazan Oblast", + "Russia_Bryansk Oblast", + "Russia_Ulyanovsk Oblast", + "Russia_Kursk Oblast", + "Russia_Orenburg Oblast", + "Russia_Belgorod Oblast", + "Russia_Vologda Oblast", + "Russia_Tyumen Oblast", + "Russia_Oryol Oblast", + "Russia_Yugra_Surgut", + "Russia_Murmansk Oblast", + "Russia_Omsk Oblast", + "Russia_Sverdlovsk Oblast_North", + "Russia_Khabarovsk Krai", + "Russia_Udmurt Republic", + "Russia_Chuvashia", + "Russia_Penza Oblast", + "Russia_Tambov Oblast", + "Russia_Arkhangelsk Oblast_Central", + "Russia_Ivanovo Oblast", + "Russia_Kirov Oblast", + "Russia_Kostroma Oblast", + "Russia_Republic of Kalmykia", + "Russia_Tomsk Oblast", + "Russia_Kurgan Oblast", + "Russia_Republic of Mordovia", + "Russia_Mari El", + "Russia_Perm Krai_North", + "Russia_Komi Republic", + "Russia_Yugra_Khanty", + "Russia_Yamalo-Nenets Autonomous Okrug", + "Russia_Sakha Republic", + "Russia_Amur Oblast", + "Russia_Zabaykalsky Krai", + "Russia_Khakassia", + "Russia_Arkhangelsk Oblast_North", + "Russia_Krasnoyarsk Krai_North", + "Russia_Jewish Autonomous Oblast", + "Russia_Magadan Oblast", + "Russia_Nenets Autonomous Okrug", + "Russia_Tuva" +}; + +std::initializer_list const kSupportedCountriesCrimea = {"Crimea"}; + +std::initializer_list const kSupportedCountriesRussia = { + "Russia_Krasnodar Krai", + "Russia_Krasnodar Krai_Adygeya", + "Russia_Leningradskaya Oblast_Karelsky", + "Russia_Leningradskaya Oblast_Southeast", + "Russia_Kaliningrad Oblast", + "Russia_Stavropol Krai", + "Russia_Republic of Karelia_South", + "Russia_Primorsky Krai", + "Russia_Kabardino-Balkaria", + "Russia_North Ossetia-Alania", + "Russia_Irkutsk Oblast", + "Russia_Kemerov Oblast", + "Russia_Karachay-Cherkessia", + "Russia_Republic of Dagestan", + "Russia_Astrakhan Oblast", + "Russia_Republic of Karelia_North", + "Russia_Buryatia", + "Russia_Altai Republic", + "Russia_Sakhalin Oblast", + "Russia_Ingushetia", + "Russia_Chechen Republic", + "Russia_Kamchatka Krai", + "Russia_Chukotka Autonomous Okrug" +}; + +std::initializer_list const kSupportedCountriesWorld = { + "Ukraine", + "Belarus", + "Turkey", + "Kazakhstan", + "Abkhazia", + "Croatia", + "Bosnia and Herzegovina", + "Slovenia", + "Moldova", + "Serbia", + "United Arab Emirates", + "Albania", + "Montenegro", + "Uzbekistan" +}; + +std::initializer_list const kSupportedUserPosCountriesRussia = {"Russian Federation"}; +std::initializer_list const kExcludedUserPosCountriesRussia = {"Russian Federation"}; +} // namespace + +namespace ads +{ +ArsenalMedic::ArsenalMedic(Delegate & delegate) + : DownloadOnMapContainer(delegate) +{ + AppendSupportedUserLanguages(kSupportedLanguages); + AppendSupportedCountries(kSupportedCountriesMedic); +} + +std::string ArsenalMedic::GetBannerInternal() const +{ + return "https://arsenalins.ru/store/telemed.php?utm=maps_me_direct"; +} + +ArsenalFlat::ArsenalFlat(Delegate & delegate) + : DownloadOnMapContainer(delegate) +{ + AppendSupportedUserLanguages(kSupportedLanguages); + AppendSupportedCountries(kSupportedCountriesFlat); +} + +std::string ArsenalFlat::GetBannerInternal() const +{ + return "https://arsenalins.ru/store/kvartiri.php?utm=maps_me_direct"; +} + +ArsenalInsuranceCrimea::ArsenalInsuranceCrimea(Delegate & delegate) + : DownloadOnMapContainer(delegate) +{ + AppendSupportedUserLanguages(kSupportedLanguages); + AppendSupportedCountries(kSupportedCountriesCrimea); +} + +std::string ArsenalInsuranceCrimea::GetBannerInternal() const +{ + return "https://arsenalins.ru/store/crimea.php?utm=maps_me_direct"; +} + +ArsenalInsuranceRussia::ArsenalInsuranceRussia(Delegate & delegate) + : DownloadOnMapContainer(delegate) +{ + AppendSupportedUserLanguages(kSupportedLanguages); + AppendSupportedCountries(kSupportedCountriesRussia); + AppendSupportedUserPosCountries(kSupportedUserPosCountriesRussia); +} + +std::string ArsenalInsuranceRussia::GetBannerInternal() const +{ + return "https://arsenalins.ru/store/?utm=maps_me_direct&country=rus"; +} + +ArsenalInsuranceWorld::ArsenalInsuranceWorld(Delegate & delegate) + : DownloadOnMapContainer(delegate) +{ + AppendSupportedUserLanguages(kSupportedLanguages); + AppendSupportedCountries(kSupportedCountriesWorld); + AppendExcludedUserPosCountries(kExcludedUserPosCountriesRussia); +} + +std::string ArsenalInsuranceWorld::GetBannerInternal() const +{ + return "https://arsenalins.ru/store/?utm=maps_me_direct&country=not_rus"; +} +} // namespace ads diff --git a/partners_api/ads/arsenal_ads.hpp b/partners_api/ads/arsenal_ads.hpp new file mode 100644 index 0000000000..103d199010 --- /dev/null +++ b/partners_api/ads/arsenal_ads.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include "partners_api/ads/ads_base.hpp" + +namespace ads +{ +class ArsenalMedic : public DownloadOnMapContainer +{ +public: + explicit ArsenalMedic(Delegate & delegate); + +private: + std::string GetBannerInternal() const override; +}; + +class ArsenalFlat : public DownloadOnMapContainer +{ +public: + explicit ArsenalFlat(Delegate & delegate); + +private: + std::string GetBannerInternal() const override; +}; + +class ArsenalInsuranceCrimea : public DownloadOnMapContainer +{ +public: + explicit ArsenalInsuranceCrimea(Delegate & delegate); + +private: + std::string GetBannerInternal() const override; +}; + +class ArsenalInsuranceRussia : public DownloadOnMapContainer +{ +public: + explicit ArsenalInsuranceRussia(Delegate & delegate); + +private: + std::string GetBannerInternal() const override; +}; + +class ArsenalInsuranceWorld : public DownloadOnMapContainer +{ +public: + explicit ArsenalInsuranceWorld(Delegate & delegate); + +private: + std::string GetBannerInternal() const override; +}; +} // namespace ads + diff --git a/partners_api/ads/banner.hpp b/partners_api/ads/banner.hpp index a3104511af..482a7564cb 100644 --- a/partners_api/ads/banner.hpp +++ b/partners_api/ads/banner.hpp @@ -29,6 +29,11 @@ struct Banner BookmarkCatalog = 8, MastercardSberbank = 9, Citymobil = 10, + ArsenalMedic = 11, + ArsenalFlat = 12, + ArsenalInsuranceCrimea = 13, + ArsenalInsuranceRussia = 14, + ArsenalInsuranceWorld = 15, }; Banner() = default; @@ -53,6 +58,11 @@ inline std::string DebugPrint(Banner::Type type) case Banner::Type::BookmarkCatalog: return "BookmarkCatalog"; case Banner::Type::MastercardSberbank: return "MastercardSberbank"; case Banner::Type::Citymobil: return "Citymobil"; + case Banner::Type::ArsenalMedic: return "ArsenalMedic"; + case Banner::Type::ArsenalFlat: return "ArsenalFlat"; + case Banner::Type::ArsenalInsuranceCrimea: return "ArsenalInsuranceCrimea"; + case Banner::Type::ArsenalInsuranceRussia: return "ArsenalInsuranceRussia"; + case Banner::Type::ArsenalInsuranceWorld: return "ArsenalInsuranceWorld"; } UNREACHABLE(); } diff --git a/partners_api/partners_api_tests/CMakeLists.txt b/partners_api/partners_api_tests/CMakeLists.txt index 5029d9603a..9e04957616 100644 --- a/partners_api/partners_api_tests/CMakeLists.txt +++ b/partners_api/partners_api_tests/CMakeLists.txt @@ -5,6 +5,7 @@ add_definitions(-DOMIM_UNIT_TEST_WITH_QT_EVENT_LOOP) set( SRC ads_engine_tests.cpp + arsenal_tests.cpp booking_tests.cpp bookmark_catalog_ads_tests.cpp citymobil_tests.cpp diff --git a/partners_api/partners_api_tests/arsenal_tests.cpp b/partners_api/partners_api_tests/arsenal_tests.cpp new file mode 100644 index 0000000000..7b4ffd5ee5 --- /dev/null +++ b/partners_api/partners_api_tests/arsenal_tests.cpp @@ -0,0 +1,225 @@ +#include "testing/testing.hpp" + +#include "partners_api/ads/arsenal_ads.hpp" + +#include "partners_api/partners_api_tests/download_on_map_container_delegate.hpp" + +UNIT_TEST(ArsenalMedic) +{ + DownloadOnMapContainerDelegateForTesting delegate; + ads::ArsenalMedic arsenalMedic(delegate); + m2::PointD point; + + { + delegate.SetTopmostParent("Russian Federation"); + delegate.SetCountryId("Russian Federation"); + auto const banner = arsenalMedic.GetBanner("Russia_Moscow Oblast_East", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalMedic.GetBanner("Russia_Moscow Oblast_East", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalMedic.GetBanner("Russia_Moscow Oblast_East", point, "en"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalMedic.GetBanner("Russia_Moscow", point, "en"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalMedic.GetBanner("Russia_Moscow", point, "ru"); + TEST(!banner.empty(), ()); + } + { + delegate.SetTopmostParent("Russian Federation"); + delegate.SetCountryId("Russian Federation"); + auto const banner = arsenalMedic.GetBanner("Russia_Moscow", point, "ru"); + TEST(!banner.empty(), ()); + } +} + +UNIT_TEST(ArsenalFlat) +{ + DownloadOnMapContainerDelegateForTesting delegate; + ads::ArsenalFlat arsenalFlat(delegate); + m2::PointD point; + + { + delegate.SetTopmostParent("Russian Federation"); + delegate.SetCountryId("Russian Federation"); + auto const banner = arsenalFlat.GetBanner("Russia_Moscow", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalFlat.GetBanner("Russia_Moscow", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalFlat.GetBanner("Russia_Moscow", point, "en"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalFlat.GetBanner("US_Pennsylvania_Central", point, "en"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("United States of America"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalFlat.GetBanner("US_Pennsylvania_Central", point, "ru"); + TEST(!banner.empty(), ()); + } + { + delegate.SetTopmostParent("United States of America"); + delegate.SetCountryId("Russian Federation"); + auto const banner = arsenalFlat.GetBanner("US_Pennsylvania_Central", point, "ru"); + TEST(!banner.empty(), ()); + } +} + +UNIT_TEST(ArsenalInsuranceCrimea) +{ + DownloadOnMapContainerDelegateForTesting delegate; + ads::ArsenalInsuranceCrimea arsenalInsuranceCrimea(delegate); + m2::PointD point; + + { + delegate.SetTopmostParent("Russian Federation"); + delegate.SetCountryId("Russian Federation"); + auto const banner = arsenalInsuranceCrimea.GetBanner("Russia_Moscow", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalInsuranceCrimea.GetBanner("Russia_Moscow", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalInsuranceCrimea.GetBanner("Russia_Moscow", point, "en"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalInsuranceCrimea.GetBanner("Crimea", point, "en"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Russian Federation"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalInsuranceCrimea.GetBanner("Crimea", point, "ru"); + TEST(!banner.empty(), ()); + } + { + delegate.SetTopmostParent("Russian Federation"); + delegate.SetCountryId("Russian Federation"); + auto const banner = arsenalInsuranceCrimea.GetBanner("Crimea", point, "ru"); + TEST(!banner.empty(), ()); + } +} + +UNIT_TEST(ArsenalInsuranceRussia) +{ + DownloadOnMapContainerDelegateForTesting delegate; + ads::ArsenalInsuranceRussia ArsenalInsuranceRussia(delegate); + m2::PointD point; + + { + delegate.SetTopmostParent("Russian Federation"); + delegate.SetCountryId("Russian Federation"); + auto const banner = ArsenalInsuranceRussia.GetBanner("Russia_Moscow", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = ArsenalInsuranceRussia.GetBanner("Russia_Moscow", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = ArsenalInsuranceRussia.GetBanner("Russia_Moscow", point, "en"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = ArsenalInsuranceRussia.GetBanner("Russia_Krasnodar Krai_Adygeya", point, "en"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = ArsenalInsuranceRussia.GetBanner("Russia_Krasnodar Krai_Adygeya", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Russian Federation"); + delegate.SetCountryId("Russian Federation"); + auto const banner = ArsenalInsuranceRussia.GetBanner("Russia_Krasnodar Krai_Adygeya", point, "ru"); + TEST(!banner.empty(), ()); + } +} + +UNIT_TEST(ArsenalInsuranceWorld) +{ + DownloadOnMapContainerDelegateForTesting delegate; + ads::ArsenalInsuranceWorld arsenalInsuranceWorld(delegate); + m2::PointD point; + + { + delegate.SetTopmostParent("Russian Federation"); + delegate.SetCountryId("Russian Federation"); + auto const banner = arsenalInsuranceWorld.GetBanner("Russia_Moscow", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalInsuranceWorld.GetBanner("Russia_Moscow", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalInsuranceWorld.GetBanner("Russia_Moscow", point, "en"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Cote dIvoire"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalInsuranceWorld.GetBanner("Russia_Krasnodar Krai_Adygeya", point, "en"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Russian Federation"); + delegate.SetCountryId("Russian Federation"); + auto const banner = arsenalInsuranceWorld.GetBanner("Slovenia", point, "ru"); + TEST(banner.empty(), ()); + } + { + delegate.SetTopmostParent("Slovenia"); + delegate.SetCountryId("Cote dIvoire"); + auto const banner = arsenalInsuranceWorld.GetBanner("Slovenia", point, "ru"); + TEST(!banner.empty(), ()); + } +}