summaryrefslogtreecommitdiff
path: root/subprojects
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/battleNetApi/include/hearthstoneApi.hpp29
-rw-r--r--subprojects/battleNetApi/src/hearthstoneApi.cpp22
-rw-r--r--subprojects/battleNetApi/tests/tests.cpp12
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';
}