public async Task GivenOKResult_WhenResourceRequested_ThenProviderShouldReturnOKResultWithPokemonContent() { //Arrange string pokemonName = "testemon"; PokeApiNet.Pokemon testPokemon = new PokeApiNet.Pokemon() { Id = 1, Name = pokemonName, Height = 123, IsDefault = true }; _mockPokeApiClient.Setup(p => p.GetResourceAsync <PokeApiNet.Pokemon>(It.IsAny <string>())).ReturnsAsync(testPokemon); var pokemonProvider = new PokemonProvider(_mockLoggerFactory, _mockPokeApiClient.Object); // Act var pokemonResult = await pokemonProvider.GetPokemon(pokemonName); // Assert pokemonResult.Should().BeOfType(typeof(ServiceResult <PokeApiNet.Pokemon>)); pokemonResult.Content.Should().NotBeNull(); pokemonResult.Content.Name.Should().Be(pokemonName); pokemonResult.Result.Should().Be(Result.OK); }
public void GenerateRandomPokemonMultipleAllowDuplicatesTest() { // SetUP var level = 100; var low = 1; var high = 10; _config.Value.Configuration.RandomBagMinCount = 0; // Mock _mockPokemonRepository.Setup(m => m.GetRandomBagPokemon(level)).Returns(Enumerable.Range(low, high)); _mockProbabilityUtility.Setup(m => m.ChooseWithProbability(It.IsNotNull <IList <IChoice> >())) .Returns <IList <IChoice> >(l => l .Select((choice, index) => new { choice, index }) .OrderByDescending(item => item.choice.Probability) .First().index); // Generate var provider = new PokemonProvider(_mockProbabilityUtility.Object, _mockPokemonRepository.Object, _config); for (var i = low; i < high * 2; i++) { provider.ReloadRandomBag(level); var poke = provider.GenerateRandomPokemon(level); Assert.NotNull(poke); Assert.InRange(poke.SpeciesId, low, high); } // Verify _mockPokemonRepository.VerifyAll(); _mockProbabilityUtility.VerifyAll(); }
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddOptions(); var appConfiguration = new ConfigurationBuilder() .AddEnvironmentVariables() .Build(); var pokemonConfig = new BaseConfiguration(); var shakespeareTransformProvider = new ShakespeareTextTransformProvider(); var pokemonProvider = new PokemonProvider(); pokemonConfig.SetEnvironmentConfiguration(appConfiguration); services.AddSingleton(pokemonConfig); services.AddSingleton <IPokemonProvider>(pokemonProvider); services.AddSingleton <ITextTransformProvider>(shakespeareTransformProvider); services.AddLogging( builder => { builder .AddFilter("Microsoft", LogLevel.Information) .AddFilter("System", LogLevel.Information) .AddConsole(); }); }
public async Task GivenOKResult_WhenResourceRequested_ThenProviderShouldReturnOKResultWithSpeciesContent() { // Arrange var speciesName = "Species 2"; PokeApiNet.PokemonSpecies testPokemonSpecies = new PokeApiNet.PokemonSpecies() { Id = 2, Name = speciesName, Order = 1, FlavorTextEntries = new List <PokeApiNet.PokemonSpeciesFlavorTexts>() { new PokeApiNet.PokemonSpeciesFlavorTexts() { FlavorText = "Flavor text 1", Language = new PokeApiNet.NamedApiResource <PokeApiNet.Language>() { Name = "en", Url = "url" } }, new PokeApiNet.PokemonSpeciesFlavorTexts() { FlavorText = "Flavor text 2", Language = new PokeApiNet.NamedApiResource <PokeApiNet.Language>() { Name = "en", Url = "url" } }, new PokeApiNet.PokemonSpeciesFlavorTexts() { FlavorText = "Flavor text 3", Language = new PokeApiNet.NamedApiResource <PokeApiNet.Language>() { Name = "fr", Url = "url" } } } }; var speciesRequest = new PokeApiNet.NamedApiResource <PokeApiNet.PokemonSpecies>() { Name = "test species", Url = "test url" }; _mockPokeApiClient.Setup(p => p.GetResourceAsync(It.IsAny <PokeApiNet.UrlNavigation <PokeApiNet.PokemonSpecies> >())).ReturnsAsync(testPokemonSpecies); var pokemonProvider = new PokemonProvider(_mockLoggerFactory, _mockPokeApiClient.Object); // Act var speciesResult = await pokemonProvider.GetPokemonSpecies(speciesRequest); // Assert speciesResult.Should().BeOfType(typeof(ServiceResult <PokeApiNet.PokemonSpecies>)); speciesResult.Content.Should().NotBeNull(); speciesResult.Content.Name.Should().Be(speciesName); speciesResult.Content.FlavorTextEntries.Count.Should().Be(3); }
public void GenerateRandomPokemonBadLevelTest(int level) { // Assert var provider = new PokemonProvider(_mockProbabilityUtility.Object, _mockPokemonRepository.Object, _config); Assert.Throws <ArgumentOutOfRangeException>(() => provider.GenerateRandomPokemon(level)); // Verify _mockPokemonRepository.VerifyAll(); _mockProbabilityUtility.VerifyAll(); }
public void GeneratePokemonBadSpeciesTest(int speciesId) { // Assert var provider = new PokemonProvider(_mockProbabilityUtility.Object, _mockPokemonRepository.Object, _config); Assert.Throws <ArgumentOutOfRangeException>(() => provider.GeneratePokemon(speciesId, 50)); // Verify _mockPokemonRepository.VerifyAll(); _mockProbabilityUtility.VerifyAll(); }
public async void Should_return_NOT_FOUND_for_non_ASCII_invalid_name(string name) { var logger = PokemonControllerTests.GetMockLogger(); var config = Options.Create(new BaseConfiguration()); var transformProvider = new ShakespeareTextTransformProvider(); var pokemonProvider = new PokemonProvider(); var pokemonController = new PokemonController(logger, config, pokemonProvider, transformProvider); ContentResult response = (await pokemonController.Get(name)) as ContentResult; Assert.NotNull(response); Assert.Equal(response.StatusCode, (int)HttpStatusCode.NotFound); }
public async void Should_handle_Shakespeare_endpoint_not_available(string name, string shakespeareEndpoint) { var logger = PokemonControllerTests.GetMockLogger(); var config = Options.Create(new BaseConfiguration()); config.Value.TextTransformConfiguration.EndpointBaseUrl = shakespeareEndpoint; var transformProvider = new ShakespeareTextTransformProvider(); var pokemonProvider = new PokemonProvider(); var pokemonController = new PokemonController(logger, config, pokemonProvider, transformProvider); ContentResult response = (await pokemonController.Get(name)) as ContentResult; Assert.NotNull(response); Assert.Equal(response.StatusCode, (int)HttpStatusCode.RequestTimeout); }
public async void Should_return_a_description_and_the_correct_name(string name) { var logger = PokemonControllerTests.GetMockLogger(); var config = Options.Create(new BaseConfiguration()); var transformProvider = new ShakespeareTextTransformProvider(); var pokemonProvider = new PokemonProvider(); var pokemonController = new PokemonController(logger, config, pokemonProvider, transformProvider); var response = (await pokemonController.Get(name)) as OkObjectResult; Assert.NotNull(response); Assert.Equal(response.StatusCode, (int)HttpStatusCode.OK); PokemonResponseDTO content = response.Value as PokemonResponseDTO; Assert.Equal(name, content.Name); }
public void GeneratePokemonReducesRandomBagTest() { // SetUP var level = 100; var low = 1; var high = 10; _config.Value.Configuration.RandomBagMinCount = 0; // Mock _mockPokemonRepository.Setup(m => m.GetPossiblePokemon(It.IsAny <int>())).Returns(Enumerable.Range(low, high)); _mockPokemonRepository.Setup(m => m.GetRandomBagPokemon(It.IsAny <int>())).Returns(Enumerable.Range(low, high)); _mockProbabilityUtility.Setup(m => m.ChooseWithProbability(It.IsNotNull <IList <IChoice> >())) .Returns <IList <IChoice> >(l => l .Select((choice, index) => new { choice, index }) .OrderByDescending(item => item.choice.Probability) .First().index); // Generate var provider = new PokemonProvider(_mockProbabilityUtility.Object, _mockPokemonRepository.Object, _config); var chosen = new List <int>(); for (var i = low; i < high / 2; i++) { var poke = provider.GeneratePokemon(i, level); Assert.NotNull(poke); Assert.InRange(poke.SpeciesId, low, high); chosen.Add(poke.SpeciesId); } // Generate Random for (var i = high / 2; i < high; i++) { var poke = provider.GenerateRandomPokemon(level); Assert.NotNull(poke); Assert.InRange(poke.SpeciesId, low, high); Assert.DoesNotContain(poke.SpeciesId, chosen); } // Verify _mockPokemonRepository.VerifyAll(); _mockProbabilityUtility.VerifyAll(); _mockPokemonRepository.Verify(m => m.GetRandomBagPokemon(It.IsAny <int>()), Times.Once); }
public void GenerateRandomPokemonProbabilitiesTest() { // SetUP var level = 100; var low = 1; var high = 10; _config.Value.Configuration.LegendaryPokemon.Add(low); _config.Value.Configuration.SpecialPokemon.Add(low + 1); _config.Value.Configuration.DisabledPokemon.Add(low + 2); _config.Value.Configuration.ForbiddenPokemon.Add(low + 3); // Mock _mockPokemonRepository.Setup(m => m.GetRandomBagPokemon(level)).Returns(Enumerable.Range(low, high)); _mockProbabilityUtility.Setup(m => m.ChooseWithProbability(It.IsNotNull <IList <IChoice> >())) .Returns <IList <IChoice> >(l => { Assert.Equal(_config.Value.Configuration.PokemonLiklihood.Legendary, l.Cast <PokemonChoice>().Single(choice => choice.PokemonId == low + 0).Probability); Assert.Equal(_config.Value.Configuration.PokemonLiklihood.Special, l.Cast <PokemonChoice>().Single(choice => choice.PokemonId == low + 1).Probability); Assert.Equal(_config.Value.Configuration.PokemonLiklihood.Ignored, l.Cast <PokemonChoice>().Single(choice => choice.PokemonId == low + 2).Probability); Assert.Equal(_config.Value.Configuration.PokemonLiklihood.Ignored, l.Cast <PokemonChoice>().Single(choice => choice.PokemonId == low + 3).Probability); Assert.Equal(_config.Value.Configuration.PokemonLiklihood.Standard, l.Cast <PokemonChoice>().Single(choice => choice.PokemonId == low + 4).Probability); return(l .Select((choice, index) => new { choice, index }) .OrderByDescending(item => item.choice.Probability) .First().index); }); // Generate var provider = new PokemonProvider(_mockProbabilityUtility.Object, _mockPokemonRepository.Object, _config); var poke = provider.GenerateRandomPokemon(level); // Assert Assert.NotNull(poke); Assert.InRange(poke.SpeciesId, low, high); // Verify _mockPokemonRepository.VerifyAll(); _mockProbabilityUtility.VerifyAll(); }
public void GeneratePokemonNotPossibleTest() { // SetUP var level = 100; var low = 1; var high = 10; // Mock _mockPokemonRepository.Setup(m => m.GetPossiblePokemon(It.IsAny <int>())).Returns(Enumerable.Range(low, high)); _mockPokemonRepository.Setup(m => m.GetRandomBagPokemon(It.IsAny <int>())).Returns(Enumerable.Range(low, high)); // Generate var provider = new PokemonProvider(_mockProbabilityUtility.Object, _mockPokemonRepository.Object, _config); // Assert Assert.Throws <ArgumentOutOfRangeException>(() => provider.GeneratePokemon(high + 1, level)); // Verify _mockPokemonRepository.VerifyAll(); _mockProbabilityUtility.VerifyAll(); }
public async Task GivenApiThrowsHTTPException_WhenResourceRequested_ThenProviderShouldReturnNotFoundResult() { // Arrange string pokemonName = "NonExistant"; var thrownException = new Exception("404 Not Found") { Source = "System.Net.HTTP" }; _mockPokeApiClient.Setup(p => p.GetResourceAsync <PokeApiNet.Pokemon>(It.IsAny <string>())).ThrowsAsync(thrownException); var pokemonProvider = new PokemonProvider(_mockLoggerFactory, _mockPokeApiClient.Object); // Act var pokemonResult = await pokemonProvider.GetPokemon(pokemonName); // Assert pokemonResult.Should().BeOfType(typeof(ServiceResult <PokeApiNet.Pokemon>)); pokemonResult.Content.Should().BeNull(); pokemonResult.Message.Should().NotBeNull(); pokemonResult.Result.Should().Be(Result.NotFound); }
public void GeneratePokemonTest() { // SetUP var level = 100; var low = 1; var high = 10; // Mock _mockPokemonRepository.Setup(m => m.GetPossiblePokemon(It.IsAny <int>())).Returns(Enumerable.Range(low, high)); _mockPokemonRepository.Setup(m => m.GetRandomBagPokemon(It.IsAny <int>())).Returns(Enumerable.Range(low, high)); // Generate var provider = new PokemonProvider(_mockProbabilityUtility.Object, _mockPokemonRepository.Object, _config); var poke = provider.GeneratePokemon(1, level); // Assert Assert.NotNull(poke); Assert.InRange(poke.SpeciesId, low, high); // Verify _mockPokemonRepository.VerifyAll(); _mockProbabilityUtility.VerifyAll(); }