diff options
| author | Aotrix <[email protected]> | 2025-11-09 16:31:11 +0100 |
|---|---|---|
| committer | Aotrix <[email protected]> | 2025-11-09 16:31:11 +0100 |
| commit | 7c7c8b4aafe91f49a3448b822dd604253545307d (patch) | |
| tree | 869b9f2669e4676c98cf9ec4860119346b3f65d4 | |
| parent | 6110ac9510e8fdf04e7f60625def310687ee6a88 (diff) | |
added tests
| -rw-r--r-- | subprojects/battleNetApi/include/hearthstoneApi.hpp | 29 | ||||
| -rw-r--r-- | subprojects/battleNetApi/src/hearthstoneApi.cpp | 22 | ||||
| -rw-r--r-- | subprojects/battleNetApi/tests/tests.cpp | 12 |
3 files changed, 42 insertions, 21 deletions
diff --git a/subprojects/battleNetApi/include/hearthstoneApi.hpp b/subprojects/battleNetApi/include/hearthstoneApi.hpp index 6b3bbe5..0ed9b57 100644 --- a/subprojects/battleNetApi/include/hearthstoneApi.hpp +++ b/subprojects/battleNetApi/include/hearthstoneApi.hpp @@ -1,20 +1,37 @@ #pragma once #include "token.hpp" #include <string> +#include <unordered_map> + +class ApiUrlParameters { + public: + void setLocale(const std::string iLocale) { + aParameters["locale"] = iLocale; //<! fr_FR + } + void setGameMode(const std::string iGameMode) { + aParameters["gameMode"] = iGameMode; //<! constructed + } + std::ostream &operator<<(std::ostream &iOstream) { + // TODO: complete + return iOstream; + } + + private: + std::unordered_map<std::string, std::string> aParameters; +}; class HearthstoneApi { public: HearthstoneApi(Token &&iToken); std::uint64_t numberOfCards(); - std::string getCards(const std::string &t_card_parameters); + std::string cards(const std::string &iCardParameters); private: std::string authorizationHeader(); - const std::string getUrl(const std::string &t_parameters); - const std::string getSetOfCardsUrl(const std::string &t_card_parameters); - std::string makeApiRequest(const char *t_url); - std::string makeApiRequest(const std::string &t_url); - static size_t curlCallbackStringOutput(void *t_contents, size_t t_size, size_t t_nmemb, std::string *t_s); + std::string makeApiRequest(const std::string &iUrl) const; + const std::string apiUrl(const std::string &iParameters) const; + const std::string setOfCardsUrl(const std::string &iCardParameters); + static size_t curlCallbackStringOutput(void *iContent, size_t iSize, size_t iNmemb, std::string *iS); Token mToken; std::string mAuthorizationHeader; //<! Bearer authorization string for OAuth 2.0 header diff --git a/subprojects/battleNetApi/src/hearthstoneApi.cpp b/subprojects/battleNetApi/src/hearthstoneApi.cpp index 903e987..9fda88c 100644 --- a/subprojects/battleNetApi/src/hearthstoneApi.cpp +++ b/subprojects/battleNetApi/src/hearthstoneApi.cpp @@ -11,15 +11,15 @@ std::uint64_t HearthstoneApi::numberOfCards() { std::string HearthstoneApi::authorizationHeader() { return std::format("Authorization: Bearer {}", mToken.toString()); } -const std::string HearthstoneApi::getUrl(const std::string &iParameters) { +const std::string HearthstoneApi::apiUrl(const std::string &iParameters) const { return std::format("https://eu.api.blizzard.com/hearthstone/{}", iParameters); } -std::string HearthstoneApi::makeApiRequest(const char *iUrl) { +std::string HearthstoneApi::makeApiRequest(const std::string &iUrl) const { CURL *curl = curl_easy_init(); std::string request_output; if (curl) { - curl_easy_setopt(curl, CURLOPT_URL, iUrl); + curl_easy_setopt(curl, CURLOPT_URL, iUrl.c_str()); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlCallbackStringOutput); @@ -33,23 +33,21 @@ std::string HearthstoneApi::makeApiRequest(const char *iUrl) { return request_output; } -const std::string HearthstoneApi::getSetOfCardsUrl(const std::string &iCardParameters) { - return getUrl(std::format("cards{}", iCardParameters)); +const std::string HearthstoneApi::setOfCardsUrl(const std::string &iCardParameters) { + return apiUrl(std::format("cards{}", iCardParameters)); } size_t HearthstoneApi::curlCallbackStringOutput(void *iContent, size_t iSize, size_t iNmemb, std::string *iS) { - size_t newLength = iSize * iNmemb; + const size_t kNewLength = iSize * iNmemb; try { - iS->append(static_cast<char *>(iContent), newLength); + iS->append(static_cast<char *>(iContent), kNewLength); } catch (std::bad_alloc &e) { // handle memory problem return 0; } - return newLength; + return kNewLength; } -std::string HearthstoneApi::makeApiRequest(const std::string &iUrl) { return makeApiRequest(iUrl.c_str()); } - -std::string HearthstoneApi::getCards(const std::string &iCardParameters) { - return makeApiRequest(getSetOfCardsUrl(iCardParameters)); +std::string HearthstoneApi::cards(const std::string &iCardParameters) { + return makeApiRequest(setOfCardsUrl(iCardParameters)); } diff --git a/subprojects/battleNetApi/tests/tests.cpp b/subprojects/battleNetApi/tests/tests.cpp index d225de6..d83ea0a 100644 --- a/subprojects/battleNetApi/tests/tests.cpp +++ b/subprojects/battleNetApi/tests/tests.cpp @@ -21,6 +21,8 @@ class TokenMock { class HearthstoneApiMock { public: HearthstoneApiMock() : mHearthstoneApi(std::move(mToken.getToken())) {}; + std::string makeApiRequest(const std::string &iCardsUrl) { return mHearthstoneApi.makeApiRequest(iCardsUrl); } + const std::string apiUrl(const std::string &iParameters) { return mHearthstoneApi.apiUrl(iParameters); }; private: TokenMock mToken; @@ -39,7 +41,11 @@ TEST_CASE("Retrieve API Token", "[getApiToken]") { TEST_CASE("Retrieve number of pages", "[getPagesCount]") { HearthstoneApiMock aHearthstoneApi; // std::cout << aHearthstoneApi.numberOfCards() << '\n'; - // aHearthstoneApi.getNumberOfPages(); - // input parameters - // aHearthstoneApi.getCards +} + +TEST_CASE("Retrieve cards", "[retrieveCards]") { + HearthstoneApiMock aHearthstoneApi; + const std::string kCardParameters{"cards/?locale=fr_FR&gameMode=constructed"}; + const std::string kUrl{aHearthstoneApi.apiUrl(kCardParameters)}; + std::cout << aHearthstoneApi.makeApiRequest(kUrl) << '\n'; } |
