Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,6 @@ Thumbs.db
.nx/workspace-data

# Direnv
.direnv
.direnv
.cursor/rules/nx-rules.mdc
.github/instructions/nx.instructions.md
124 changes: 64 additions & 60 deletions apps/generator-cli/src/app/app.module.spec.ts
Original file line number Diff line number Diff line change
@@ -1,115 +1,119 @@
import {AppModule} from './app.module';
import {Test} from '@nestjs/testing';
import {PassThroughService, VersionManagerService} from './services';
import {of} from 'rxjs';
import {COMMANDER_PROGRAM} from './constants';
import { AppModule } from './app.module';
import { Test } from '@nestjs/testing';
import { PassThroughService, VersionManagerService } from './services';
import { of } from 'rxjs';
import { COMMANDER_PROGRAM } from './constants';

describe('AppModule', () => {

let fixture: AppModule
let fixture: AppModule;

const programMock = {
parse: jest.fn(),
}
};

const passThroughServiceMock = {
init: jest.fn(),
}
};

const versionManagerServiceMock = {
getSelectedVersion: jest.fn(),
setSelectedVersion: jest.fn(),
downloadIfNeeded: jest.fn(),
search: jest.fn(),
}
};

beforeEach(async () => {

[
...Object.values(versionManagerServiceMock),
...Object.values(passThroughServiceMock),
...Object.values(programMock),
].forEach(spy => spy.mockReset())
].forEach((spy) => spy.mockReset());

const moduleRef = await Test.createTestingModule({
providers: [
{provide: COMMANDER_PROGRAM, useValue: programMock},
{provide: VersionManagerService, useValue: versionManagerServiceMock},
{provide: PassThroughService, useValue: passThroughServiceMock},
]
{ provide: COMMANDER_PROGRAM, useValue: programMock },
{ provide: VersionManagerService, useValue: versionManagerServiceMock },
{ provide: PassThroughService, useValue: passThroughServiceMock },
],
}).compile();

fixture = new AppModule(
moduleRef.get(COMMANDER_PROGRAM),
moduleRef.get(VersionManagerService),
moduleRef.get(PassThroughService),
)
})
);
});

describe('lifecycles', () => {

describe('onApplicationBootstrap()', () => {

beforeEach(() => {

process.argv = ['foo', 'baz']
process.argv = ['foo', 'baz'];

programMock.parse.mockImplementation(() => {
expect(passThroughServiceMock.init).toBeCalledTimes(1)
expect(versionManagerServiceMock.downloadIfNeeded).toBeCalledTimes(1)
})
})
expect(passThroughServiceMock.init).toHaveBeenCalledTimes(1);
expect(
versionManagerServiceMock.downloadIfNeeded,
).toHaveBeenCalledTimes(1);
});
});

describe('the selected version is not set', () => {

beforeEach(async () => {
versionManagerServiceMock.getSelectedVersion.mockReturnValue(undefined)
versionManagerServiceMock.search.mockReturnValue(of([{version: '4.5.6'}]))
await fixture.onApplicationBootstrap()
})
versionManagerServiceMock.getSelectedVersion.mockReturnValue(
undefined,
);
versionManagerServiceMock.search.mockReturnValue(
of([{ version: '4.5.6' }]),
);
await fixture.onApplicationBootstrap();
});

it('searches and selects the latest version ', () => {
expect(versionManagerServiceMock.search).toHaveBeenNthCalledWith(1, ['latest'])
expect(versionManagerServiceMock.setSelectedVersion).toHaveBeenNthCalledWith(1, '4.5.6')
})
expect(versionManagerServiceMock.search).toHaveBeenNthCalledWith(1, [
'latest',
]);
expect(
versionManagerServiceMock.setSelectedVersion,
).toHaveBeenNthCalledWith(1, '4.5.6');
});

it('downloads the version, if needed', () => {
expect(versionManagerServiceMock.downloadIfNeeded).toHaveBeenNthCalledWith(1, '4.5.6')
})
expect(
versionManagerServiceMock.downloadIfNeeded,
).toHaveBeenNthCalledWith(1, '4.5.6');
});

it('parses the command', () => {
expect(programMock.parse).toHaveBeenNthCalledWith(1, process.argv)
})

})
expect(programMock.parse).toHaveBeenNthCalledWith(1, process.argv);
});
});

describe('the selected version is set', () => {

beforeEach(async () => {
versionManagerServiceMock.getSelectedVersion.mockReturnValue('1.2.3')
await fixture.onApplicationBootstrap()
})
versionManagerServiceMock.getSelectedVersion.mockReturnValue('1.2.3');
await fixture.onApplicationBootstrap();
});

it('does not search for the latest version ', () => {
expect(versionManagerServiceMock.search).toBeCalledTimes(0)
})
expect(versionManagerServiceMock.search).toHaveBeenCalledTimes(0);
});

it('does not set the selected version ', () => {
expect(versionManagerServiceMock.setSelectedVersion).toBeCalledTimes(0)
})
expect(
versionManagerServiceMock.setSelectedVersion,
).toHaveBeenCalledTimes(0);
});

it('downloads the version, if needed', () => {
expect(versionManagerServiceMock.downloadIfNeeded).toHaveBeenNthCalledWith(1, '1.2.3')
})
expect(
versionManagerServiceMock.downloadIfNeeded,
).toHaveBeenNthCalledWith(1, '1.2.3');
});

it('parses the command', () => {
expect(programMock.parse).toHaveBeenNthCalledWith(1, process.argv)
})

})

})

})

})
expect(programMock.parse).toHaveBeenNthCalledWith(1, process.argv);
});
});
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ describe('VersionManagerController', () => {
});

it('adds 3 commands, but 2 actions', () => {
expect(commandMock.action).toBeCalledTimes(2);
expect(commandMock.command).toBeCalledTimes(3);
expect(commandMock.description).toBeCalledTimes(3);
expect(commandMock.action).toHaveBeenCalledTimes(2);
expect(commandMock.command).toHaveBeenCalledTimes(3);
expect(commandMock.description).toHaveBeenCalledTimes(3);
});

describe('commands', function () {
Expand Down Expand Up @@ -110,21 +110,21 @@ describe('VersionManagerController', () => {
'remove',
'setSelectedVersion',
])('does not call version manager %s', (fn) => {
expect(versionManagerServiceMock[fn]).toBeCalledTimes(0);
expect(versionManagerServiceMock[fn]).toHaveBeenCalledTimes(0);
});

it('does not print a table', () => {
expect(uiServiceMock.table).toBeCalledTimes(0);
expect(uiServiceMock.table).toHaveBeenCalledTimes(0);
});

it('does not print a list', () => {
expect(uiServiceMock.list).toBeCalledTimes(0);
expect(uiServiceMock.list).toHaveBeenCalledTimes(0);
});

it('prints the result as json', () => {
expect(log).toHaveBeenNthCalledWith(
1,
JSON.stringify(versions, null, 2)
JSON.stringify(versions, null, 2),
);
});
});
Expand All @@ -137,7 +137,7 @@ describe('VersionManagerController', () => {
uiServiceMock.table.mockReset().mockResolvedValue(versions[0]);
uiServiceMock.list.mockReset().mockResolvedValue(whatsNextSpy);
versionManagerServiceMock.isSelectedVersion.mockImplementationOnce(
(v) => v === '1.2.3'
(v) => v === '1.2.3',
);
commandMock.refs['list [versionTags...]'].opts
.mockReset()
Expand Down Expand Up @@ -193,7 +193,7 @@ describe('VersionManagerController', () => {
await cmd.action(['tag1', 'tag2']);
expect(log).toHaveBeenNthCalledWith(
1,
chalk.red('No results for: tag1 tag2')
chalk.red('No results for: tag1 tag2'),
);
});

Expand Down Expand Up @@ -289,12 +289,16 @@ describe('VersionManagerController', () => {

it('sets version[0] from the list', async () => {
versionManagerServiceMock.search.mockReturnValue(
of([{ version: '1.2.3' }, { version: '1.2.4' }, { version: '0.5.6' }])
of([
{ version: '1.2.3' },
{ version: '1.2.4' },
{ version: '0.5.6' },
]),
);

await cmd.action(['tag1', 'tag2']);
expect(
versionManagerServiceMock.setSelectedVersion
versionManagerServiceMock.setSelectedVersion,
).toHaveBeenNthCalledWith(1, '1.2.3');
});

Expand All @@ -303,7 +307,7 @@ describe('VersionManagerController', () => {
await cmd.action(['tag1', 'tag2']);
expect(log).toHaveBeenNthCalledWith(
1,
chalk.red('Unable to find version matching criteria "tag1 tag2"')
chalk.red('Unable to find version matching criteria "tag1 tag2"'),
);
});
});
Expand Down
Loading
Loading