diff options
| author | ST-DDT <[email protected]> | 2022-11-08 20:49:08 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-11-08 20:49:08 +0100 |
| commit | 99b6fb2c8d6d3e8ead53d7cc8d58bf615408860d (patch) | |
| tree | 8f9179ce7f8620b36425cb5bc5040f6ccd54f574 | |
| parent | 7be37240bf0995902dfab5ba3e76c7246a04fd3e (diff) | |
| download | faker-99b6fb2c8d6d3e8ead53d7cc8d58bf615408860d.tar.xz faker-99b6fb2c8d6d3e8ead53d7cc8d58bf615408860d.zip | |
fix(git): adjust commitEntry to match `git log` output (#1539)
| -rw-r--r-- | src/modules/git/index.ts | 69 | ||||
| -rw-r--r-- | test/__snapshots__/git.spec.ts.snap | 72 | ||||
| -rw-r--r-- | test/git.spec.ts | 21 |
3 files changed, 126 insertions, 36 deletions
diff --git a/src/modules/git/index.ts b/src/modules/git/index.ts index 232e0e27..a0113a81 100644 --- a/src/modules/git/index.ts +++ b/src/modules/git/index.ts @@ -1,5 +1,23 @@ import type { Faker } from '../..'; +const GIT_DATE_FORMAT_BASE = new Intl.DateTimeFormat('en', { + weekday: 'short', + month: 'short', + day: 'numeric', + hour: '2-digit', + hourCycle: 'h24', + minute: '2-digit', + second: '2-digit', + year: 'numeric', + timeZone: 'UTC', +}); +const GIT_TIMEZONE_FORMAT = new Intl.NumberFormat('en', { + minimumIntegerDigits: 4, + maximumFractionDigits: 0, + useGrouping: false, + signDisplay: 'always', +}); + /** * Module to generate git related entries. */ @@ -29,7 +47,7 @@ export class GitModule { } /** - * Generates a random commit entry. + * Generates a random commit entry as printed by `git log`. * * @param options Options for the commit entry. * @param options.merge Set to `true` to generate a merge message line. @@ -42,10 +60,10 @@ export class GitModule { * @example * faker.git.commitEntry() * // commit fe8c38a965d13d9794eb36918cb24cebe49a45c2 - * // Author: Mable Harvey <[email protected]> - * // Date: Sat Feb 05 2022 15:09:18 GMT+0100 (Mitteleuropäische Normalzeit) + * // Author: Marion Becker <[email protected]> + * // Date: Mon Nov 7 05:38:37 2022 -0600 * // - * // copy primary system + * // generate open-source system * * @since 5.0.0 */ @@ -68,9 +86,16 @@ export class GitModule { lines.push(`Merge: ${this.shortSha()} ${this.shortSha()}`); } + const firstName = this.faker.person.firstName(); + const lastName = this.faker.person.lastName(); + const fullName = this.faker.person.fullName({ firstName, lastName }); + const username = this.faker.internet.userName(firstName, lastName); + const user = this.faker.helpers.arrayElement([fullName, username]); + const email = this.faker.internet.email(firstName, lastName); + lines.push( - `Author: ${this.faker.person.firstName()} ${this.faker.person.lastName()} <${this.faker.internet.email()}>`, - `Date: ${this.faker.date.recent(1, refDate).toString()}`, + `Author: ${user} <${email}>`, + `Date: ${this.commitDate({ refDate })}`, '', `\xa0\xa0\xa0\xa0${this.commitMessage()}`, // to end with a eol char @@ -96,6 +121,38 @@ export class GitModule { } /** + * Generates a date string for a git commit using the same format as `git log`. + * + * @param options The optional options object. + * @param options.refDate The date to use as reference point for the commit. Defaults to now. + * + * @example + * faker.git.commitDate() // 'Mon Nov 7 14:40:58 2022 +0600' + * faker.git.commitDate({ refDate: '2020-01-01' }) // 'Tue Dec 31 05:40:59 2019 -0400' + * + * @since 8.0.0 + */ + commitDate(options: { refDate?: string | Date | number } = {}): string { + const { refDate } = options; + + const dateParts = GIT_DATE_FORMAT_BASE.format( + this.faker.date.recent(1, refDate) + ) + .replace(/,/g, '') + .split(' '); + [dateParts[3], dateParts[4]] = [dateParts[4], dateParts[3]]; + + // Timezone offset + dateParts.push( + GIT_TIMEZONE_FORMAT.format( + this.faker.datatype.number({ min: -11, max: 12 }) * 100 + ) + ); + + return dateParts.join(' '); + } + + /** * Generates a random commit sha (full). * * @example diff --git a/test/__snapshots__/git.spec.ts.snap b/test/__snapshots__/git.spec.ts.snap index e61c0578..51a0c632 100644 --- a/test/__snapshots__/git.spec.ts.snap +++ b/test/__snapshots__/git.spec.ts.snap @@ -2,30 +2,36 @@ exports[`git > 42 > branch 1`] = `"array-transmit"`; +exports[`git > 42 > commitDate > with only Date refDate 1`] = `"Tue Dec 31 15:00:39 2019 +0800"`; + +exports[`git > 42 > commitDate > with only number refDate 1`] = `"Tue Dec 31 15:00:39 2019 +0800"`; + +exports[`git > 42 > commitDate > with only string refDate 1`] = `"Tue Dec 31 15:00:39 2019 +0800"`; + exports[`git > 42 > commitEntry > with only Date refDate 1`] = ` "commit be4abdd39321ad7d3fe01ffce404f4d6db0906bd -Author: Gregg Conn <[email protected]> -Date: Tue Dec 31 2019 13:03:15 GMT+0000 (Coordinated Universal Time) +Author: Gregg Conn <[email protected]> +Date: Tue Dec 31 14:49:14 2019 +0100 - bypass neural pixel + parse multi-byte sensor " `; exports[`git > 42 > commitEntry > with only number refDate 1`] = ` "commit be4abdd39321ad7d3fe01ffce404f4d6db0906bd -Author: Gregg Conn <[email protected]> -Date: Tue Dec 31 2019 13:03:15 GMT+0000 (Coordinated Universal Time) +Author: Gregg Conn <[email protected]> +Date: Tue Dec 31 14:49:14 2019 +0100 - bypass neural pixel + parse multi-byte sensor " `; exports[`git > 42 > commitEntry > with only string refDate 1`] = ` "commit be4abdd39321ad7d3fe01ffce404f4d6db0906bd -Author: Gregg Conn <[email protected]> -Date: Tue Dec 31 2019 13:03:15 GMT+0000 (Coordinated Universal Time) +Author: Gregg Conn <[email protected]> +Date: Tue Dec 31 14:49:14 2019 +0100 - bypass neural pixel + parse multi-byte sensor " `; @@ -37,30 +43,36 @@ exports[`git > 42 > shortSha 1`] = `"8be4abd"`; exports[`git > 1211 > branch 1`] = `"capacitor-connect"`; +exports[`git > 1211 > commitDate > with only Date refDate 1`] = `"Tue Dec 31 01:42:55 2019 +0000"`; + +exports[`git > 1211 > commitDate > with only number refDate 1`] = `"Tue Dec 31 01:42:55 2019 +0000"`; + +exports[`git > 1211 > commitDate > with only string refDate 1`] = `"Tue Dec 31 01:42:55 2019 +0000"`; + exports[`git > 1211 > commitEntry > with only Date refDate 1`] = ` "commit adb42f0e3f4a973fab0aeefce96dfcf49cd438df -Author: Imani Runolfsson <[email protected]> -Date: Tue Dec 31 2019 13:53:17 GMT+0000 (Coordinated Universal Time) +Author: Imani Runolfsson <[email protected]> +Date: Tue Dec 31 10:07:32 2019 -0400 - parse back-end program + override wireless interface " `; exports[`git > 1211 > commitEntry > with only number refDate 1`] = ` "commit adb42f0e3f4a973fab0aeefce96dfcf49cd438df -Author: Imani Runolfsson <[email protected]> -Date: Tue Dec 31 2019 13:53:17 GMT+0000 (Coordinated Universal Time) +Author: Imani Runolfsson <[email protected]> +Date: Tue Dec 31 10:07:32 2019 -0400 - parse back-end program + override wireless interface " `; exports[`git > 1211 > commitEntry > with only string refDate 1`] = ` "commit adb42f0e3f4a973fab0aeefce96dfcf49cd438df -Author: Imani Runolfsson <[email protected]> -Date: Tue Dec 31 2019 13:53:17 GMT+0000 (Coordinated Universal Time) +Author: Imani Runolfsson <[email protected]> +Date: Tue Dec 31 10:07:32 2019 -0400 - parse back-end program + override wireless interface " `; @@ -72,30 +84,36 @@ exports[`git > 1211 > shortSha 1`] = `"eadb42f"`; exports[`git > 1337 > branch 1`] = `"port-quantify"`; +exports[`git > 1337 > commitDate > with only Date refDate 1`] = `"Tue Dec 31 17:42:40 2019 +0200"`; + +exports[`git > 1337 > commitDate > with only number refDate 1`] = `"Tue Dec 31 17:42:40 2019 +0200"`; + +exports[`git > 1337 > commitDate > with only string refDate 1`] = `"Tue Dec 31 17:42:40 2019 +0200"`; + exports[`git > 1337 > commitEntry > with only Date refDate 1`] = ` "commit c346ba075bd57f5a62b82d72af39cbbb07a98cba -Author: Friedrich Dibbert <[email protected]> -Date: Tue Dec 31 2019 13:25:40 GMT+0000 (Coordinated Universal Time) +Author: Friedrich Dibbert <[email protected]> +Date: Tue Dec 31 04:18:56 2019 -0700 - override back-end interface + reboot haptic capacitor " `; exports[`git > 1337 > commitEntry > with only number refDate 1`] = ` "commit c346ba075bd57f5a62b82d72af39cbbb07a98cba -Author: Friedrich Dibbert <[email protected]> -Date: Tue Dec 31 2019 13:25:40 GMT+0000 (Coordinated Universal Time) +Author: Friedrich Dibbert <[email protected]> +Date: Tue Dec 31 04:18:56 2019 -0700 - override back-end interface + reboot haptic capacitor " `; exports[`git > 1337 > commitEntry > with only string refDate 1`] = ` "commit c346ba075bd57f5a62b82d72af39cbbb07a98cba -Author: Friedrich Dibbert <[email protected]> -Date: Tue Dec 31 2019 13:25:40 GMT+0000 (Coordinated Universal Time) +Author: Friedrich Dibbert <[email protected]> +Date: Tue Dec 31 04:18:56 2019 -0700 - override back-end interface + reboot haptic capacitor " `; diff --git a/test/git.spec.ts b/test/git.spec.ts index 18cb153a..9ab73ae6 100644 --- a/test/git.spec.ts +++ b/test/git.spec.ts @@ -15,7 +15,10 @@ describe('git', () => { seededTests(faker, 'git', (t) => { t.itEach('branch', 'commitMessage', 'commitSha', 'shortSha'); - t.describe('commitEntry', (t) => { + t.describeEach( + 'commitEntry', + 'commitDate' + )((t) => { t.it('with only string refDate', { refDate }) .it('with only Date refDate', { refDate: new Date(refDate) }) .it('with only number refDate', { @@ -51,12 +54,12 @@ describe('git', () => { expect(parts[0]).toMatch(/^commit [a-f0-9]+$/); if (parts.length === 7) { expect(parts[1]).toMatch(/^Merge: [a-f0-9]+ [a-f0-9]+$/); - expect(parts[2]).toMatch(/^Author: \w+ \w+ \<[\w\.]+@[\w\.]+\>$/); + expect(parts[2]).toMatch(/^Author: [\w_\. ]+ \<[\w\.]+@[\w\.]+\>$/); expect(parts[3]).toMatch(/^Date: .+$/); expect(parts[4]).toBe(''); expect(parts[5]).toMatch(/^\s{4}.+$/); } else { - expect(parts[1]).toMatch(/^Author: \w+ \w+ \<[\w\.]+@[\w\.]+\>$/); + expect(parts[1]).toMatch(/^Author: [\w_\. ]+ \<[\w\.]+@[\w\.]+\>$/); expect(parts[2]).toMatch(/^Date: .+$/); expect(parts[3]).toBe(''); expect(parts[4]).toMatch(/^\s{4}.+$/); @@ -106,6 +109,18 @@ describe('git', () => { }); }); + describe('commitDate', () => { + it('should return a random commitDate', () => { + const commitDate = faker.git.commitDate(); + + expect(commitDate).toBeTruthy(); + expect(commitDate).toBeTypeOf('string'); + + const parts = commitDate.split(' '); + expect(parts.length).toBe(6); + }); + }); + describe('commitSha', () => { it('should return a random commitSha', () => { const commitSha = faker.git.commitSha(); |
