summaryrefslogtreecommitdiff
path: root/battleNetApi/tests/src
diff options
context:
space:
mode:
authorAotrix <[email protected]>2026-07-13 00:23:36 +0200
committerAotrix <[email protected]>2026-07-13 00:23:36 +0200
commit552017342ed077ec9a516b02ea4b6855a7c17007 (patch)
treeaca50984a334049392cd0d3eb8e4c4efe65a2909 /battleNetApi/tests/src
parenta0632d299b85dc4ef7c0e03898f38e6deca0edc2 (diff)
Added test file for Token
Diffstat (limited to 'battleNetApi/tests/src')
-rw-r--r--battleNetApi/tests/src/tests.cpp144
-rw-r--r--battleNetApi/tests/src/tokenTests.cpp20
2 files changed, 164 insertions, 0 deletions
diff --git a/battleNetApi/tests/src/tests.cpp b/battleNetApi/tests/src/tests.cpp
new file mode 100644
index 0000000..d3c09c7
--- /dev/null
+++ b/battleNetApi/tests/src/tests.cpp
@@ -0,0 +1,144 @@
+#include "apiUrl.hpp"
+#include "hearthstoneApi.hpp"
+#include <catch2/benchmark/catch_benchmark.hpp>
+#include <catch2/benchmark/catch_chronometer.hpp>
+#include <catch2/benchmark/detail/catch_analyse.hpp>
+#include <catch2/benchmark/detail/catch_benchmark_function.hpp>
+#include <catch2/benchmark/detail/catch_estimate_clock.hpp>
+#include <catch2/catch_approx.hpp>
+#include <catch2/catch_config.hpp>
+#include <catch2/catch_test_macros.hpp>
+#include <cstdint>
+#include <fstream>
+#include <nlohmann/json.hpp>
+#include <string>
+#include <tokenBuilder.hpp>
+
+TEST_CASE("Retrieve API Token", "[generateApiToken]") {
+ const std::string aCredentialsFile{"tests/resources/credentials.json"};
+ Token aToken(aCredentialsFile);
+ const std::string aTokenContent{aToken.text()};
+ const std::string::size_type aTokenSize{aTokenContent.size()};
+ REQUIRE(aTokenSize >= 30);
+ REQUIRE(aTokenSize <= 40);
+}
+
+TEST_CASE("Retrieve number of cards", "[countCards]") {
+ const std::string aCredentialsFile{};
+ const std::string aContentType{"cards"};
+ const std::string aRegion{"eu"};
+ ApiUrl aApiUrl(aContentType, aRegion);
+ aApiUrl.setLocale("fr_FR");
+ aApiUrl.setGameMode("constructed");
+ aApiUrl.setPageSize("1");
+ TokenPool::feedTokenSource("tests/resources/credentials.json");
+ const json aResponse =
+ HearthstoneApi::makeApiRequest(aApiUrl, TokenPool::build().value().text());
+ REQUIRE(aResponse.size() > 0);
+ REQUIRE(aResponse.contains("pageCount"));
+ std::uint64_t aNumberOfCards{aResponse["pageCount"]};
+ std::uint64_t aExpectedNumberOfCards{6178};
+ REQUIRE(aNumberOfCards == aExpectedNumberOfCards);
+}
+
+TEST_CASE("Retrieve page once", "[retrievePageOnce]") {
+ const std::string aCredentialsFile{"tests/resources/credentials.json"};
+ Token aToken(kCredentialsFile);
+ const std::string aContentType{"cards"};
+ const std::string aRegion{"eu"};
+ ApiUrl aApiUrl(aContentType, aRegion);
+ aApiUrl.setLocale("fr_FR");
+ aApiUrl.setGameMode("constructed");
+ aApiUrl.setPageSize("16");
+ TokenPool::feedTokenSource("tests/resources/credentials.json");
+ const json aApiResponse =
+ HearthstoneApi::makeApiRequest(aApiUrl, TokenPool::build().value().text());
+ REQUIRE(aApiResponse["cards"].size() == 16);
+}
+
+TEST_CASE("Retrieve pages 10 times without parallelization", "[retrievePagesNoParallel]") {
+ const std::string aCredentialsFile{"tests/resources/credentials.json"};
+ Token aToken(aCredentialsFile);
+ const std::string aContentType{"cards"};
+ const std::string aRegion{"eu"};
+ ApiUrl aApiUrl(aContentType, aRegion);
+ aApiUrl.setLocale("fr_FR");
+ aApiUrl.setGameMode("constructed");
+ aApiUrl.setPageSize("16");
+ aApiUrl.setPage("1");
+ TokenPool::feedTokenSource("tests/resources/credentials.json");
+ std::string aTokenText{TokenPool::build().value().text()};
+ json aApiResponse = HearthstoneApi::makeApiRequest(aApiUrl, aTokenText);
+
+ // Retrieve number of pages
+ const int aNumberOfRetrievals{10};
+ const int aNumberOfPages{aApiResponse["pageCount"]};
+ REQUIRE(aNumberOfPages >= aNumberOfRetrievals);
+ for (int i{1}; i < aNumberOfRetrievals; ++i) {
+ REQUIRE(aApiResponse["cards"].size() == 16);
+ aApiUrl.setPage(std::to_string(i + 1));
+ aApiResponse = HearthstoneApi::makeApiRequest(aApiUrl, aTokenText);
+ }
+ REQUIRE(aApiResponse["cards"].size() >= 1);
+ REQUIRE(aApiResponse["cards"].size() <= 16);
+}
+
+TEST_CASE("Retrieve pages 10 times with parallelization", "[retrievePagesParallel]") {
+ const std::string aCredentialsFile{"tests/resources/credentials.json"};
+ Token aToken(kCredentialsFile);
+ const std::string aContentType{"cards"};
+ const std::string aRegion{"eu"};
+ ApiUrl aApiUrl(aContentType, aRegion);
+ aApiUrl.setLocale("fr_FR");
+ aApiUrl.setGameMode("constructed");
+ aApiUrl.setPageSize("16");
+ aApiUrl.setPage("1");
+ std::vector<std::string> aRequests;
+ TokenPool::feedTokenSource("tests/resources/credentials.json");
+ std::string aTokenText{TokenPool::build().value().text()};
+ json aFirstPageJson = HearthstoneApi::makeApiRequest(aApiUrl, aTokenText);
+
+ int kNumberOfPages{aFirstPageJson["pageCount"]};
+ const int aNumberOfRetrievals{10};
+ REQUIRE(aNumberOfPages >= aNumberOfRetrievals);
+ for (int i{1}; i < aNumberOfRetrievals; ++i) {
+ aApiUrl.setPage(std::to_string(i + 1));
+ aRequests.push_back(aApiUrl.text());
+ }
+ std::vector<json> aApiResponses = HearthstoneApi::makeApiRequest(aRequests, aTokenText);
+ aApiResponses.emplace(aApiResponses.begin(), aFirstPageJson);
+ REQUIRE(aApiResponses.size() == aNumberOfRetrievals);
+ for (const json &aApiResponse : aApiResponses) {
+ REQUIRE(aApiResponse["cards"].size() == 16);
+ }
+}
+
+TEST_CASE("Merge two card lists from two page requests", "[Merge pages]") {
+ std::ifstream aFirstPageFile{"tests/resources/page_merge_00.json"};
+ json aFirstPageJson = json::parse(aFirstPageFile);
+ std::ifstream aSecondPageFile{"tests/resources/page_merge_01.json"};
+ const json aSecondPageJson = json::parse(aSecondPageFile);
+
+ json::reference aMergedCards = aFirstPageJson["cards"];
+ for (auto &card : aSecondPageJson["cards"]) {
+ aMergedCards.push_back(std::move(card));
+ }
+ REQUIRE(aMergedCards.size() == 32);
+ std::ofstream aOutputJson("build/output_pages_merge.json");
+ aOutputJson << aMergedCards.dump(4);
+}
+
+TEST_CASE("Retrieve a single page with HearthstoneApi::downloadCards",
+ "[retrievePageOnceHearthstoneApi]") {
+ const std::string aContentType{"cards"};
+ const std::string aRegion{"eu"};
+ ApiUrl aApiUrl(aContentType, aRegion);
+ aApiUrl.setPage(3);
+ TokenPool::feedTokenSource("tests/resources/credentials.json");
+ json aApiResponse = HearthstoneApi::makeApiRequest(aApiUrl, TokenPool::build().value().text());
+ const json::size_type aExpectedNumberOfCards{aApiResponse["cards"].size()};
+ TokenPool::feedTokenSource("tests/resources/credentials.json");
+ aApiResponse = HearthstoneApi::downloadCards(aApiUrl, TokenPool::build().value());
+ const json::size_type aCurrentNumberOfCards{aApiResponse["cards"].size()};
+ REQUIRE(aCurrentNumberOfCards == aExpectedNumberOfCards);
+}
diff --git a/battleNetApi/tests/src/tokenTests.cpp b/battleNetApi/tests/src/tokenTests.cpp
new file mode 100644
index 0000000..89e4039
--- /dev/null
+++ b/battleNetApi/tests/src/tokenTests.cpp
@@ -0,0 +1,20 @@
+#include <catch2/benchmark/catch_benchmark.hpp>
+#include <catch2/benchmark/catch_chronometer.hpp>
+#include <catch2/benchmark/detail/catch_analyse.hpp>
+#include <catch2/benchmark/detail/catch_benchmark_function.hpp>
+#include <catch2/benchmark/detail/catch_estimate_clock.hpp>
+#include <catch2/catch_approx.hpp>
+#include <catch2/catch_config.hpp>
+#include <catch2/catch_test_macros.hpp>
+#include <nlohmann/json.hpp>
+#include <string>
+#include <tokenBuilder.hpp>
+
+TEST_CASE("Retrieve API Token", "[generateApiToken]") {
+ const std::string aCredentialsFile{"../tests/resources/credentials.json"};
+ Token aToken(aCredentialsFile, std::chrono::seconds(0));
+ const std::string aTokenContent{aToken.text()};
+ const std::string::size_type aTokenSize{aTokenContent.size()};
+ REQUIRE(aTokenSize >= 30);
+ REQUIRE(aTokenSize <= 40);
+}