Skip to content

Commit

Permalink
test: locale config
Browse files Browse the repository at this point in the history
  • Loading branch information
privatenumber committed Mar 10, 2023
1 parent ceb4950 commit 4a91fbd
Showing 1 changed file with 97 additions and 8 deletions.
105 changes: 97 additions & 8 deletions tests/specs/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@ export default testSuite(({ describe }) => {
}

describe('CLI', async ({ test }) => {
const data: Record<string, string> = {
firstName: 'Hiroki',
};
const fixture = await createFixture({
'data.json': JSON.stringify({
firstName: 'Hiroki',
}),
'data.json': JSON.stringify(data),
});

const aicommits = createAicommits({
Expand All @@ -40,7 +41,7 @@ export default testSuite(({ describe }) => {
expect(stdout).toMatch('No staged changes found. Make sure to stage your changes with `git add`.');
});

await test('Commits', async () => {
await test('Generates commit message', async () => {
await git('add', ['data.json']);

await aicommits([
Expand All @@ -53,10 +54,96 @@ export default testSuite(({ describe }) => {
expect(statusBefore.stdout).toBe('A data.json');

const committing = aicommits();
committing.stdout!.on('data', (buffer) => {
const data = buffer.toString();
committing.stdout!.on('data', (buffer: Buffer) => {
const stdout = buffer.toString();
if (stdout.match('└')) {
committing.stdin!.write('y');
committing.stdin!.end();
}
});

await committing;

const statusAfter = await git('status', ['--porcelain', '--untracked-files=no']);
expect(statusAfter.stdout).toBe('');

const { stdout } = await git('log', ['--oneline']);
console.log('Committed with:', stdout);
});

await test('Accepts --generate flag, overriding config', async () => {
data.lastName = 'Osame';
await fixture.writeJson('data.json', data);

await git('add', ['data.json']);

const statusBefore = await git('status', ['--porcelain', '--untracked-files=no']);
expect(statusBefore.stdout).toBe('M data.json');

await aicommits([
'config',
'set',
'generate=4',
]);

// Generate flag should override generate config
const committing = aicommits(['--generate', '2']);

committing.stdout!.on('data', function onPrompt(buffer: Buffer) {
const stdout = buffer.toString();
if (stdout.match('└')) {
const countChoices = stdout.match(/ {2}[●○]/g)?.length ?? 0;

// 2 choices or less should be generated
// pretty common for it to return 2 results that are the same
// which gets de-duplicated
expect(countChoices <= 2).toBe(true);

if (data.match('Yes /')) {
committing.stdin!.write('\r');
committing.stdin!.end();
committing.stdout?.off('data', onPrompt);
}
});

await committing;

const statusAfter = await git('status', ['--porcelain', '--untracked-files=no']);
expect(statusAfter.stdout).toBe('');

const { stdout } = await git('log', ['--oneline']);
console.log('Committed with:', stdout);

await aicommits([
'config',
'set',
'generate=1',
]);
});

await test('Generates Japanese commit message via locale config', async () => {
// https://stackoverflow.com/a/15034560/911407
const japanesePattern = /[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFF9F\u4E00-\u9FAF\u3400-\u4DBF]/;

data.username = 'privatenumber';
await fixture.writeJson('data.json', data);

await git('add', ['data.json']);

const statusBefore = await git('status', ['--porcelain', '--untracked-files=no']);
expect(statusBefore.stdout).toBe('M data.json');

await aicommits([
'config',
'set',
'locale=ja',
]);

// Generate flag should override generate config
const committing = aicommits(['--generate', '1']);

committing.stdout!.on('data', (buffer: Buffer) => {
const stdout = buffer.toString();
if (stdout.match('└')) {
committing.stdin!.write('y');
committing.stdin!.end();
}
Expand All @@ -68,7 +155,9 @@ export default testSuite(({ describe }) => {
expect(statusAfter.stdout).toBe('');

const { stdout } = await git('log', ['--oneline']);
console.log('Commited with:', stdout);
console.log('Committed with:', stdout);

expect(stdout).toMatch(japanesePattern);
});

await fixture.rm();
Expand Down

0 comments on commit 4a91fbd

Please sign in to comment.