mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 16:02:32 +00:00
- Centralize and align auto-merge eligibility logic across web and mobile clients. - Use the `enablePullRequestAutoMerge` GraphQL mutation instead of `gh pr merge --auto` to prevent immediate merges on clean branches. - Fall back to `gh pr merge --auto` when a merge queue is required on the base branch. - Hide the auto-merge control when only optional checks are pending.
68 lines
2.4 KiB
TypeScript
68 lines
2.4 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
canEnableGitHubPRAutoMerge,
|
|
canShowGitHubPRAutoMergeControl,
|
|
type GitHubPRAutoMergeAvailabilityInput
|
|
} from './github-pr-auto-merge-availability'
|
|
|
|
function pr(
|
|
overrides: Partial<GitHubPRAutoMergeAvailabilityInput> = {}
|
|
): GitHubPRAutoMergeAvailabilityInput {
|
|
return {
|
|
state: 'open',
|
|
mergeable: 'MERGEABLE',
|
|
mergeStateStatus: 'CLEAN',
|
|
autoMergeAllowed: true,
|
|
...overrides
|
|
}
|
|
}
|
|
|
|
describe('github PR auto-merge availability', () => {
|
|
it('does not offer auto-merge for directly mergeable PRs with only optional checks pending', () => {
|
|
expect(canEnableGitHubPRAutoMerge(pr())).toBe(false)
|
|
expect(canShowGitHubPRAutoMergeControl(pr())).toBe(false)
|
|
})
|
|
|
|
it('offers auto-merge for requirement-blocked PRs', () => {
|
|
expect(
|
|
canEnableGitHubPRAutoMerge(
|
|
pr({ mergeable: 'UNKNOWN', mergeStateStatus: 'BLOCKED', reviewDecision: 'REVIEW_REQUIRED' })
|
|
)
|
|
).toBe(true)
|
|
expect(canEnableGitHubPRAutoMerge(pr({ mergeStateStatus: 'BLOCKED' }))).toBe(true)
|
|
expect(
|
|
canShowGitHubPRAutoMergeControl(pr({ mergeable: 'UNKNOWN', mergeStateStatus: 'BLOCKED' }))
|
|
).toBe(true)
|
|
})
|
|
|
|
it('keeps merge-queue branches available for merge-when-ready', () => {
|
|
expect(canEnableGitHubPRAutoMerge(pr({ mergeQueueRequired: true }))).toBe(false)
|
|
expect(canShowGitHubPRAutoMergeControl(pr({ mergeQueueRequired: true }))).toBe(true)
|
|
expect(
|
|
canShowGitHubPRAutoMergeControl(pr({ autoMergeAllowed: false, mergeQueueRequired: true }))
|
|
).toBe(true)
|
|
})
|
|
|
|
it('keeps enabled auto-merge visible so users can disable it', () => {
|
|
expect(canEnableGitHubPRAutoMerge(pr({ autoMergeEnabled: true }))).toBe(false)
|
|
expect(canShowGitHubPRAutoMergeControl(pr({ autoMergeEnabled: true }))).toBe(true)
|
|
})
|
|
|
|
it('suppresses closed, draft, disallowed, and conflicting PRs', () => {
|
|
expect(
|
|
canShowGitHubPRAutoMergeControl(pr({ state: 'draft', mergeStateStatus: 'BLOCKED' }))
|
|
).toBe(false)
|
|
expect(canShowGitHubPRAutoMergeControl(pr({ state: 'closed', autoMergeEnabled: true }))).toBe(
|
|
false
|
|
)
|
|
expect(
|
|
canShowGitHubPRAutoMergeControl(
|
|
pr({ autoMergeAllowed: false, mergeable: 'UNKNOWN', mergeStateStatus: 'BLOCKED' })
|
|
)
|
|
).toBe(false)
|
|
expect(
|
|
canShowGitHubPRAutoMergeControl(pr({ mergeable: 'CONFLICTING', mergeStateStatus: 'DIRTY' }))
|
|
).toBe(false)
|
|
})
|
|
})
|