4.2 KB178 lines
Blame
1/**
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8import {
9 commitMessageFieldsToString,
10 isFieldNonEmpty,
11 mergeCommitMessageFields,
12 mergeManyCommitMessageFields,
13 parseCommitMessageFields,
14} from '../CommitMessageFields';
15import {OSSCommitMessageFieldSchema} from '../OSSCommitMessageFieldsSchema';
16
17describe('isFieldNonEmpty', () => {
18 it('handles strings', () => {
19 expect(isFieldNonEmpty('foo')).toBeTruthy();
20 expect(isFieldNonEmpty('')).toBeFalsy();
21 });
22 it('handles arrays', () => {
23 expect(isFieldNonEmpty(['foo'])).toBeTruthy();
24 expect(isFieldNonEmpty([])).toBeFalsy();
25 expect(isFieldNonEmpty([''])).toBeFalsy();
26 });
27});
28
29describe('InternalCommitInfoFields', () => {
30 it('parses messages correctly', () => {
31 const parsed = parseCommitMessageFields(
32 OSSCommitMessageFieldSchema,
33 'my title',
34 `My description!
35another line
36`,
37 );
38
39 expect(parsed.Title).toEqual('my title');
40 expect(parsed.Description).toEqual('My description!\nanother line\n');
41 });
42
43 it('converts to string properly', () => {
44 expect(
45 commitMessageFieldsToString(OSSCommitMessageFieldSchema, {
46 Title: 'my title',
47 Description: 'my summary\nline 2',
48 }),
49 ).toEqual(
50 `my title
51
52my summary
53line 2`,
54 );
55 });
56
57 it('handles empty title when converting to string', () => {
58 expect(
59 commitMessageFieldsToString(OSSCommitMessageFieldSchema, {
60 Title: '',
61 Description: 'my summary\nline 2',
62 }),
63 ).toEqual(expect.stringMatching(/Temporary Commit at .*\n\nmy summary\nline 2/));
64 });
65
66 it('leading spaces in title is OK', () => {
67 expect(
68 commitMessageFieldsToString(OSSCommitMessageFieldSchema, {
69 Title: ' title',
70 Description: 'my summary\nline 2',
71 }),
72 ).toEqual(
73 ` title
74
75my summary
76line 2`,
77 );
78 });
79
80 describe('mergeCommitMessageFields', () => {
81 it('can merge fields', () => {
82 expect(
83 mergeCommitMessageFields(
84 OSSCommitMessageFieldSchema,
85 {
86 Title: 'Commit A',
87 Description: 'Description A',
88 },
89 {
90 Title: 'Commit B',
91 Description: 'Description B',
92 },
93 ),
94 ).toEqual({
95 Title: 'Commit A, Commit B',
96 Description: 'Description A\nDescription B',
97 });
98 });
99
100 it('leaves identical fields alone', () => {
101 expect(
102 mergeCommitMessageFields(
103 OSSCommitMessageFieldSchema,
104 {
105 Title: 'Commit A',
106 Description: 'Description A',
107 },
108 {
109 Title: 'Commit A',
110 Description: 'Description A',
111 },
112 ),
113 ).toEqual({
114 Title: 'Commit A',
115 Description: 'Description A',
116 });
117 });
118
119 it('ignores empty fields', () => {
120 expect(
121 mergeCommitMessageFields(
122 OSSCommitMessageFieldSchema,
123 {
124 Title: 'Commit A',
125 },
126 {
127 Title: 'Commit B',
128 },
129 ),
130 ).toEqual({
131 Title: 'Commit A, Commit B',
132 });
133 });
134 });
135
136 describe('mergeManyCommitMessageFields', () => {
137 it('can merge fields', () => {
138 expect(
139 mergeManyCommitMessageFields(OSSCommitMessageFieldSchema, [
140 {
141 Title: 'Commit A',
142 Description: 'Description A',
143 },
144 {
145 Title: 'Commit B',
146 Description: 'Description B',
147 },
148 {
149 Title: 'Commit C',
150 Description: 'Description C',
151 },
152 ]),
153 ).toEqual({
154 Title: 'Commit A, Commit B, Commit C',
155 Description: 'Description A\nDescription B\nDescription C',
156 });
157 });
158
159 it('ignores empty fields', () => {
160 expect(
161 mergeManyCommitMessageFields(OSSCommitMessageFieldSchema, [
162 {
163 Title: 'Commit A',
164 },
165 {
166 Title: 'Commit B',
167 },
168 {
169 Title: 'Commit C',
170 },
171 ]),
172 ).toEqual({
173 Title: 'Commit A, Commit B, Commit C',
174 });
175 });
176 });
177});
178