diff options
Diffstat (limited to 'src/services/github/fetch-github-repo-meta.test.ts')
| -rw-r--r-- | src/services/github/fetch-github-repo-meta.test.ts | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/services/github/fetch-github-repo-meta.test.ts b/src/services/github/fetch-github-repo-meta.test.ts new file mode 100644 index 0000000..324db9a --- /dev/null +++ b/src/services/github/fetch-github-repo-meta.test.ts @@ -0,0 +1,47 @@ +import { afterEach, describe, expect, it } from '@jest/globals'; +import { githubRepos } from '../../../tests/fixtures'; +import { fetchGithubRepoMeta } from './fetch-github-repo-meta'; + +describe('fetch-github-repo-meta', () => { + afterEach(() => { + window.history.replaceState({}, '', '/'); + }); + + it('returns the Github repository meta using GraphQL', async () => { + const result = await fetchGithubRepoMeta({ + name: githubRepos[0].name, + owner: githubRepos[0].owner, + }); + + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + expect.assertions(3); + + expect(result.createdAt).toBe(githubRepos[0].createdAt); + expect(result.stargazerCount).toBe(githubRepos[0].stargazerCount); + expect(result.updatedAt).toBe(githubRepos[0].updatedAt); + }); + + it('rejects with an error when repository is not found', async () => { + const name = 'inexistent-repo'; + const owner = 'inexistent-owner'; + + window.history.replaceState({}, '', '/?error=true'); + expect.assertions(1); + + await expect(async () => + fetchGithubRepoMeta({ name, owner }) + ).rejects.toEqual( + new Error(`No data found for the following repository ${owner}/${name}.`) + ); + }); + + it('throws an error if the Github token is not defined', async () => { + process.env.NEXT_PUBLIC_GITHUB_TOKEN = ''; + + expect.assertions(1); + + await expect(async () => + fetchGithubRepoMeta({ name: 'any-name', owner: 'any-owner' }) + ).rejects.toThrowError(new Error('Github token is not defined.')); + }); +}); |
