api-request.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // @ts-check
  2. import http from 'k6/http';
  3. import { check, fail } from 'k6';
  4. const AUTH_TOKEN_HEADER = 'Vendure-Auth-Token';
  5. export class ApiRequest {
  6. constructor(apiUrl, fileName) {
  7. this.document = open('../graphql/' + fileName);
  8. this.apiUrl = apiUrl;
  9. this.authToken = undefined;
  10. }
  11. /**
  12. * Post the GraphQL request
  13. */
  14. post(variables = {}, authToken) {
  15. const res = http.post(
  16. this.apiUrl,
  17. {
  18. query: this.document,
  19. variables: JSON.stringify(variables),
  20. },
  21. {
  22. timeout: 120 * 1000,
  23. headers: { Authorization: authToken ? `Bearer ${authToken}` : undefined },
  24. },
  25. );
  26. check(res, {
  27. 'Did not error': r => r.json().errors == null && r.status === 200,
  28. });
  29. const result = res.json();
  30. if (result.errors) {
  31. fail('Errored: ' + result.errors[0].message);
  32. }
  33. if (res.headers[AUTH_TOKEN_HEADER]) {
  34. authToken = res.headers[AUTH_TOKEN_HEADER];
  35. console.log(`Setting auth token: ${authToken}`);
  36. this.authToken = authToken;
  37. }
  38. return res.json();
  39. }
  40. }
  41. export class ShopApiRequest extends ApiRequest {
  42. constructor(fileName) {
  43. super('http://localhost:3000/shop-api/', fileName);
  44. }
  45. }
  46. export class AdminApiRequest extends ApiRequest {
  47. constructor(fileName) {
  48. super('http://localhost:3000/admin-api/', fileName);
  49. }
  50. }