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