summaryrefslogtreecommitdiff
path: root/battleNetApi/tests/tests.cpp
blob: d3321d324d7de68372508f4ef130578bda9ecfed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#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>

TEST_CASE("Retrieve API Token", "[generateApiToken]") {
    const std::string kCredentialsFile{"tests/resources/credentials.json"};
    Token aToken(kCredentialsFile);
    const std::string kTokenContent{aToken.text()};
    const std::string::size_type kTokenSize{kTokenContent.size()};
    REQUIRE(kTokenSize >= 30);
    REQUIRE(kTokenSize <= 40);
}

TEST_CASE("Retrieve number of cards", "[countCards]") {
    const std::string kCredentialsFile{"tests/resources/credentials.json"};
    Token aToken(kCredentialsFile);
    HearthstoneApi aHearthstoneApi(aToken);
    const std::string kContentType{"cards"};
    const std::string kRegion{"eu"};
    ApiUrl aApiUrl(kContentType, kRegion);
    aApiUrl.setLocale("fr_FR");
    aApiUrl.setGameMode("constructed");
    aApiUrl.setPageSize("1");
    const json kResponse = aHearthstoneApi.makeApiRequest(aApiUrl());
    REQUIRE(kResponse.size() > 0);
    REQUIRE(kResponse.contains("pageCount"));
    std::uint64_t kNumberOfCards{kResponse["pageCount"]};
    REQUIRE(kNumberOfCards == 6033);
}

TEST_CASE("Retrieve page once", "[retrievePageOnce]") {
    const std::string kCredentialsFile{"tests/resources/credentials.json"};
    Token aToken(kCredentialsFile);
    HearthstoneApi aHearthstoneApi(aToken);
    const std::string kContentType{"cards"};
    const std::string kRegion{"eu"};
    ApiUrl aApiUrl(kContentType, kRegion);
    aApiUrl.setLocale("fr_FR");
    aApiUrl.setGameMode("constructed");
    aApiUrl.setPageSize("16");
    const json kApiResponse = aHearthstoneApi.makeApiRequest(aApiUrl());
    REQUIRE(kApiResponse["cards"].size() == 16);
}

TEST_CASE("Retrieve pages 10 times without parallelization", "[retrievePagesNoParallel]") {
    const std::string kCredentialsFile{"tests/resources/credentials.json"};
    Token aToken(kCredentialsFile);
    HearthstoneApi aHearthstoneApi(aToken);
    const std::string kContentType{"cards"};
    const std::string kRegion{"eu"};
    ApiUrl aApiUrl(kContentType, kRegion);
    aApiUrl.setLocale("fr_FR");
    aApiUrl.setGameMode("constructed");
    aApiUrl.setPageSize("16");
    aApiUrl.setPage("1");
    json kApiResponse = aHearthstoneApi.makeApiRequest(aApiUrl());

    // Retrieve number of pages
    const int kNumberOfRetrievals{10};
    const int kNumberOfPages{kApiResponse["pageCount"]};
    REQUIRE(kNumberOfPages >= kNumberOfRetrievals);
    for (int i{1}; i < kNumberOfRetrievals; ++i) {
        REQUIRE(kApiResponse["cards"].size() == 16);
        aApiUrl.setPage(std::to_string(i + 1));
        kApiResponse = aHearthstoneApi.makeApiRequest(aApiUrl());
    }
    REQUIRE(kApiResponse["cards"].size() >= 1);
    REQUIRE(kApiResponse["cards"].size() <= 16);
}

TEST_CASE("Retrieve pages 10 times with parallelization", "[retrievePagesParallel]") {
    const std::string kCredentialsFile{"tests/resources/credentials.json"};
    Token aToken(kCredentialsFile);
    HearthstoneApi aHearthstoneApi(aToken);
    const std::string kContentType{"cards"};
    const std::string kRegion{"eu"};
    ApiUrl aApiUrl(kContentType, kRegion);
    aApiUrl.setLocale("fr_FR");
    aApiUrl.setGameMode("constructed");
    aApiUrl.setPageSize("16");
    aApiUrl.setPage("1");
    std::vector<std::string> aRequests;
    json kFirstPageJson = aHearthstoneApi.makeApiRequest(aApiUrl());

    int kNumberOfPages{kFirstPageJson["pageCount"]};
    const int kNumberOfRetrievals{10};
    REQUIRE(kNumberOfPages >= kNumberOfRetrievals);
    for (int i{1}; i < kNumberOfRetrievals; ++i) {
        aApiUrl.setPage(std::to_string(i + 1));
        aRequests.push_back(aApiUrl());
    }
    std::vector<json> kApiResponses = aHearthstoneApi.makeApiRequest(aRequests);
    kApiResponses.emplace(kApiResponses.begin(), kFirstPageJson);
    REQUIRE(kApiResponses.size() == kNumberOfRetrievals);
    for (const json &kApiResponse : kApiResponses) {
        REQUIRE(kApiResponse["cards"].size() == 16);
    }
}

TEST_CASE("Merge two card lists from two page requests", "[Merge pages]") {
    std::ifstream aFirstPage{"tests/resources/page_merge_00.json"};
    json kFirstPage = json::parse(aFirstPage);
    std::ifstream aSecondPage{"tests/resources/page_merge_01.json"};
    const json kSecondPage = json::parse(aSecondPage);

    json::reference aMergedCards = kFirstPage["cards"];
    for (auto &card : kSecondPage["cards"]) {
        aMergedCards.push_back(std::move(card));
    }
    REQUIRE(aMergedCards.size() == 32);
    std::ofstream aOutputJson("build/output_pages_merge.json");
    aOutputJson << aMergedCards.dump(4);
}