public async Task RecipeLookup_WithNegativeFromParameter_ReturnsNoRowsAndWarningAsync() { RecipePayload expected = new RecipePayload(); expected.Q = "chicken"; expected.From = 0; expected.To = 10; expected.More = false; expected.Count = 0; expected.Warning = "Parameter From is less than zero. Please provide a value greater than or equal to zero and less than the To parameter."; expected.Hits = new List <Hit> (); SearchParams searchParams = new SearchParams("chicken", -1, 10); using (AutoMock mock = AutoMock.GetLoose()) { mock.Mock <IApiConfigProvider> () .Setup(x => x.GetApiConfigSettings()) .Returns(new ApiConfigSettings("123", "abc", "hello")); mock.Mock <IRecipeSearchProvider> () .Setup(x => x.RunSearch(searchParams, "123", "abc")) .Returns(Task.FromResult(expected)); RecipeProviderImpl sut = mock.Create <RecipeProviderImpl> (); RecipePayload actual = await sut.GetRecipientsFromSearch(searchParams); Assert.True(JsonCompare.Compare(expected, actual)); } }
public async Task RecipeLookup_MissingSlackSecret_ReturnsNoRowsAndWarningAsync(string slackSecret) { RecipePayload expected = new RecipePayload(); expected.Q = "chicken"; expected.From = 0; expected.To = 10; expected.More = false; expected.Count = 0; expected.Warning = "Configuration Error: Missing SlackSecret."; expected.Hits = new List <Hit> (); SearchParams searchParams = new SearchParams("chicken", 0, 10); using (AutoMock mock = AutoMock.GetLoose()) { mock.Mock <IApiConfigProvider> () .Setup(x => x.GetApiConfigSettings()) .Returns(new ApiConfigSettings("123", "abc", slackSecret)); mock.Mock <IRecipeSearchProvider> () .Setup(x => x.RunSearch(searchParams, "123", "abc")) .Returns(Task.FromResult(expected)); RecipeProviderImpl sut = mock.Create <RecipeProviderImpl> (); RecipePayload actual = await sut.GetRecipientsFromSearch(searchParams); Assert.True(JsonCompare.Compare(expected, actual)); } }
public async Task RecipeLookup_WithEmptyStringSearchQuery_ReturnsNoRowsAndWarningAsync( string searchTerm ) { RecipePayload expected = new RecipePayload(); expected.Q = searchTerm; expected.From = 0; expected.To = 10; expected.More = false; expected.Count = 0; expected.Warning = "Search term cannot be empty or null."; expected.Hits = new List <Hit> (); SearchParams searchParams = new SearchParams(searchTerm, 0, 10); using (AutoMock mock = AutoMock.GetLoose()) { mock.Mock <IApiConfigProvider> () .Setup(x => x.GetApiConfigSettings()) .Returns(new ApiConfigSettings("123", "abc", "hello")); mock.Mock <IRecipeSearchProvider> () .Setup(x => x.RunSearch(searchParams, "123", "abc")) .Returns(Task.FromResult(expected)); RecipeProviderImpl sut = mock.Create <RecipeProviderImpl> (); RecipePayload actual = await sut.GetRecipientsFromSearch(searchParams); Assert.True(JsonCompare.Compare(expected, actual)); } }
private RecipePayload RuntimeMisconfiguration(RuntimeSetting runtimeSetting, string searchTerm, int from, int to) { RecipePayload payload = new RecipePayload(); payload.Q = searchTerm; payload.From = from; payload.To = to; payload.More = false; payload.Hits = new List <Hit> (); payload.Count = 0; switch (runtimeSetting) { case RuntimeSetting.Both: payload.Warning = "Configuration Error: Both Dev and Prod config are set."; break; case RuntimeSetting.Neither: payload.Warning = "Configuration Error: Neither Dev and Prod config are set."; break; case RuntimeSetting.Unknown: payload.Warning = "Configuration Error: Unknown Config setting."; break; default: payload.Warning = "Configuration Error: Unknown Config setting."; break; } return(payload); }
public async Task RecipeLookup_WithSearchQuery_ReturnsCorrectListAsync() { List <Hit> hits = SampleData.SampleHits(); const string searchTerm = "Chicken"; RecipePayload expected = new RecipePayload(); expected.Q = searchTerm; expected.From = 0; expected.To = 10; expected.More = true; expected.Count = 100000; expected.Warning = ""; expected.Hits = hits; SearchParams searchParams = new SearchParams(searchTerm, 0, 10); using (AutoMock mock = AutoMock.GetLoose()) { mock.Mock <IApiConfigProvider> () .Setup(x => x.GetApiConfigSettings()) .Returns(new ApiConfigSettings("123", "abc", "hello")); mock.Mock <IRecipeSearchProvider> () .Setup(x => x.RunSearch(searchParams, "123", "abc")) .Returns(Task.FromResult(expected)); RecipeProviderImpl sut = mock.Create <RecipeProviderImpl> (); RecipePayload actual = await sut.GetRecipientsFromSearch(searchParams); Assert.True(JsonCompare.Compare(expected, actual)); } }
public async Task <RecipePayload> Search(SearchParams searchParams) { RecipeProviderImpl recipieProvider = new RecipeProviderImpl(_errorWriter, _apiConfigProvider, _searchProvider); RecipeLookup recipeLookup = new RecipeLookup(recipieProvider, _configuration); RecipePayload recipePayload = await recipeLookup.SearchRecipes(searchParams); return(recipePayload); }
public static RecipePayload ExceptionResponse(Exception ex, string searchTerm) { RecipePayload errorPayload = new RecipePayload(); errorPayload.Count = 0; errorPayload.Q = searchTerm; errorPayload.From = 0; errorPayload.To = 10; errorPayload.Warning = ex.Message; errorPayload.Hits = new List <Hit> (); return(errorPayload); }
private RecipePayload BadSearchParameterResult(string searchTerm, string warningMsg) { RecipePayload errorPayload = new RecipePayload(); errorPayload.Count = 0; errorPayload.Q = searchTerm; errorPayload.From = 0; errorPayload.To = 10; errorPayload.Warning = warningMsg; errorPayload.Hits = new List <Hit> (); return(errorPayload); }
private RecipePayload MissingConfigurationResult(string searchTerm, string warningMsg) { RecipePayload errorPayload = new RecipePayload(); errorPayload.Count = 0; errorPayload.Q = searchTerm; errorPayload.From = 0; errorPayload.To = 10; errorPayload.Warning = warningMsg; errorPayload.Hits = new List <Hit> (); return(errorPayload); }
private RecipePayload FailureRequest(string errorMessage, SearchParams searchParams) { RecipePayload payload = new RecipePayload(); payload.Q = searchParams.SearchTerm; payload.Count = 0; payload.More = false; payload.Warning = errorMessage; payload.Hits = new List <Hit> (); payload.From = searchParams.From; payload.To = searchParams.To; return(payload); }
GetRecipientsFromSearch(SearchParams searchParams) { // error handling if (string.IsNullOrEmpty(searchParams.SearchTerm)) { return(BadSearchParameterResult(searchParams.SearchTerm, "Search term cannot be empty or null.")); } if (searchParams.From < 0) { return(BadSearchParameterResult(searchParams.SearchTerm, "Parameter From is less than zero. Please provide a value greater than or equal to zero and less than the To parameter.")); } else if (searchParams.To < 0) { return(BadSearchParameterResult(searchParams.SearchTerm, "Parameter To is less than zero. Please provide a value greater than the To parameter.")); } else if (searchParams.From >= searchParams.To) { return(BadSearchParameterResult(searchParams.SearchTerm, "Parameter From is greater than or equal to parameter To. Please provide a From parameter that is less that the To parameter.")); } string appId = _apiConfigProvider.GetApiConfigSettings().AppId; string appKey = _apiConfigProvider.GetApiConfigSettings().AppKey; string slackSecret = _apiConfigProvider.GetApiConfigSettings().SlackSecret; if (string.IsNullOrEmpty(appId)) { return(MissingConfigurationResult(searchParams.SearchTerm, "Configuration Error: Missing AppId.")); } if (string.IsNullOrEmpty(appKey)) { return(MissingConfigurationResult(searchParams.SearchTerm, "Configuration Error: Missing AppKey.")); } if (string.IsNullOrEmpty(slackSecret)) { return(MissingConfigurationResult(searchParams.SearchTerm, "Configuration Error: Missing SlackSecret.")); } RecipePayload data = await _recipeSearchProvider.RunSearch(searchParams, appId, appKey); return(data); }
public async Task <RecipePayload> SearchRecipes(string searchTerm, int from = 0, int to = 10) { try { RuntimeSetting setting = GetRuntimeSetting(); IRecipeSearchHandler recipeSearchHandler; switch (setting) { case RuntimeSetting.Production: // setup for prod recipeSearchHandler = new ProdRecipeSearchHandlerImpl(_configuration); break; case RuntimeSetting.Development: // setup for dev recipeSearchHandler = new DevRecipeSearchHandlerImpl(_configuration); break; case RuntimeSetting.Both: return(RuntimeMisconfiguration(RuntimeSetting.Both, searchTerm, from, to)); case RuntimeSetting.Neither: return(RuntimeMisconfiguration(RuntimeSetting.Neither, searchTerm, from, to)); default: return(RuntimeMisconfiguration(RuntimeSetting.Unknown, searchTerm, from, to)); } SearchParams searchParams = new SearchParams(searchTerm, from, to); RecipePayload payload = await recipeSearchHandler.Search(searchParams); return(payload); } catch (System.Exception ex) { HandleEx(ex); return(RecipeErrorResponses.ExceptionResponse(ex, searchTerm)); } }