test: add github check integration

codex/fix-fetch-implementation-issue-in-tests
Frostebite 2025-08-03 20:03:16 +01:00
parent d6dc078d5a
commit 53e2b89833
3 changed files with 64 additions and 11 deletions

View File

@ -0,0 +1,24 @@
name: GitHub Checks Integration
on:
workflow_dispatch:
permissions:
contents: read
checks: write
jobs:
integration:
runs-on: ubuntu-latest
env:
RUN_GITHUB_INTEGRATION_TESTS: true
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'yarn'
- run: yarn install --frozen-lockfile
- run: yarn test cloud-runner-github-checks.integration --detectOpenHandles --forceExit --runInBand
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -0,0 +1,38 @@
import { BuildParameters } from '../model';
import CloudRunner from '../model/cloud-runner/cloud-runner';
import UnityVersioning from '../model/unity-versioning';
import { Cli } from '../model/cli/cli';
import GitHub from '../model/github';
import { OptionValues } from 'commander';
export const TIMEOUT_INFINITE = 1e9;
async function createParameters(overrides?: OptionValues) {
if (overrides) Cli.options = overrides;
return BuildParameters.create();
}
const runIntegration = process.env.RUN_GITHUB_INTEGRATION_TESTS === 'true';
const describeOrSkip = runIntegration ? describe : describe.skip;
describeOrSkip('Cloud Runner Github Checks Integration', () => {
it(
'creates and updates a real GitHub check',
async () => {
const buildParameter = await createParameters({
versioning: 'None',
projectPath: 'test-project',
unityVersion: UnityVersioning.read('test-project'),
asyncCloudRunner: `true`,
githubChecks: `true`,
});
await CloudRunner.setup(buildParameter);
const checkId = await GitHub.createGitHubCheck(`integration create`);
expect(checkId).not.toEqual('');
await GitHub.updateGitHubCheck(`1 ${new Date().toISOString()}`, `integration`);
await GitHub.updateGitHubCheck(`2 ${new Date().toISOString()}`, `integration`, `success`, `completed`);
},
TIMEOUT_INFINITE,
);
});

View File

@ -6,18 +6,9 @@ import failOnConsole from 'jest-fail-on-console';
// implementation, so we provide one using undici's implementation. // implementation, so we provide one using undici's implementation.
// This ensures tests that interact with Octokit do not throw when // This ensures tests that interact with Octokit do not throw when
// constructing the client. // constructing the client.
import { fetch, Headers, Request, Response } from 'undici'; import { fetch as undiciFetch, Headers, Request, Response } from 'undici';
if (!global.fetch) { Object.assign(globalThis, { fetch: undiciFetch, Headers, Request, Response });
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(global as any).fetch = fetch;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(global as any).Headers = Headers;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(global as any).Request = Request;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(global as any).Response = Response;
}
// Fail when console logs something inside a test - use spyOn instead // Fail when console logs something inside a test - use spyOn instead
failOnConsole({ failOnConsole({