2121#include " CSP/Systems/Spaces/SpaceSystem.h"
2222#include " CSP/Systems/SystemsManager.h"
2323#include " RAIIMockLogger.h"
24+ #include " Services/PrototypeService/PrototypeServiceApiMock.h"
2425#include " SpaceSystemTestHelpers.h"
2526#include " Systems/ResultHelpers.h"
2627#include " TestHelpers.h"
3637
3738#include " gtest/gtest.h"
3839#include < filesystem>
40+ #include < future>
41+ #include < gmock/gmock.h>
3942
4043using namespace csp ::multiplayer;
4144
45+ namespace chs_prototype = csp::services::generated::prototypeservice;
46+
4247namespace
4348{
4449
@@ -2481,4 +2486,79 @@ CSP_PUBLIC_TEST(CSPEngine, AssetSystemTests, GetAssetCollectionCountTest)
24812486 DeleteSpace (SpaceSystem, Space.Id );
24822487
24832488 LogOut (UserSystem);
2484- }
2489+ }
2490+
2491+ class AssetCollectionTypeDtoMock
2492+ : public PublicTestBaseWithParam<std::tuple<csp::common::String, csp::systems::EAssetCollectionType, csp::common::String>>
2493+ {
2494+ };
2495+
2496+ TEST_P (AssetCollectionTypeDtoMock, AssetCollectionTypeDtoMockTest)
2497+ {
2498+ const auto PrototypeServiceMock = std::make_unique<csp::services::generated::prototypeservice::PrototypeApiMock>();
2499+
2500+ csp::systems::SystemsManager::Get ().GetLogSystem ()->SetSystemLevel (csp::common::LogLevel::Error);
2501+
2502+ // Test parameters
2503+ const csp::common::String& DtoTypeString = std::get<0 >(GetParam ());
2504+ const csp::systems::EAssetCollectionType ExpectedAssetCollectionType = std::get<1 >(GetParam ());
2505+ const csp::common::String& ExpectedLogMessage = std::get<2 >(GetParam ());
2506+
2507+ const csp::common::String& MockAssetCollectionId = " 1234" ;
2508+
2509+ // The promise
2510+ std::promise<csp::systems::AssetCollectionResult> ResultPromise;
2511+ std::future<csp::systems::AssetCollectionResult> ResultFuture = ResultPromise.get_future ();
2512+
2513+ EXPECT_CALL (*PrototypeServiceMock, prototypesIdGet)
2514+ .WillOnce (
2515+ [DtoTypeString](const chs_prototype::IPrototypeApiBase::prototypesIdGetParams& /* Params*/ ,
2516+ csp::services::ApiResponseHandlerBase* ResponseHandler, csp::common::CancellationToken& /* CancellationToken*/ )
2517+ {
2518+ chs_prototype::PrototypeDto Dto;
2519+ auto Response = csp::web::HttpResponse ();
2520+ Response.SetResponseCode (csp::web::EResponseCodes::ResponseOK);
2521+
2522+ csp::web::HttpPayload Payload;
2523+
2524+ const csp::common::String RequestBody = R"(
2525+ {
2526+ "type": ")"
2527+ + DtoTypeString + R"( "
2528+ }
2529+ )" ;
2530+
2531+ Payload.AddHeader (CSP_TEXT (" Content-Type" ), CSP_TEXT (" application/json" ));
2532+ Payload.SetContent (RequestBody);
2533+
2534+ Response.GetMutablePayload () = Payload;
2535+ ResponseHandler->OnHttpResponse (Response);
2536+ });
2537+
2538+ csp::systems::AssetCollectionResultCallback Callback
2539+ = [&ResultPromise](const csp::systems::AssetCollectionResult& Result) { ResultPromise.set_value (Result); };
2540+
2541+ csp::services::ResponseHandlerPtr ResponseHandler = PrototypeServiceMock->CreateHandler <csp::systems::AssetCollectionResultCallback,
2542+ csp::systems::AssetCollectionResult, void , csp::services::generated::prototypeservice::PrototypeDto>(Callback, nullptr );
2543+
2544+ RAIIMockLogger MockLogger {};
2545+ if (ExpectedLogMessage.IsEmpty () == false )
2546+ {
2547+ EXPECT_CALL (MockLogger.MockLogCallback , Call (csp::common::LogLevel::Error, testing::HasSubstr (ExpectedLogMessage))).Times (1 );
2548+ }
2549+
2550+ PrototypeServiceMock->prototypesIdGet ({ MockAssetCollectionId }, ResponseHandler, csp::common::CancellationToken::Dummy ());
2551+ auto Result = ResultFuture.get ();
2552+
2553+ EXPECT_EQ (Result.GetHttpResultCode (), static_cast <uint16_t >(csp::web::EResponseCodes::ResponseOK));
2554+ EXPECT_EQ (Result.GetAssetCollection ().Type , ExpectedAssetCollectionType);
2555+ }
2556+
2557+ INSTANTIATE_TEST_SUITE_P (AssetSystemTests, AssetCollectionTypeDtoMock,
2558+ testing::Values (std::make_tuple(" Default" , csp::systems::EAssetCollectionType::DEFAULT, " " ),
2559+ std::make_tuple(" FoundationInternal" , csp::systems::EAssetCollectionType::FOUNDATION_INTERNAL, " " ),
2560+ std::make_tuple(" CommentContainer" , csp::systems::EAssetCollectionType::COMMENT_CONTAINER, " " ),
2561+ std::make_tuple(" Comment" , csp::systems::EAssetCollectionType::COMMENT, " " ),
2562+ std::make_tuple(" SpaceThumbnail" , csp::systems::EAssetCollectionType::SPACE_THUMBNAIL, " " ),
2563+ std::make_tuple(" NotARealType" , csp::systems::EAssetCollectionType::DEFAULT,
2564+ " Encountered unknown prototype type whilst processing an asset collection DTO:" )));
0 commit comments