diff --git a/src/CalcViewModel/DataLoaders/CurrencyHttpClient.cpp b/src/CalcViewModel/DataLoaders/CurrencyHttpClient.cpp index 59d73fa8..7f5f0127 100644 --- a/src/CalcViewModel/DataLoaders/CurrencyHttpClient.cpp +++ b/src/CalcViewModel/DataLoaders/CurrencyHttpClient.cpp @@ -49,6 +49,7 @@ namespace "Rt": 0.25 } ])"; + constexpr auto MockCurrencyStaticData = LR"( [ { diff --git a/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj b/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj index 56532704..9c06b2c7 100644 --- a/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj +++ b/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj @@ -356,7 +356,6 @@ - @@ -378,6 +377,7 @@ + diff --git a/src/CalcViewModelCopyForUT/CurrencyHttpClient.cpp b/src/CalcViewModelCopyForUT/CurrencyHttpClient.cpp new file mode 100644 index 00000000..988354e2 --- /dev/null +++ b/src/CalcViewModelCopyForUT/CurrencyHttpClient.cpp @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#include "pch.h" +#include "CalcViewModel/DataLoaders/CurrencyHttpClient.h" + +namespace +{ + constexpr auto MockCurrencyConverterData = + LR"([{"An":"USD","Ch":0,"Pc":0,"Rt":1},{"An":"EUR","Ch":0.003803,"Pc":0.4149,"Rt":0.920503,"Yh":0.9667,"Yl":0.86701}])"; + constexpr auto MockCurrencyStaticData = + LR"([{"CountryCode":"USA","CountryName":"United States","CurrencyCode":"USD","CurrencyName":"Dollar","CurrencySymbol":"$"},{"CountryCode":"EUR","CountryName":"Europe","CurrencyCode":"EUR","CurrencyName":"Euro","CurrencySymbol":"€"}])"; +} + +namespace CalculatorApp::ViewModel::DataLoaders +{ + void CurrencyHttpClient::Initialize(Platform::String ^ sourceCurrencyCode, Platform::String ^ responseLanguage) + { + m_sourceCurrencyCode = sourceCurrencyCode; + m_responseLanguage = responseLanguage; + } + + Platform::String ^ CurrencyHttpClient::GetCurrencyMetadata() const + { + (void)m_responseLanguage; // to be used in production. + return ref new Platform::String(MockCurrencyStaticData); + } + + Platform::String ^ CurrencyHttpClient::GetCurrencyRatios() const + { + (void)m_sourceCurrencyCode; // to be used in production. + return ref new Platform::String(MockCurrencyConverterData); + } +} // namespace CalculatorApp::ViewModel::DataLoaders diff --git a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj index 24b78e95..39b49d58 100644 --- a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj +++ b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj @@ -207,7 +207,6 @@ - @@ -243,7 +242,6 @@ - diff --git a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj.filters b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj.filters index 54a1bed4..93b36fe4 100644 --- a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj.filters +++ b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj.filters @@ -24,9 +24,6 @@ - - Mocks - @@ -38,9 +35,6 @@ - - Mocks - @@ -75,8 +69,5 @@ {f2987b0a-9832-46fc-b818-d5347362b3d8} - - {d3ec8922-022d-4531-8744-f65a872f3841} - \ No newline at end of file diff --git a/src/CalculatorUnitTests/CurrencyConverterUnitTests.cpp b/src/CalculatorUnitTests/CurrencyConverterUnitTests.cpp index 54f5193b..c4ac80af 100644 --- a/src/CalculatorUnitTests/CurrencyConverterUnitTests.cpp +++ b/src/CalculatorUnitTests/CurrencyConverterUnitTests.cpp @@ -14,61 +14,12 @@ using namespace CalculatorApp::ViewModel; using namespace CalculatorUnitTests; using namespace Concurrency; using namespace Platform; -using namespace std; using namespace UnitConversionManager; using namespace Windows::Foundation; using namespace Windows::Storage; using namespace Windows::Web::Http; using namespace Microsoft::VisualStudio::CppUnitTestFramework; -namespace CalculatorApp::ViewModel -{ - namespace DataLoaders - { - class MockCurrencyHttpClientWithResult : public CurrencyHttpClient - { - public: - MockCurrencyHttpClientWithResult(String ^ staticResponse, String ^ allRatiosResponse) - : m_staticResponse(staticResponse) - , m_allRatiosResponse(allRatiosResponse) - { - } - - IAsyncOperationWithProgress ^ GetCurrencyMetadata() override - { - return ref new MockAsyncOperationWithProgress(m_staticResponse); - } - - IAsyncOperationWithProgress ^ GetCurrencyRatios() override - { - return ref new MockAsyncOperationWithProgress(m_allRatiosResponse); - } - - private: - String ^ m_staticResponse; - String ^ m_allRatiosResponse; - }; - - class MockCurrencyHttpClientThrowsException : public CurrencyHttpClient - { - public: - MockCurrencyHttpClientThrowsException() - { - } - - IAsyncOperationWithProgress ^ GetCurrencyMetadata() override - { - throw ref new NotImplementedException(); - } - - IAsyncOperationWithProgress ^ GetCurrencyRatios() override - { - throw ref new NotImplementedException(); - } - }; - } -} - class DataLoadedCallback : public UnitConversionManager::IViewModelCurrencyCallback { public: @@ -82,10 +33,10 @@ public: m_task_completion_event.set(); } - void CurrencySymbolsCallback(_In_ const wstring& /*fromSymbol*/, _In_ const wstring& /*toSymbol*/) override + void CurrencySymbolsCallback(_In_ const std::wstring& /*fromSymbol*/, _In_ const std::wstring& /*toSymbol*/) override { } - void CurrencyRatiosCallback(_In_ const wstring& /*ratioEquality*/, _In_ const wstring& /*accRatioEquality*/) override + void CurrencyRatiosCallback(_In_ const std::wstring& /*ratioEquality*/, _In_ const std::wstring& /*accRatioEquality*/) override { } void CurrencyTimestampCallback(_In_ const std::wstring& /*timestamp*/, bool /*isWeekOldData*/) override @@ -103,14 +54,7 @@ namespace CalculatorUnitTests { constexpr auto sc_Language_EN = L"en-US"; - unique_ptr MakeLoaderWithResults(String ^ staticResponse, String ^ allRatiosResponse) - { - auto client = make_unique(staticResponse, allRatiosResponse); - client->SetSourceCurrencyCode(StringReference(DefaultCurrencyCode.data())); - return make_unique(move(client)); - } - - String^ SerializeContent(const vector& data) + String^ SerializeContent(const std::vector& data) { String^ result = L""; String^ delimiter = CurrencyDataLoaderConstants::CacheDelimiter; @@ -193,8 +137,8 @@ namespace CalculatorUnitTests VERIFY_IS_TRUE(DeleteCurrencyCacheFiles()); - VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::StaticDataFilename, CurrencyHttpClient::GetRawStaticDataResponse())); - VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::AllRatiosDataFilename, CurrencyHttpClient::GetRawAllRatiosDataResponse())); + VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::StaticDataFilename, CurrencyHttpClient{}.GetCurrencyMetadata())); + VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::AllRatiosDataFilename, CurrencyHttpClient{}.GetCurrencyRatios())); } TEST_CLASS(CurrencyConverterLoadTests){ public: TEST_METHOD_INITIALIZE(DeleteCacheFiles){ DeleteCurrencyCacheFiles(); @@ -203,7 +147,7 @@ namespace CalculatorUnitTests TEST_METHOD(LoadFromCache_Fail_NoCacheKey) { RemoveFromLocalSettings(CurrencyDataLoaderConstants::CacheTimestampKey); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; bool didLoad = loader.TryLoadDataFromCacheAsync().get(); @@ -221,7 +165,7 @@ TEST_METHOD(LoadFromCache_Fail_OlderThanADay) dayOld.UniversalTime = now.UniversalTime - CurrencyDataLoaderConstants::DayDuration - 1; InsertToLocalSettings(CurrencyDataLoaderConstants::CacheTimestampKey, dayOld); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; bool didLoad = loader.TryLoadDataFromCacheAsync().get(); @@ -238,9 +182,9 @@ TEST_METHOD(LoadFromCache_Fail_StaticDataFileDoesNotExist) InsertToLocalSettings(CurrencyDataLoaderConstants::CacheTimestampKey, now); VERIFY_IS_TRUE(DeleteFileFromLocalCacheFolder(CurrencyDataLoaderConstants::StaticDataFilename)); - VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::AllRatiosDataFilename, CurrencyHttpClient::GetRawAllRatiosDataResponse())); + VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::AllRatiosDataFilename, CurrencyHttpClient{}.GetCurrencyRatios())); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; bool didLoad = loader.TryLoadDataFromCacheAsync().get(); @@ -256,10 +200,10 @@ TEST_METHOD(LoadFromCache_Fail_AllRatiosDataFileDoesNotExist) DateTime now = Utils::GetUniversalSystemTime(); InsertToLocalSettings(CurrencyDataLoaderConstants::CacheTimestampKey, now); - VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::StaticDataFilename, CurrencyHttpClient::GetRawStaticDataResponse())); + VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::StaticDataFilename, CurrencyHttpClient{}.GetCurrencyMetadata())); VERIFY_IS_TRUE(DeleteFileFromLocalCacheFolder(CurrencyDataLoaderConstants::AllRatiosDataFilename)); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; bool didLoad = loader.TryLoadDataFromCacheAsync().get(); @@ -276,10 +220,10 @@ TEST_METHOD(LoadFromCache_Fail_ResponseLanguageChanged) // Tests always use en-US as response language. Insert a different lang-code to fail the test. InsertToLocalSettings(CurrencyDataLoaderConstants::CacheLangcodeKey, L"ar-SA"); - VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::StaticDataFilename, CurrencyHttpClient::GetRawStaticDataResponse())); + VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::StaticDataFilename, CurrencyHttpClient{}.GetCurrencyMetadata())); VERIFY_IS_TRUE(DeleteFileFromLocalCacheFolder(CurrencyDataLoaderConstants::AllRatiosDataFilename)); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; bool didLoad = loader.TryLoadDataFromCacheAsync().get(); @@ -292,7 +236,7 @@ TEST_METHOD(LoadFromCache_Success) { StandardCacheSetup(); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; bool didLoad = loader.TryLoadDataFromCacheAsync().get(); @@ -303,7 +247,7 @@ TEST_METHOD(LoadFromCache_Success) TEST_METHOD(LoadFromWeb_Fail_ClientIsNullptr) { - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; bool didLoad = loader.TryLoadDataFromWebAsync().get(); @@ -314,7 +258,7 @@ TEST_METHOD(LoadFromWeb_Fail_ClientIsNullptr) TEST_METHOD(LoadFromWeb_Fail_WebException) { - CurrencyDataLoader loader(make_unique(), L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; bool didLoad = loader.TryLoadDataFromWebAsync().get(); @@ -325,24 +269,22 @@ TEST_METHOD(LoadFromWeb_Fail_WebException) TEST_METHOD(LoadFromWeb_Success) { - String ^ staticResponse = CurrencyHttpClient::GetRawStaticDataResponse(); - String ^ allRatiosResponse = CurrencyHttpClient::GetRawAllRatiosDataResponse(); - unique_ptr loader = MakeLoaderWithResults(staticResponse, allRatiosResponse); + CurrencyDataLoader loader{ L"en-US" }; - bool didLoad = loader->TryLoadDataFromWebAsync().get(); + bool didLoad = loader.TryLoadDataFromWebAsync().get(); VERIFY_IS_TRUE(didLoad); - VERIFY_IS_TRUE(loader->LoadFinished()); - VERIFY_IS_TRUE(loader->LoadedFromWeb()); + VERIFY_IS_TRUE(loader.LoadFinished()); + VERIFY_IS_TRUE(loader.LoadedFromWeb()); } TEST_METHOD(Load_Success_LoadedFromCache) { StandardCacheSetup(); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; auto data_loaded_event = task_completion_event(); - loader.SetViewModelCallback(make_shared(data_loaded_event)); + loader.SetViewModelCallback(std::make_shared(data_loaded_event)); auto data_loaded_task = create_task(data_loaded_event); loader.LoadData(); @@ -362,20 +304,18 @@ TEST_METHOD(Load_Success_LoadedFromWeb) dayOld.UniversalTime = now.UniversalTime - CurrencyDataLoaderConstants::DayDuration - 1; InsertToLocalSettings(CurrencyDataLoaderConstants::CacheTimestampKey, dayOld); - String ^ staticResponse = CurrencyHttpClient::GetRawStaticDataResponse(); - String ^ allRatiosResponse = CurrencyHttpClient::GetRawAllRatiosDataResponse(); - unique_ptr loader = MakeLoaderWithResults(staticResponse, allRatiosResponse); + CurrencyDataLoader loader{ L"en-US" }; auto data_loaded_event = task_completion_event(); - loader->SetViewModelCallback(make_shared(data_loaded_event)); + loader.SetViewModelCallback(std::make_shared(data_loaded_event)); auto data_loaded_task = create_task(data_loaded_event); - loader->LoadData(); + loader.LoadData(); data_loaded_task.wait(); - VERIFY_IS_TRUE(loader->LoadFinished()); - VERIFY_IS_FALSE(loader->LoadedFromCache()); - VERIFY_IS_TRUE(loader->LoadedFromWeb()); + VERIFY_IS_TRUE(loader.LoadFinished()); + VERIFY_IS_FALSE(loader.LoadedFromCache()); + VERIFY_IS_TRUE(loader.LoadedFromWeb()); } } ; @@ -384,18 +324,18 @@ TEST_CLASS(CurrencyConverterUnitTests) { const UCM::Category CURRENCY_CATEGORY = { NavCategoryStates::Serialize(ViewMode::Currency), L"Currency", false /*supportsNegative*/ }; - const UCM::Unit GetUnit(const vector& unitList, const wstring& target) + const UCM::Unit GetUnit(const std::vector& unitList, const std::wstring& target) { - return *find_if(begin(unitList), end(unitList), [&target](const UCM::Unit& u) { return u.abbreviation == target; }); + return *std::find_if(std::begin(unitList), std::end(unitList), [&target](const UCM::Unit& u) { return u.abbreviation == target; }); } TEST_METHOD(Loaded_LoadOrderedUnits) { StandardCacheSetup(); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; auto data_loaded_event = task_completion_event(); - loader.SetViewModelCallback(make_shared(data_loaded_event)); + loader.SetViewModelCallback(std::make_shared(data_loaded_event)); auto data_loaded_task = create_task(data_loaded_event); loader.LoadData(); @@ -405,27 +345,27 @@ TEST_CLASS(CurrencyConverterUnitTests) VERIFY_IS_TRUE(loader.LoadedFromCache()); VERIFY_IS_FALSE(loader.LoadedFromWeb()); - vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); + std::vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); VERIFY_ARE_EQUAL(size_t{ 2 }, unitList.size()); const UCM::Unit usdUnit = GetUnit(unitList, L"USD"); const UCM::Unit eurUnit = GetUnit(unitList, L"EUR"); - VERIFY_ARE_EQUAL(wstring(L"United States - Dollar"), usdUnit.name); - VERIFY_ARE_EQUAL(wstring(L"USD"), usdUnit.abbreviation); + VERIFY_ARE_EQUAL(std::wstring(L"United States - Dollar"), usdUnit.name); + VERIFY_ARE_EQUAL(std::wstring(L"USD"), usdUnit.abbreviation); - VERIFY_ARE_EQUAL(wstring(L"Europe - Euro"), eurUnit.name); - VERIFY_ARE_EQUAL(wstring(L"EUR"), eurUnit.abbreviation); + VERIFY_ARE_EQUAL(std::wstring(L"Europe - Euro"), eurUnit.name); + VERIFY_ARE_EQUAL(std::wstring(L"EUR"), eurUnit.abbreviation); } TEST_METHOD(Loaded_LoadOrderedRatios) { StandardCacheSetup(); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; auto data_loaded_event = task_completion_event(); - loader.SetViewModelCallback(make_shared(data_loaded_event)); + loader.SetViewModelCallback(std::make_shared(data_loaded_event)); auto data_loaded_task = create_task(data_loaded_event); loader.LoadData(); @@ -435,13 +375,13 @@ TEST_CLASS(CurrencyConverterUnitTests) VERIFY_IS_TRUE(loader.LoadedFromCache()); VERIFY_IS_FALSE(loader.LoadedFromWeb()); - vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); + std::vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); VERIFY_ARE_EQUAL(size_t{ 2 }, unitList.size()); const UCM::Unit usdUnit = GetUnit(unitList, L"USD"); const UCM::Unit eurUnit = GetUnit(unitList, L"EUR"); - unordered_map ratios = loader.LoadOrderedRatios(usdUnit); + std::unordered_map ratios = loader.LoadOrderedRatios(usdUnit); VERIFY_ARE_EQUAL(size_t{ 2 }, ratios.size()); UCM::ConversionData usdRatioData = ratios[usdUnit]; @@ -455,10 +395,10 @@ TEST_CLASS(CurrencyConverterUnitTests) { StandardCacheSetup(); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; auto data_loaded_event = task_completion_event(); - loader.SetViewModelCallback(make_shared(data_loaded_event)); + loader.SetViewModelCallback(std::make_shared(data_loaded_event)); auto data_loaded_task = create_task(data_loaded_event); loader.LoadData(); @@ -468,26 +408,26 @@ TEST_CLASS(CurrencyConverterUnitTests) VERIFY_IS_TRUE(loader.LoadedFromCache()); VERIFY_IS_FALSE(loader.LoadedFromWeb()); - vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); + std::vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); VERIFY_ARE_EQUAL(size_t{ 2 }, unitList.size()); const UCM::Unit usdUnit = GetUnit(unitList, L"USD"); const UCM::Unit eurUnit = GetUnit(unitList, L"EUR"); - const pair symbols = loader.GetCurrencySymbols(usdUnit, eurUnit); + const auto symbols = loader.GetCurrencySymbols(usdUnit, eurUnit); - VERIFY_ARE_EQUAL(wstring(L"$"), symbols.first); - VERIFY_ARE_EQUAL(wstring(L"\x20ac"), symbols.second); // € + VERIFY_ARE_EQUAL(std::wstring(L"$"), symbols.first); + VERIFY_ARE_EQUAL(std::wstring(L"\x20ac"), symbols.second); // € } TEST_METHOD(Loaded_GetCurrencySymbols_Invalid) { StandardCacheSetup(); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; auto data_loaded_event = task_completion_event(); - loader.SetViewModelCallback(make_shared(data_loaded_event)); + loader.SetViewModelCallback(std::make_shared(data_loaded_event)); auto data_loaded_task = create_task(data_loaded_event); loader.LoadData(); @@ -501,36 +441,36 @@ TEST_CLASS(CurrencyConverterUnitTests) const UCM::Unit fakeUnit2 = { 2, L"fakeUnit2", L"FUD2", false, false, false }; - pair symbols = loader.GetCurrencySymbols(fakeUnit1, fakeUnit2); + auto symbols = loader.GetCurrencySymbols(fakeUnit1, fakeUnit2); - VERIFY_ARE_EQUAL(wstring(L""), wstring(symbols.first.c_str())); - VERIFY_ARE_EQUAL(wstring(L""), wstring(symbols.second.c_str())); + VERIFY_ARE_EQUAL(std::wstring(L""), std::wstring(symbols.first.c_str())); + VERIFY_ARE_EQUAL(std::wstring(L""), std::wstring(symbols.second.c_str())); // Verify that when only one unit is valid, both symbols return as empty string. - vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); + std::vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); VERIFY_ARE_EQUAL(size_t{ 2 }, unitList.size()); const UCM::Unit usdUnit = GetUnit(unitList, L"USD"); symbols = loader.GetCurrencySymbols(fakeUnit1, usdUnit); - VERIFY_ARE_EQUAL(wstring(L""), symbols.first); - VERIFY_ARE_EQUAL(wstring(L""), symbols.second); + VERIFY_ARE_EQUAL(std::wstring(L""), symbols.first); + VERIFY_ARE_EQUAL(std::wstring(L""), symbols.second); symbols = loader.GetCurrencySymbols(usdUnit, fakeUnit1); - VERIFY_ARE_EQUAL(wstring(L""), symbols.first); - VERIFY_ARE_EQUAL(wstring(L""), symbols.second); + VERIFY_ARE_EQUAL(std::wstring(L""), symbols.first); + VERIFY_ARE_EQUAL(std::wstring(L""), symbols.second); } TEST_METHOD(Loaded_GetCurrencyRatioEquality_Valid) { StandardCacheSetup(); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; auto data_loaded_event = task_completion_event(); - loader.SetViewModelCallback(make_shared(data_loaded_event)); + loader.SetViewModelCallback(std::make_shared(data_loaded_event)); auto data_loaded_task = create_task(data_loaded_event); loader.LoadData(); @@ -540,26 +480,26 @@ TEST_CLASS(CurrencyConverterUnitTests) VERIFY_IS_TRUE(loader.LoadedFromCache()); VERIFY_IS_FALSE(loader.LoadedFromWeb()); - vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); + std::vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); VERIFY_ARE_EQUAL(size_t{ 2 }, unitList.size()); const UCM::Unit usdUnit = GetUnit(unitList, L"USD"); const UCM::Unit eurUnit = GetUnit(unitList, L"EUR"); - const pair ratio = loader.GetCurrencyRatioEquality(usdUnit, eurUnit); + const auto ratio = loader.GetCurrencyRatioEquality(usdUnit, eurUnit); - VERIFY_ARE_EQUAL(wstring(L"1 USD = 0.9205 EUR"), ratio.first); - VERIFY_ARE_EQUAL(wstring(L"1 United States Dollar = 0.9205 Europe Euro"), ratio.second); + VERIFY_ARE_EQUAL(std::wstring(L"1 USD = 0.9205 EUR"), ratio.first); + VERIFY_ARE_EQUAL(std::wstring(L"1 United States Dollar = 0.9205 Europe Euro"), ratio.second); } TEST_METHOD(Loaded_GetCurrencyRatioEquality_Invalid) { StandardCacheSetup(); - CurrencyDataLoader loader(nullptr, L"en-US"); + CurrencyDataLoader loader{ L"en-US" }; auto data_loaded_event = task_completion_event(); - loader.SetViewModelCallback(make_shared(data_loaded_event)); + loader.SetViewModelCallback(std::make_shared(data_loaded_event)); auto data_loaded_task = create_task(data_loaded_event); loader.LoadData(); @@ -572,26 +512,26 @@ TEST_CLASS(CurrencyConverterUnitTests) const UCM::Unit fakeUnit1 = { 1, L"fakeUnit1", L"fakeCountry1", L"FUD1", false, false, false }; const UCM::Unit fakeUnit2 = { 2, L"fakeUnit2", L"fakeCountry2", L"FUD2", false, false, false }; - pair ratio = loader.GetCurrencyRatioEquality(fakeUnit1, fakeUnit2); + auto ratio = loader.GetCurrencyRatioEquality(fakeUnit1, fakeUnit2); - VERIFY_ARE_EQUAL(wstring(L""), ratio.first); - VERIFY_ARE_EQUAL(wstring(L""), ratio.second); + VERIFY_ARE_EQUAL(std::wstring(L""), ratio.first); + VERIFY_ARE_EQUAL(std::wstring(L""), ratio.second); // Verify that when only one unit is valid, both symbols return as empty string. - vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); + std::vector unitList = loader.GetOrderedUnits(CURRENCY_CATEGORY); VERIFY_ARE_EQUAL(size_t{ 2 }, unitList.size()); const UCM::Unit usdUnit = GetUnit(unitList, L"USD"); ratio = loader.GetCurrencyRatioEquality(fakeUnit1, usdUnit); - VERIFY_ARE_EQUAL(wstring(L""), ratio.first); - VERIFY_ARE_EQUAL(wstring(L""), ratio.second); + VERIFY_ARE_EQUAL(std::wstring(L""), ratio.first); + VERIFY_ARE_EQUAL(std::wstring(L""), ratio.second); ratio = loader.GetCurrencyRatioEquality(usdUnit, fakeUnit1); - VERIFY_ARE_EQUAL(wstring(L""), ratio.first); - VERIFY_ARE_EQUAL(wstring(L""), ratio.second); + VERIFY_ARE_EQUAL(std::wstring(L""), ratio.first); + VERIFY_ARE_EQUAL(std::wstring(L""), ratio.second); } TEST_METHOD(Test_RoundCurrencyRatio) diff --git a/src/CalculatorUnitTests/Mocks/CurrencyHttpClient.cpp b/src/CalculatorUnitTests/Mocks/CurrencyHttpClient.cpp deleted file mode 100644 index 975a3388..00000000 --- a/src/CalculatorUnitTests/Mocks/CurrencyHttpClient.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -#include "pch.h" -#include "CurrencyHttpClient.h" - -#include "CalcViewModel/Common/NetworkManager.h" - -using namespace CalculatorApp::ViewModel::DataLoaders; -using namespace Platform; -using namespace Windows::Foundation; -using namespace Windows::System::UserProfile; -using namespace Windows::Web::Http; - -// Generic responses so unit tests will pass. -static constexpr auto STATIC_DATA_RESPONSE = - LR"([{"CountryCode":"USA","CountryName":"United States","CurrencyCode":"USD","CurrencyName":"Dollar","CurrencySymbol":"$"},{"CountryCode":"EUR","CountryName":"Europe","CurrencyCode":"EUR","CurrencyName":"Euro","CurrencySymbol":"€"}])"; -static constexpr auto ALL_RATIOS_RESPONSE = - LR"([{"An":"USD","Ch":0,"Pc":0,"Rt":1},{"An":"EUR","Ch":0.003803,"Pc":0.4149,"Rt":0.920503,"Yh":0.9667,"Yl":0.86701}])"; - -CurrencyHttpClient::CurrencyHttpClient() -{ -} - -String ^ CurrencyHttpClient::GetRawStaticDataResponse() -{ - return StringReference(STATIC_DATA_RESPONSE); -} - -String ^ CurrencyHttpClient::GetRawAllRatiosDataResponse() -{ - return StringReference(ALL_RATIOS_RESPONSE); -} - -IAsyncOperationWithProgress ^ CurrencyHttpClient::GetCurrencyMetadata() -{ - return ref new MockAsyncOperationWithProgress(StringReference(STATIC_DATA_RESPONSE)); -} - -IAsyncOperationWithProgress ^ CurrencyHttpClient::GetCurrencyRatios() -{ - return ref new MockAsyncOperationWithProgress(StringReference(ALL_RATIOS_RESPONSE)); -} - -MockAsyncOperationWithProgress::MockAsyncOperationWithProgress(String ^ result) - : m_result(result) -{ -} - -HResult MockAsyncOperationWithProgress::ErrorCode::get() -{ - HResult okayResult; - okayResult.Value = S_OK; - return okayResult; -} diff --git a/src/CalculatorUnitTests/Mocks/CurrencyHttpClient.h b/src/CalculatorUnitTests/Mocks/CurrencyHttpClient.h deleted file mode 100644 index bcb7206c..00000000 --- a/src/CalculatorUnitTests/Mocks/CurrencyHttpClient.h +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -#pragma once - -namespace CalculatorApp::ViewModel -{ - namespace DataLoaders - { - class CurrencyHttpClient - { - public: - CurrencyHttpClient(); - - static Platform::String ^ GetRawStaticDataResponse(); - static Platform::String ^ GetRawAllRatiosDataResponse(); - - // ICurrencyHttpClient - void SetSourceCurrencyCode(Platform::String ^ sourceCurrencyCode) override - { - } - void SetResponseLanguage(Platform::String ^ responseLanguage) override - { - } - - virtual Windows::Foundation::IAsyncOperationWithProgress ^ GetCurrencyMetadata() override; - virtual Windows::Foundation::IAsyncOperationWithProgress ^ GetCurrencyRatios() override; - // ICurrencyHttpClient - }; - - public - ref class MockAsyncOperationWithProgress sealed - : public Windows::Foundation::IAsyncOperationWithProgress - { - public: - MockAsyncOperationWithProgress(Platform::String ^ result); - - // IAsyncInfo - virtual property Windows::Foundation::HResult ErrorCode - { - Windows::Foundation::HResult get(); - } - - virtual property unsigned int Id - { - unsigned int get() - { - return 128u; - } - } - - virtual property Windows::Foundation::AsyncStatus Status - { - Windows::Foundation::AsyncStatus get() - { - return Windows::Foundation::AsyncStatus::Completed; - } - } - - virtual void Cancel() - { - } - virtual void Close() - { - } - // IAsyncInfo - - // IAsyncOperationWithProgress - virtual property Windows::Foundation::AsyncOperationProgressHandler^ Progress - { - Windows::Foundation::AsyncOperationProgressHandler^ get() { return nullptr; } - void set(Windows::Foundation::AsyncOperationProgressHandler^ handler) {} - } - - virtual property Windows::Foundation::AsyncOperationWithProgressCompletedHandler^ Completed - { - Windows::Foundation::AsyncOperationWithProgressCompletedHandler^ get() { return nullptr; } - void set(Windows::Foundation::AsyncOperationWithProgressCompletedHandler^ handler) {} - } - - virtual Platform::String^ GetResults() { return m_result; } - // IAsyncOperationWithProgress - - private: - Platform::String^ m_result; - }; - } -} diff --git a/src/CalculatorUnitTests/pch.h b/src/CalculatorUnitTests/pch.h index e24dd530..11404e90 100644 --- a/src/CalculatorUnitTests/pch.h +++ b/src/CalculatorUnitTests/pch.h @@ -62,7 +62,6 @@ #include "CalcViewModel/Common/CalculatorButtonUser.h" #include "CalcViewModel/Common/NetworkManager.h" -#include "Mocks/CurrencyHttpClient.h" #include "Helpers.h" #include "UnitTestApp.xaml.h"