Skip to content
Snippets Groups Projects
Select Git revision
  • ae018cdddc34b1638868edb6c05defa19844d691
  • master default protected
  • gh-pages
  • dependabot/npm_and_yarn/eslint-plugin-jsdoc-51.0.3
  • dependabot/npm_and_yarn/nock-14.0.5
  • dependabot/npm_and_yarn/react-19.1.0
  • dependabot/npm_and_yarn/react-dom-19.1.0
  • server-2025-02-01-6100669a
  • server-2024-11-01-87cba042
  • server-2024-10-01-6875b7c8
  • dependabot/npm_and_yarn/path-to-regexp-8.2.0
  • server-2024-09-01-3d52575c
  • daily-tests-gha2
  • daily-tests-gha
  • server-2023-12-01-92d8fb8e
  • server-2023-11-01-a80c93fd
  • server-2023-10-01-31096085
  • coc-v2
  • server-2023-09-01-8edc3810
  • server-2023-08-01-75858a03
  • server-2023-07-01-02183d8d
  • server-2025-07-01
  • 5.0.2
  • 5.0.1
  • 5.0.0
  • server-2025-06-01
  • server-2025-05-01
  • server-2025-04-03
  • server-2025-03-02
  • server-2025-03-01
  • server-2025-02-02
  • server-2025-01-01
  • server-2024-12-01
  • server-2024-11-02
  • 4.1.0
  • server-2024-09-25
  • server-2024-09-02
  • server-2024-08-01
  • server-2024-07-01
  • 4.0.0
  • server-2024-06-01
41 results

load-simple-icons.js

Blame
  • reuse.spec.ts 6.62 KiB
    import { getName, git, platform } from '../../../test/util';
    import { RenovateConfig } from '../../config';
    import { Pr } from '../../platform';
    import { PrState } from '../../types';
    import { shouldReuseExistingBranch } from './reuse';
    
    jest.mock('../../util/git');
    
    describe(getName(__filename), () => {
      describe('shouldReuseExistingBranch(config)', () => {
        const pr: Pr = {
          sourceBranch: 'master',
          state: PrState.Open,
          title: 'any',
        };
        let config: RenovateConfig;
        beforeEach(() => {
          config = {
            branchName: 'renovate/some-branch',
            rebaseLabel: 'rebase',
            rebaseWhen: 'behind-base-branch',
          };
          jest.resetAllMocks();
        });
        it('returns false if branch does not exist', async () => {
          git.branchExists.mockReturnValueOnce(false);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(false);
        });
        it('returns true if no PR', async () => {
          git.branchExists.mockReturnValueOnce(true);
          platform.getBranchPr.mockReturnValue(null);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(true);
        });
        it('returns true if does not need rebasing', async () => {
          git.branchExists.mockReturnValueOnce(true);
          platform.getBranchPr.mockResolvedValueOnce({
            ...pr,
            isConflicted: false,
          });
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(true);
        });
        it('returns true if unmergeable and cannot rebase', async () => {
          git.branchExists.mockReturnValueOnce(true);
          platform.getBranchPr.mockResolvedValueOnce({
            ...pr,
            isConflicted: true,
          });
          git.isBranchModified.mockResolvedValueOnce(true);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(true);
        });
        it('returns true if unmergeable and can rebase, but rebaseWhen is never', async () => {
          config.rebaseWhen = 'never';
          git.branchExists.mockReturnValueOnce(true);
          platform.getBranchPr.mockResolvedValueOnce({
            ...pr,
            isConflicted: true,
          });
          git.isBranchModified.mockResolvedValueOnce(false);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(true);
        });
        it('returns false if PR title rebase!', async () => {
          git.branchExists.mockReturnValueOnce(true);
          platform.getBranchPr.mockResolvedValueOnce({
            ...pr,
            title: 'rebase!Update foo to v4',
          });
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(false);
        });
        it('returns false if PR body check rebase', async () => {
          git.branchExists.mockReturnValueOnce(true);
          platform.getBranchPr.mockResolvedValueOnce({
            ...pr,
            title: 'Update foo to v4',
            body: 'blah\nblah\n- [x] <!-- rebase-check -->foo\n',
          });
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(false);
        });
        it('returns false if manual rebase by label', async () => {
          git.branchExists.mockReturnValueOnce(true);
          platform.getBranchPr.mockResolvedValueOnce({
            ...pr,
            labels: ['rebase'],
          });
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(false);
        });
        it('returns false if unmergeable and can rebase', async () => {
          git.branchExists.mockReturnValueOnce(true);
          platform.getBranchPr.mockResolvedValueOnce({
            ...pr,
            isConflicted: true,
          });
          git.isBranchModified.mockResolvedValueOnce(false);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(false);
        });
        it('returns true if automerge branch and not stale', async () => {
          config.automerge = true;
          config.automergeType = 'branch';
          git.branchExists.mockReturnValueOnce(true);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(true);
        });
        it('returns false if automerge branch and stale', async () => {
          config.rebaseWhen = 'auto';
          config.automerge = true;
          config.automergeType = 'branch';
          git.branchExists.mockReturnValueOnce(true);
          git.isBranchStale.mockResolvedValueOnce(true);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(false);
        });
        it('returns true if rebaseWhen=behind-base-branch but cannot rebase', async () => {
          config.rebaseWhen = 'behind-base-branch';
          git.branchExists.mockReturnValueOnce(true);
          git.isBranchStale.mockResolvedValueOnce(true);
          platform.getBranchPr.mockResolvedValueOnce({
            ...pr,
            isConflicted: true,
          });
          git.isBranchModified.mockResolvedValueOnce(true);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(true);
        });
    
        it('returns false if automerge pr and stale', async () => {
          config.rebaseWhen = 'auto';
          config.automerge = true;
          config.automergeType = 'pr';
          git.branchExists.mockReturnValueOnce(true);
          git.isBranchStale.mockResolvedValueOnce(true);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(false);
        });
    
        it('returns false if getRepoForceRebase and stale', async () => {
          config.rebaseWhen = 'auto';
          platform.getRepoForceRebase.mockResolvedValueOnce(true);
          git.branchExists.mockReturnValueOnce(true);
          git.isBranchStale.mockResolvedValueOnce(true);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(false);
        });
    
        it('returns true if automerge, rebaseWhen=never and stale', async () => {
          config.rebaseWhen = 'never';
          config.automerge = true;
          git.branchExists.mockReturnValueOnce(true);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(true);
          expect(git.isBranchStale).not.toHaveBeenCalled();
          expect(git.isBranchModified).not.toHaveBeenCalled();
        });
    
        it('returns false if automerge, rebaseWhen=conflicted and stale', async () => {
          config.rebaseWhen = 'conflicted';
          config.automerge = true;
          git.branchExists.mockReturnValueOnce(true);
          git.isBranchStale.mockResolvedValueOnce(true);
          const res = await shouldReuseExistingBranch(config);
          expect(res.reuseExistingBranch).toBe(false);
          expect(git.isBranchStale).toHaveBeenCalled();
          expect(git.isBranchModified).toHaveBeenCalled();
        });
      });
    });