public PersonagemController(PersonagemService service) => this.service = service;
public void Setup() { AutoFake = new AutoFake(); var configurationParams = new Dictionary <string, string> { { "MarvelComicsAPI:BaseURL", "http://gateway.marvel.com/v1/public/" }, { "MarvelComicsAPI:PublicKey", "f72ecc981b3848b2d7ae9973d0454131" }, { "MarvelComicsAPI:PrivateKey", "8614298176bdfa2ecff7a712cfdcb6e73bf1d4f9" }, }; config = new ConfigurationBuilder() .AddInMemoryCollection(configurationParams) .Build(); AutoFake.Provide(config); AutoFake.Provide(new Configuracao(new Uri(config.GetSection("MarvelComicsAPI:BaseURL").Value), config.GetSection("MarvelComicsAPI:PublicKey").Value, config.GetSection("MarvelComicsAPI:PrivateKey").Value)); relogio = A.Fake <Relogio>(); A.CallTo(() => relogio.DataAtual).Returns(DateTime.Now); A.CallTo(() => relogio.ObterStringTicks()).Returns(DateTime.Now.Ticks.ToString()); AutoFake.Provide(relogio); // o GetAsync precisa de uma resposta mockada do persogame // pra isso preciso cirar uma url no teste e mandar ela pro controller string ts = relogio.ObterStringTicks(); string publicKey = config.GetSection("MarvelComicsAPI:PublicKey").Value; string hash = GerarHash(ts, publicKey, config.GetSection("MarvelComicsAPI:PrivateKey").Value); nome = "Captain America"; url = config.GetSection("MarvelComicsAPI:BaseURL").Value + $"characters?ts={ts}&apikey={publicKey}&hash={hash}&" + $"name={Uri.EscapeUriString(nome)}"; // temos que saber o objeto de retorno da api pra poder mockar o retorno do objeto fake na implementacao concreta var conteudo = new StringContent(JsonSerializer.Serialize( new { data = new { results = new List <dynamic> { new { name = nome, description = Faker.Random.Words(20), thumbnail = new { path = Faker.Internet.Url(), extension = Faker.Random.String(3) }, urls = new List <dynamic> { new { url = Faker.Internet.Url() }, new { url = Faker.Internet.Url() } } } } } } )); // a resposta vem como um objeto serializado HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK) { Content = conteudo }; A.CallTo(() => AutoFake.Resolve <IHttpClient>().GetAsync(new Uri(url))).Returns(response); service = AutoFake.Resolve <PersonagemService>(); }
public PersonagemController(PersonagemService personagemService) { _personagemService = personagemService; }