public PersonagemController(PersonagemService service) => this.service = service;
Example #2
0
        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;
 }