addons/isl/src/CommitInfoView/__tests__/OSSCommitMessageFields.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 {
b69ab319 commitMessageFieldsToString,
b69ab3110 isFieldNonEmpty,
b69ab3111 mergeCommitMessageFields,
b69ab3112 mergeManyCommitMessageFields,
b69ab3113 parseCommitMessageFields,
b69ab3114} from '../CommitMessageFields';
b69ab3115import {OSSCommitMessageFieldSchema} from '../OSSCommitMessageFieldsSchema';
b69ab3116
b69ab3117describe('isFieldNonEmpty', () => {
b69ab3118 it('handles strings', () => {
b69ab3119 expect(isFieldNonEmpty('foo')).toBeTruthy();
b69ab3120 expect(isFieldNonEmpty('')).toBeFalsy();
b69ab3121 });
b69ab3122 it('handles arrays', () => {
b69ab3123 expect(isFieldNonEmpty(['foo'])).toBeTruthy();
b69ab3124 expect(isFieldNonEmpty([])).toBeFalsy();
b69ab3125 expect(isFieldNonEmpty([''])).toBeFalsy();
b69ab3126 });
b69ab3127});
b69ab3128
b69ab3129describe('InternalCommitInfoFields', () => {
b69ab3130 it('parses messages correctly', () => {
b69ab3131 const parsed = parseCommitMessageFields(
b69ab3132 OSSCommitMessageFieldSchema,
b69ab3133 'my title',
b69ab3134 `My description!
b69ab3135another line
b69ab3136`,
b69ab3137 );
b69ab3138
b69ab3139 expect(parsed.Title).toEqual('my title');
b69ab3140 expect(parsed.Description).toEqual('My description!\nanother line\n');
b69ab3141 });
b69ab3142
b69ab3143 it('converts to string properly', () => {
b69ab3144 expect(
b69ab3145 commitMessageFieldsToString(OSSCommitMessageFieldSchema, {
b69ab3146 Title: 'my title',
b69ab3147 Description: 'my summary\nline 2',
b69ab3148 }),
b69ab3149 ).toEqual(
b69ab3150 `my title
b69ab3151
b69ab3152my summary
b69ab3153line 2`,
b69ab3154 );
b69ab3155 });
b69ab3156
b69ab3157 it('handles empty title when converting to string', () => {
b69ab3158 expect(
b69ab3159 commitMessageFieldsToString(OSSCommitMessageFieldSchema, {
b69ab3160 Title: '',
b69ab3161 Description: 'my summary\nline 2',
b69ab3162 }),
b69ab3163 ).toEqual(expect.stringMatching(/Temporary Commit at .*\n\nmy summary\nline 2/));
b69ab3164 });
b69ab3165
b69ab3166 it('leading spaces in title is OK', () => {
b69ab3167 expect(
b69ab3168 commitMessageFieldsToString(OSSCommitMessageFieldSchema, {
b69ab3169 Title: ' title',
b69ab3170 Description: 'my summary\nline 2',
b69ab3171 }),
b69ab3172 ).toEqual(
b69ab3173 ` title
b69ab3174
b69ab3175my summary
b69ab3176line 2`,
b69ab3177 );
b69ab3178 });
b69ab3179
b69ab3180 describe('mergeCommitMessageFields', () => {
b69ab3181 it('can merge fields', () => {
b69ab3182 expect(
b69ab3183 mergeCommitMessageFields(
b69ab3184 OSSCommitMessageFieldSchema,
b69ab3185 {
b69ab3186 Title: 'Commit A',
b69ab3187 Description: 'Description A',
b69ab3188 },
b69ab3189 {
b69ab3190 Title: 'Commit B',
b69ab3191 Description: 'Description B',
b69ab3192 },
b69ab3193 ),
b69ab3194 ).toEqual({
b69ab3195 Title: 'Commit A, Commit B',
b69ab3196 Description: 'Description A\nDescription B',
b69ab3197 });
b69ab3198 });
b69ab3199
b69ab31100 it('leaves identical fields alone', () => {
b69ab31101 expect(
b69ab31102 mergeCommitMessageFields(
b69ab31103 OSSCommitMessageFieldSchema,
b69ab31104 {
b69ab31105 Title: 'Commit A',
b69ab31106 Description: 'Description A',
b69ab31107 },
b69ab31108 {
b69ab31109 Title: 'Commit A',
b69ab31110 Description: 'Description A',
b69ab31111 },
b69ab31112 ),
b69ab31113 ).toEqual({
b69ab31114 Title: 'Commit A',
b69ab31115 Description: 'Description A',
b69ab31116 });
b69ab31117 });
b69ab31118
b69ab31119 it('ignores empty fields', () => {
b69ab31120 expect(
b69ab31121 mergeCommitMessageFields(
b69ab31122 OSSCommitMessageFieldSchema,
b69ab31123 {
b69ab31124 Title: 'Commit A',
b69ab31125 },
b69ab31126 {
b69ab31127 Title: 'Commit B',
b69ab31128 },
b69ab31129 ),
b69ab31130 ).toEqual({
b69ab31131 Title: 'Commit A, Commit B',
b69ab31132 });
b69ab31133 });
b69ab31134 });
b69ab31135
b69ab31136 describe('mergeManyCommitMessageFields', () => {
b69ab31137 it('can merge fields', () => {
b69ab31138 expect(
b69ab31139 mergeManyCommitMessageFields(OSSCommitMessageFieldSchema, [
b69ab31140 {
b69ab31141 Title: 'Commit A',
b69ab31142 Description: 'Description A',
b69ab31143 },
b69ab31144 {
b69ab31145 Title: 'Commit B',
b69ab31146 Description: 'Description B',
b69ab31147 },
b69ab31148 {
b69ab31149 Title: 'Commit C',
b69ab31150 Description: 'Description C',
b69ab31151 },
b69ab31152 ]),
b69ab31153 ).toEqual({
b69ab31154 Title: 'Commit A, Commit B, Commit C',
b69ab31155 Description: 'Description A\nDescription B\nDescription C',
b69ab31156 });
b69ab31157 });
b69ab31158
b69ab31159 it('ignores empty fields', () => {
b69ab31160 expect(
b69ab31161 mergeManyCommitMessageFields(OSSCommitMessageFieldSchema, [
b69ab31162 {
b69ab31163 Title: 'Commit A',
b69ab31164 },
b69ab31165 {
b69ab31166 Title: 'Commit B',
b69ab31167 },
b69ab31168 {
b69ab31169 Title: 'Commit C',
b69ab31170 },
b69ab31171 ]),
b69ab31172 ).toEqual({
b69ab31173 Title: 'Commit A, Commit B, Commit C',
b69ab31174 });
b69ab31175 });
b69ab31176 });
b69ab31177});