mirror of
https://github.com/Microsoft/calculator.git
synced 2025-08-20 21:33:10 -07:00
mock web failures
This commit is contained in:
parent
39124bed84
commit
bc880f06bc
5 changed files with 38 additions and 14 deletions
|
@ -127,6 +127,7 @@ namespace
|
|||
|
||||
namespace CalculatorApp::ViewModel::DataLoaders
|
||||
{
|
||||
bool CurrencyHttpClient::ForceWebFailure = false;
|
||||
void CurrencyHttpClient::Initialize(Platform::String ^ sourceCurrencyCode, Platform::String ^ responseLanguage)
|
||||
{
|
||||
m_sourceCurrencyCode = sourceCurrencyCode;
|
||||
|
|
|
@ -8,6 +8,7 @@ namespace CalculatorApp::ViewModel::DataLoaders
|
|||
class CurrencyHttpClient
|
||||
{
|
||||
public:
|
||||
static bool ForceWebFailure;
|
||||
void Initialize(Platform::String ^ sourceCurrencyCode, Platform::String ^ responseLanguage);
|
||||
|
||||
Platform::String ^ GetCurrencyMetadata() const;
|
||||
|
|
|
@ -319,7 +319,6 @@
|
|||
<ClInclude Include="..\CalcViewModel\Common\TraceLogger.h" />
|
||||
<ClInclude Include="..\CalcViewModel\Common\Utils.h" />
|
||||
<ClInclude Include="..\CalcViewModel\DataLoaders\CurrencyDataLoader.h" />
|
||||
<ClInclude Include="..\CalcViewModel\DataLoaders\CurrencyHttpClient.h" />
|
||||
<ClInclude Include="..\CalcViewModel\DataLoaders\UnitConverterDataConstants.h" />
|
||||
<ClInclude Include="..\CalcViewModel\DataLoaders\UnitConverterDataLoader.h" />
|
||||
<ClInclude Include="..\CalcViewModel\DateCalculatorViewModel.h" />
|
||||
|
@ -377,7 +376,7 @@
|
|||
<ClCompile Include="..\CalcViewModel\Snapshots.cpp" />
|
||||
<ClCompile Include="..\CalcViewModel\StandardCalculatorViewModel.cpp" />
|
||||
<ClCompile Include="..\CalcViewModel\UnitConverterViewModel.cpp" />
|
||||
<ClCompile Include="CurrencyHttpClient.cpp" />
|
||||
<ClCompile Include="DataLoaders\CurrencyHttpClient.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CalcManager\CalcManager.vcxproj">
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// Licensed under the MIT License.
|
||||
|
||||
#include "pch.h"
|
||||
#include "CalcViewModel/DataLoaders/CurrencyHttpClient.h"
|
||||
#include "DataLoaders/CurrencyHttpClient.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
@ -14,6 +14,7 @@ namespace
|
|||
|
||||
namespace CalculatorApp::ViewModel::DataLoaders
|
||||
{
|
||||
bool CurrencyHttpClient::ForceWebFailure = false;
|
||||
void CurrencyHttpClient::Initialize(Platform::String ^ sourceCurrencyCode, Platform::String ^ responseLanguage)
|
||||
{
|
||||
m_sourceCurrencyCode = sourceCurrencyCode;
|
||||
|
@ -22,12 +23,20 @@ namespace CalculatorApp::ViewModel::DataLoaders
|
|||
|
||||
Platform::String ^ CurrencyHttpClient::GetCurrencyMetadata() const
|
||||
{
|
||||
if (ForceWebFailure)
|
||||
{
|
||||
throw ref new Platform::Exception(E_FAIL, L"Mocked Network Failure: failed to load currency metadata");
|
||||
}
|
||||
(void)m_responseLanguage; // to be used in production.
|
||||
return ref new Platform::String(MockCurrencyStaticData);
|
||||
}
|
||||
|
||||
Platform::String ^ CurrencyHttpClient::GetCurrencyRatios() const
|
||||
{
|
||||
if (ForceWebFailure)
|
||||
{
|
||||
throw ref new Platform::Exception(E_FAIL, L"Mocked Network Failure: failed to load currency metadata");
|
||||
}
|
||||
(void)m_sourceCurrencyCode; // to be used in production.
|
||||
return ref new Platform::String(MockCurrencyConverterData);
|
||||
}
|
|
@ -52,6 +52,27 @@ private:
|
|||
|
||||
namespace CalculatorUnitTests
|
||||
{
|
||||
namespace
|
||||
{
|
||||
template <class F>
|
||||
auto ScopeGuard(F&& f)
|
||||
{
|
||||
struct ScopeExit
|
||||
{
|
||||
explicit ScopeExit(F&& ef)
|
||||
: ExitFunctor(std::forward<F>(ef))
|
||||
{
|
||||
}
|
||||
~ScopeExit()
|
||||
{
|
||||
ExitFunctor();
|
||||
}
|
||||
F ExitFunctor;
|
||||
};
|
||||
return ScopeExit{ std::forward<F>(f) };
|
||||
}
|
||||
}
|
||||
|
||||
constexpr auto sc_Language_EN = L"en-US";
|
||||
|
||||
String^ SerializeContent(const std::vector<String^>& data)
|
||||
|
@ -165,6 +186,8 @@ TEST_METHOD(LoadFromCache_Fail_OlderThanADay)
|
|||
dayOld.UniversalTime = now.UniversalTime - CurrencyDataLoaderConstants::DayDuration - 1;
|
||||
InsertToLocalSettings(CurrencyDataLoaderConstants::CacheTimestampKey, dayOld);
|
||||
|
||||
auto guard = ScopeGuard([] { CurrencyHttpClient::ForceWebFailure = false; });
|
||||
CurrencyHttpClient::ForceWebFailure = true;
|
||||
CurrencyDataLoader loader{ L"en-US" };
|
||||
|
||||
bool didLoad = loader.TryLoadDataFromCacheAsync().get();
|
||||
|
@ -245,19 +268,10 @@ TEST_METHOD(LoadFromCache_Success)
|
|||
VERIFY_IS_TRUE(loader.LoadedFromCache());
|
||||
}
|
||||
|
||||
TEST_METHOD(LoadFromWeb_Fail_ClientIsNullptr)
|
||||
{
|
||||
CurrencyDataLoader loader{ L"en-US" };
|
||||
|
||||
bool didLoad = loader.TryLoadDataFromWebAsync().get();
|
||||
|
||||
VERIFY_IS_FALSE(didLoad);
|
||||
VERIFY_IS_FALSE(loader.LoadFinished());
|
||||
VERIFY_IS_FALSE(loader.LoadedFromWeb());
|
||||
}
|
||||
|
||||
TEST_METHOD(LoadFromWeb_Fail_WebException)
|
||||
{
|
||||
auto guard = ScopeGuard([] { CurrencyHttpClient::ForceWebFailure = false; });
|
||||
CurrencyHttpClient::ForceWebFailure = true;
|
||||
CurrencyDataLoader loader{ L"en-US" };
|
||||
|
||||
bool didLoad = loader.TryLoadDataFromWebAsync().get();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue