Ниже приведена функция, её назначение заменять UncategorizedCommonClientFault на типизированые фолты, функционал нужен в силу того, что сервер писаный на java бросает Soap-фолты как попало. Писать тест на каждый код ошибки мне кажется странной идеей. Коды и прочая логика будет пополняться.
Вопрос — какие юнит-тесты нужно написать для этой функции ? Тесты для ReCreateFault, ExtractDetail, ExtractErrorCode уже написаны. Нужно ли вообще юнит-тесты для этой функции писать, м.б. хватит интеграционных ?
public static void ReThrowUncategorized(Exception ex)
{
var detail = ex.ExtractDetail<UncategorizedCommonClientFault>();
if (detail == null)
return;
var message = ex.Message + " " + detail.Message;
if (message.Contains("Error 60016") ||
message.Contains("Error 60020") ||
message.Contains("InvalidSessionFault"))
{
throw ReCreateFault<InvalidSessionFault>(detail, detail.Message);
}
if (ex.Message.ToLower().Contains("invalid username"))
{
throw ReCreateFault<InvalidUserFault>(detail, "Please enter a valid user ID.");
}
string atlasErrorCode = ExtractErrorCode(message);
switch (atlasErrorCode)
{
case "60001":
case "60004":
throw ReCreateFault<InvalidCredentialsFault>(detail, "Please enter a valid user ID and password.");
case "60002":
throw ReCreateFault<InvalidCredentialsFault>(detail, "Your user ID can no longer be used for research. Please contact Customer Service.");
case "60030":
throw ReCreateFault<SubscriptionErrorFault>(detail, "Service could not log you in at this time. Please try again later.");
case "60007":
case "60116":
throw ReCreateFault<SubscriptionErrorFault>(detail, "The subscription for this account is not currently valid. Please contact Customer Service.");
case "60003":
throw ReCreateFault<InvalidUserFault>(detail, "This User ID can no longer access service from a remote location. To renew the User ID for remote access, please log in from your primary location.");
}
}