text: require("@testing-library/jest-dom");
  const axios = require("axios");
  const MockAdapter = require("axios-mock-adapter");
  const pin = require("../api/pin");
  const renderRepoCard = require("../src/cards/repo-card");
  const { renderError } = require("../src/common/utils");
  
  const data_repo = {
    repository: {
      username: "yuripalacio",
      name: "convoychat",
      stargazers: { totalCount: 38000 },
      description: "Help us take over the world! React + TS + GraphQL Chat App",
      primaryLanguage: {
        color: "#2b7489",
        id: "MDg6TGFuZ3VhZ2UyODc=",
        name: "TypeScript",
      },
      forkCount: 100,
      isTemplate: false,
    },
  };
  
  const data_user = {
    data: {
      user: { repository: data_repo.repository },
      organization: null,
    },
  };
  
  const mock = new MockAdapter(axios);
  
  afterEach(() => {
    mock.reset();
  });
  
  describe("Test /api/pin", () => {
    it("should test the request", async () => {
      const req = {
        query: {
          username: "yuripalacio",
          repo: "convoychat",
        },
      };
      const res = {
        setHeader: jest.fn(),
        send: jest.fn(),
      };
      mock.onPost("https://api.github.com/graphql").reply(200, data_user);
  
      await pin(req, res);
  
      expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
      expect(res.send).toBeCalledWith(renderRepoCard(data_repo.repository));
    });
  
    it("should get the query options", async () => {
      const req = {
        query: {
          username: "yuripalacio",
          repo: "convoychat",
          title_color: "fff",
          icon_color: "fff",
          text_color: "fff",
          bg_color: "fff",
          full_name: "1",
        },
      };
      const res = {
        setHeader: jest.fn(),
        send: jest.fn(),
      };
      mock.onPost("https://api.github.com/graphql").reply(200, data_user);
  
      await pin(req, res);
  
      expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
      expect(res.send).toBeCalledWith(
        renderRepoCard(data_repo.repository, { ...req.query })
      );
    });
  
    it("should render error card if user repo not found", async () => {
      const req = {
        query: {
          username: "yuripalacio",
          repo: "convoychat",
        },
      };
      const res = {
        setHeader: jest.fn(),
        send: jest.fn(),
      };
      mock
        .onPost("https://api.github.com/graphql")
        .reply(200, { data: { user: { repository: null }, organization: null } });
  
      await pin(req, res);
  
      expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
      expect(res.send).toBeCalledWith(renderError("User Repository Not found"));
    });
  
    it("should render error card if org repo not found", async () => {
      const req = {
        query: {
          username: "yuripalacio",
          repo: "convoychat",
        },
      };
      const res = {
        setHeader: jest.fn(),
        send: jest.fn(),
      };
      mock
        .onPost("https://api.github.com/graphql")
        .reply(200, { data: { user: null, organization: { repository: null } } });
  
      await pin(req, res);
  
      expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
      expect(res.send).toBeCalledWith(
        renderError("Organization Repository Not found")
      );
    });
  });
  