123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- import {getProjectRelease, getReleaseDeploys} from 'sentry/actionCreators/release';
- import ReleaseStore, {getReleaseStoreKey} from 'sentry/stores/releaseStore';
- describe('ReleaseActionCreator', function () {
- const orgSlug = 'myOrg';
- const projectSlug = 'myProject';
- const releaseVersion = 'myRelease';
- const releaseKey = getReleaseStoreKey(projectSlug, releaseVersion);
- const api = new MockApiClient();
- const mockData = {id: '1'};
- let mockResponse;
- describe('getProjectRelease', () => {
- const releaseUrl = `/projects/${orgSlug}/${projectSlug}/releases/${encodeURIComponent(
- releaseVersion
- )}/`;
- beforeEach(() => {
- MockApiClient.clearMockResponses();
- mockResponse = MockApiClient.addMockResponse({
- url: releaseUrl,
- body: mockData,
- });
- ReleaseStore.reset();
- jest.restoreAllMocks();
- jest.spyOn(ReleaseStore, 'loadRelease');
- jest.spyOn(ReleaseStore, 'loadReleaseSuccess');
- // XXX(leedongwei): We cannot spy on ReleaseStore at all
- // See repositories.spec.jsx beforeEach method for the reason
- });
- it('fetches a Release and emits actions', async () => {
- getProjectRelease(api, {orgSlug, projectSlug, releaseVersion});
- expect(ReleaseStore.loadRelease).toHaveBeenCalledWith(
- orgSlug,
- projectSlug,
- releaseVersion
- );
- expect(ReleaseStore.loadReleaseSuccess).not.toHaveBeenCalled();
- await tick(); // Run Store.loadRelease and fire Action.loadReleaseSuccess
- await tick(); // Run Store.loadReleaseSuccess
- expect(mockResponse).toHaveBeenCalledWith(releaseUrl, expect.anything());
- expect(ReleaseStore.loadReleaseSuccess).toHaveBeenCalledWith(
- projectSlug,
- releaseVersion,
- mockData
- );
- expect(ReleaseStore.state.release[releaseKey]).toEqual(mockData);
- expect(ReleaseStore.state.releaseLoading[releaseKey]).toEqual(false);
- expect(ReleaseStore.state.releaseError[releaseKey]).toEqual(undefined);
- });
- it('short-circuits the JS event loop when fetching Release', () => {
- expect(ReleaseStore.state.releaseLoading[releaseKey]).toEqual(undefined);
- getProjectRelease(api, {orgSlug, projectSlug, releaseVersion});
- expect(ReleaseStore.loadRelease).toHaveBeenCalled();
- // expect(ReleaseStore.loadRelease).not.toHaveBeenCalled(); // See above for comment on ReleaseStore
- expect(ReleaseStore.state.releaseLoading[releaseKey]).toEqual(true);
- });
- });
- describe('getReleaseDeploys', () => {
- const deploysUrl = `/organizations/${orgSlug}/releases/${encodeURIComponent(
- releaseVersion
- )}/deploys/`;
- beforeEach(() => {
- MockApiClient.clearMockResponses();
- mockResponse = MockApiClient.addMockResponse({
- url: deploysUrl,
- body: [mockData],
- });
- ReleaseStore.reset();
- jest.restoreAllMocks();
- jest.spyOn(ReleaseStore, 'loadDeploys');
- jest.spyOn(ReleaseStore, 'loadDeploysSuccess');
- });
- it('fetch Deploys and emit an action', async () => {
- getReleaseDeploys(api, {orgSlug, projectSlug, releaseVersion});
- expect(ReleaseStore.loadDeploys).toHaveBeenCalledWith(
- orgSlug,
- projectSlug,
- releaseVersion
- );
- expect(ReleaseStore.loadDeploysSuccess).not.toHaveBeenCalled();
- await tick(); // Run Store.loadDeploys and fire Action.loadDeploysSuccess
- await tick(); // Run Store.loadDeploysSuccess
- expect(mockResponse).toHaveBeenCalledWith(deploysUrl, expect.anything());
- expect(ReleaseStore.loadDeploysSuccess).toHaveBeenCalledWith(
- projectSlug,
- releaseVersion,
- [mockData]
- );
- expect(ReleaseStore.state.deploys[releaseKey]).toEqual([mockData]);
- expect(ReleaseStore.state.deploysLoading[releaseKey]).toEqual(false);
- expect(ReleaseStore.state.deploysError[releaseKey]).toEqual(undefined);
- });
- it('short-circuits the JS event loop when fetching Deploys', () => {
- expect(ReleaseStore.state.deploysLoading[releaseKey]).toEqual(undefined);
- getReleaseDeploys(api, {orgSlug, projectSlug, releaseVersion});
- expect(ReleaseStore.loadDeploys).toHaveBeenCalled();
- // expect(ReleaseStore.loadDeploys).not.toHaveBeenCalled(); // See above for comment on ReleaseStore
- expect(ReleaseStore.state.deploysLoading[releaseKey]).toEqual(true);
- });
- });
- });
|