addons/isl/src/__tests__/Fold.test.tsxblame
View source
b69ab311/**
b69ab312 * Copyright (c) Meta Platforms, Inc. and affiliates.
b69ab313 *
b69ab314 * This source code is licensed under the MIT license found in the
b69ab315 * LICENSE file in the root directory of this source tree.
b69ab316 */
b69ab317
b69ab318import type {CommitInfo} from '../types';
b69ab319
b69ab3110import {Dag, DagCommitInfo} from '../dag/dag';
b69ab3111import {getFoldableRange} from '../fold';
b69ab3112import {COMMIT} from '../testUtils';
b69ab3113
b69ab3114describe('fold', () => {
b69ab3115 describe('getFoldableRange', () => {
b69ab3116 const COMMITS = [
b69ab3117 COMMIT('d', 'Commit D', 'c'),
b69ab3118 COMMIT('c', 'Commit C', 'b'),
b69ab3119 COMMIT('b', 'Commit B', 'a'),
b69ab3120 COMMIT('a', 'Commit A', '1'),
b69ab3121 COMMIT('1', 'base', '2', {phase: 'public'}),
b69ab3122 ];
b69ab3123 const [, CC, CB, CA] = COMMITS;
b69ab3124
b69ab3125 const makeDag = (commits: CommitInfo[]) =>
b69ab3126 new Dag().add(commits.map(c => DagCommitInfo.fromCommitInfo(c)));
b69ab3127 const DAG = makeDag(COMMITS);
b69ab3128
b69ab3129 it('get correct selection', () => {
b69ab3130 expect(getFoldableRange(new Set(['a', 'b', 'c']), DAG)).toMatchObject([CA, CB, CC]);
b69ab3131 });
b69ab3132
b69ab3133 it('does not care about selection order', () => {
b69ab3134 expect(getFoldableRange(new Set(['b', 'a', 'c']), DAG)).toMatchObject([CA, CB, CC]);
b69ab3135 expect(getFoldableRange(new Set(['c', 'b', 'a']), DAG)).toMatchObject([CA, CB, CC]);
b69ab3136 });
b69ab3137
b69ab3138 it('fails for singular selection', () => {
b69ab3139 expect(getFoldableRange(new Set(['a']), DAG)).toEqual(undefined);
b69ab3140 });
b69ab3141
b69ab3142 it('fails for public commits', () => {
b69ab3143 expect(getFoldableRange(new Set(['1', 'a', 'b', 'c']), DAG)).toEqual(undefined);
b69ab3144 });
b69ab3145
b69ab3146 it('fails for non-contiguous selections', () => {
b69ab3147 expect(getFoldableRange(new Set(['a', 'c']), DAG)).toEqual(undefined);
b69ab3148 });
b69ab3149
b69ab3150 it('fails if there are branches in the middle of the range', () => {
b69ab3151 const COMMITS = [
b69ab3152 COMMIT('d', 'Commit D', 'c'),
b69ab3153 COMMIT('e', 'Commit E', 'b'),
b69ab3154 COMMIT('c', 'Commit C', 'b'),
b69ab3155 COMMIT('b', 'Commit B', 'a'),
b69ab3156 COMMIT('a', 'Commit A', '1'),
b69ab3157 COMMIT('1', 'base', '2', {phase: 'public'}),
b69ab3158 ];
b69ab3159 expect(getFoldableRange(new Set(['a', 'b', 'c']), makeDag(COMMITS))).toEqual(undefined);
b69ab3160 });
b69ab3161
b69ab3162 it('the top of the stack may have multiple children', () => {
b69ab3163 const COMMITS = [
b69ab3164 COMMIT('e', 'Commit E', 'c'),
b69ab3165 COMMIT('d', 'Commit D', 'c'),
b69ab3166 COMMIT('c', 'Commit C', 'b'),
b69ab3167 COMMIT('b', 'Commit B', 'a'),
b69ab3168 COMMIT('a', 'Commit A', '1'),
b69ab3169 COMMIT('1', 'base', '2', {phase: 'public'}),
b69ab3170 ];
b69ab3171 const [, , CC, CB, CA] = COMMITS;
b69ab3172 expect(getFoldableRange(new Set(['a', 'b', 'c']), makeDag(COMMITS))).toMatchObject([
b69ab3173 CA,
b69ab3174 CB,
b69ab3175 CC,
b69ab3176 ]);
b69ab3177 });
b69ab3178 });
b69ab3179});