AgileTesters / forum

Fórum de Discussão do Agile Testers
https://agiletesters.com.br
MIT License
80 stars 2 forks source link

Autenticação client apollo #142

Open ghost opened 3 years ago

ghost commented 3 years ago

Boa tarde pessoal,

gostaria muito de ajuda de vocês, iniciando com automação Jest + Apollo Client para automatizar alguns microsserviços, porém estou com um problema que não estou conseguindo resolver!

Para as chamadas preciso passar um token de acesso, e esse token é só consigo quando executo a mutation de login, dessa forma é retornado.

O problema é que o servidor client do apollo foi iniciado sem o headers > Authorization justamente para executar a mutation do login e retornar o token, e ai preciso do token para passar no Authorization para os demais testes, ai a questão é que não estou conseguindo uma forma de passar o headers > Authorization nas demais testes devido o servidor já ter cido inicializado.

Esse é servidor Apollo Client image

Aqui é como estou pegando o token de acesso image

Agora como eu passo esse token em outra mutation ou query sendo que o servidor apollo já está inicializado ?

Obrigado Abs

leoGalani commented 3 years ago

Opa Thiago,

Quando eu fiz aquele post com apollo client, teve um pessoal que me recomendou a seguinte lib que deixa as coisas um pouco mais simples --> https://github.com/prisma-labs/graphql-request#authentication-via-http-header

Voltando ao seu problema... Não tem problema nenhum vc iniciar uma nova instancia do apollo client com o header certo. você pode colocar um valor em branco como padrão para seu 'Authorization' que pode ficar +- assim:

const apolloGraphQLClient = (acesso, authorization="") => {
   (....)
   header = {
      Authorization = authorization
   }
}

Dai no seu teste vc pode ter algo tipo

describe(....) => {
  var _client

  before(...) => {
      tmp_client = apolloGraphQLClient(acesso)
      (....)
      _client = apolloGraphQLClient(acesso, __loginToken)
  }

  it(..) =>{
     (...seu teste...)
  }

Meu js ta meio enferrujado, mas vc pode pedir um code review e até dicas para os devs JS do seu time

ghost commented 3 years ago

@leoGalani obrigado pelo retorno,

tentei fazer isso mais não está rolando, ele da erro: ApolloError: GraphQL error: Error processing request, please see extensions field for more details e o token que é passado fica como undefined.

Servidor apollo image

testes image

leoGalani commented 3 years ago

Seu before all é async mas ta faltando uns await (https://jestjs.io/docs/en/asynchronous) para esperar o retorno do primeiro request de token.

E tipo.. a constant apolloGraphQLClient que recebe como parametro o object authorization vc pode definir o valor dele padrão como "" (em branco, igual vc colocou no exemplo anterior, caso contrario vai dar undefined tb).

Da proxima vez cria um gist com o codigo de fato... printscreen é meio ruim pra entender o contexto e sempre fica faltando coisa :)

PauloGoncalvesBH commented 3 years ago

a sua variável __client1 não é acessível fora do beforeAll. Para resolver isso coloque um this. antes dela. Exemplo:

    (...)
    this.__client1 = apolloGraphQLClient(__loginToken)

});

// ---- O CT abaixo...
it (.......)
    const _logout = await this.__client1.mutate({
    (...)
ghost commented 3 years ago

@leoGalani obrigado consegui resolver aqui, é a questão do async/await, obrigado pela ajuda.