|
@@ -95,7 +95,7 @@ describe('ApiSource', function () {
|
|
ConfigStore.loadInitialData(configState);
|
|
ConfigStore.loadInitialData(configState);
|
|
});
|
|
});
|
|
|
|
|
|
- it('queries all API endpoints', function () {
|
|
|
|
|
|
+ it('queries all API endpoints', async function () {
|
|
const mock = jest.fn().mockReturnValue(null);
|
|
const mock = jest.fn().mockReturnValue(null);
|
|
render(
|
|
render(
|
|
<ApiSource {...defaultProps} query="foo">
|
|
<ApiSource {...defaultProps} query="foo">
|
|
@@ -103,7 +103,7 @@ describe('ApiSource', function () {
|
|
</ApiSource>
|
|
</ApiSource>
|
|
);
|
|
);
|
|
|
|
|
|
- expect(orgsMock).toHaveBeenCalled();
|
|
|
|
|
|
+ await waitFor(() => expect(orgsMock).toHaveBeenCalled());
|
|
expect(projectsMock).toHaveBeenCalled();
|
|
expect(projectsMock).toHaveBeenCalled();
|
|
expect(teamsMock).toHaveBeenCalled();
|
|
expect(teamsMock).toHaveBeenCalled();
|
|
expect(membersMock).toHaveBeenCalled();
|
|
expect(membersMock).toHaveBeenCalled();
|
|
@@ -111,7 +111,7 @@ describe('ApiSource', function () {
|
|
expect(eventIdMock).not.toHaveBeenCalled();
|
|
expect(eventIdMock).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
|
|
- it('queries multiple regions for organization lists', function () {
|
|
|
|
|
|
+ it('queries multiple regions for organization lists', async function () {
|
|
const mock = jest.fn().mockReturnValue(null);
|
|
const mock = jest.fn().mockReturnValue(null);
|
|
ConfigStore.loadInitialData({
|
|
ConfigStore.loadInitialData({
|
|
...configState,
|
|
...configState,
|
|
@@ -127,7 +127,7 @@ describe('ApiSource', function () {
|
|
</ApiSource>
|
|
</ApiSource>
|
|
);
|
|
);
|
|
|
|
|
|
- expect(orgsMock).toHaveBeenCalledTimes(2);
|
|
|
|
|
|
+ await waitFor(() => expect(orgsMock).toHaveBeenCalledTimes(2));
|
|
expect(orgsMock).toHaveBeenCalledWith(
|
|
expect(orgsMock).toHaveBeenCalledWith(
|
|
'/organizations/',
|
|
'/organizations/',
|
|
expect.objectContaining({host: 'https://us.sentry.io'})
|
|
expect.objectContaining({host: 'https://us.sentry.io'})
|
|
@@ -211,26 +211,28 @@ describe('ApiSource', function () {
|
|
expect(teamsMock).toHaveBeenCalled();
|
|
expect(teamsMock).toHaveBeenCalled();
|
|
expect(membersMock).toHaveBeenCalled();
|
|
expect(membersMock).toHaveBeenCalled();
|
|
expect(shortIdMock).not.toHaveBeenCalled();
|
|
expect(shortIdMock).not.toHaveBeenCalled();
|
|
- expect(mock).toHaveBeenLastCalledWith(
|
|
|
|
- expect.objectContaining({
|
|
|
|
- results: [
|
|
|
|
- {
|
|
|
|
- item: expect.objectContaining({
|
|
|
|
- title: 'event type',
|
|
|
|
- description: 'event description',
|
|
|
|
- sourceType: 'event',
|
|
|
|
- resultType: 'event',
|
|
|
|
- to: '/org-slug/project-slug/issues/1/events/12345678901234567890123456789012/',
|
|
|
|
- }),
|
|
|
|
- score: 1,
|
|
|
|
- refIndex: 0,
|
|
|
|
- },
|
|
|
|
- ],
|
|
|
|
- })
|
|
|
|
|
|
+ await waitFor(() =>
|
|
|
|
+ expect(mock).toHaveBeenLastCalledWith(
|
|
|
|
+ expect.objectContaining({
|
|
|
|
+ results: [
|
|
|
|
+ {
|
|
|
|
+ item: expect.objectContaining({
|
|
|
|
+ title: 'event type',
|
|
|
|
+ description: 'event description',
|
|
|
|
+ sourceType: 'event',
|
|
|
|
+ resultType: 'event',
|
|
|
|
+ to: '/org-slug/project-slug/issues/1/events/12345678901234567890123456789012/',
|
|
|
|
+ }),
|
|
|
|
+ score: 1,
|
|
|
|
+ refIndex: 0,
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ })
|
|
|
|
+ )
|
|
);
|
|
);
|
|
});
|
|
});
|
|
|
|
|
|
- it('only queries org endpoint if there is no org in context', function () {
|
|
|
|
|
|
+ it('only queries org endpoint if there is no org in context', async function () {
|
|
const mock = jest.fn().mockReturnValue(null);
|
|
const mock = jest.fn().mockReturnValue(null);
|
|
render(
|
|
render(
|
|
<ApiSource {...omit(defaultProps, 'organization')} params={{orgId: ''}} query="foo">
|
|
<ApiSource {...omit(defaultProps, 'organization')} params={{orgId: ''}} query="foo">
|
|
@@ -238,7 +240,7 @@ describe('ApiSource', function () {
|
|
</ApiSource>
|
|
</ApiSource>
|
|
);
|
|
);
|
|
|
|
|
|
- expect(orgsMock).toHaveBeenCalled();
|
|
|
|
|
|
+ await waitFor(() => expect(orgsMock).toHaveBeenCalled());
|
|
expect(projectsMock).not.toHaveBeenCalled();
|
|
expect(projectsMock).not.toHaveBeenCalled();
|
|
expect(teamsMock).not.toHaveBeenCalled();
|
|
expect(teamsMock).not.toHaveBeenCalled();
|
|
expect(membersMock).not.toHaveBeenCalled();
|
|
expect(membersMock).not.toHaveBeenCalled();
|
|
@@ -415,40 +417,54 @@ describe('ApiSource', function () {
|
|
});
|
|
});
|
|
|
|
|
|
describe('API queries', function () {
|
|
describe('API queries', function () {
|
|
- it('calls API based on query string', function () {
|
|
|
|
|
|
+ it('calls API based on query string', async function () {
|
|
const {rerender} = render(<ApiSource {...defaultProps} query="" />);
|
|
const {rerender} = render(<ApiSource {...defaultProps} query="" />);
|
|
|
|
|
|
- expect(projectsMock).toHaveBeenCalledTimes(1);
|
|
|
|
|
|
+ await waitFor(() => {
|
|
|
|
+ expect(projectsMock).toHaveBeenCalledTimes(1);
|
|
|
|
+ });
|
|
|
|
|
|
rerender(<ApiSource {...defaultProps} query="f" />);
|
|
rerender(<ApiSource {...defaultProps} query="f" />);
|
|
|
|
|
|
// calls API when query string length is 1 char
|
|
// calls API when query string length is 1 char
|
|
- expect(projectsMock).toHaveBeenCalledTimes(2);
|
|
|
|
|
|
+ await waitFor(() => {
|
|
|
|
+ expect(projectsMock).toHaveBeenCalledTimes(2);
|
|
|
|
+ });
|
|
|
|
|
|
rerender(<ApiSource {...defaultProps} query="fo" />);
|
|
rerender(<ApiSource {...defaultProps} query="fo" />);
|
|
|
|
|
|
// calls API when query string length increases from 1 -> 2
|
|
// calls API when query string length increases from 1 -> 2
|
|
- expect(projectsMock).toHaveBeenCalledTimes(3);
|
|
|
|
|
|
+ await waitFor(() => {
|
|
|
|
+ expect(projectsMock).toHaveBeenCalledTimes(3);
|
|
|
|
+ });
|
|
|
|
|
|
rerender(<ApiSource {...defaultProps} query="foo" />);
|
|
rerender(<ApiSource {...defaultProps} query="foo" />);
|
|
|
|
|
|
// Should not query API when query is > 2 chars
|
|
// Should not query API when query is > 2 chars
|
|
- expect(projectsMock).toHaveBeenCalledTimes(3);
|
|
|
|
|
|
+ await waitFor(() => {
|
|
|
|
+ expect(projectsMock).toHaveBeenCalledTimes(3);
|
|
|
|
+ });
|
|
|
|
|
|
// re-queries API if first 2 characters are different
|
|
// re-queries API if first 2 characters are different
|
|
rerender(<ApiSource {...defaultProps} query="ba" />);
|
|
rerender(<ApiSource {...defaultProps} query="ba" />);
|
|
|
|
|
|
- expect(projectsMock).toHaveBeenCalledTimes(4);
|
|
|
|
|
|
+ await waitFor(() => {
|
|
|
|
+ expect(projectsMock).toHaveBeenCalledTimes(4);
|
|
|
|
+ });
|
|
|
|
|
|
// Does not requery when query stays the same
|
|
// Does not requery when query stays the same
|
|
rerender(<ApiSource {...defaultProps} query="ba" />);
|
|
rerender(<ApiSource {...defaultProps} query="ba" />);
|
|
|
|
|
|
- expect(projectsMock).toHaveBeenCalledTimes(4);
|
|
|
|
|
|
+ await waitFor(() => {
|
|
|
|
+ expect(projectsMock).toHaveBeenCalledTimes(4);
|
|
|
|
+ });
|
|
|
|
|
|
// queries if we go from 2 chars -> 1 char
|
|
// queries if we go from 2 chars -> 1 char
|
|
rerender(<ApiSource {...defaultProps} query="b" />);
|
|
rerender(<ApiSource {...defaultProps} query="b" />);
|
|
|
|
|
|
- expect(projectsMock).toHaveBeenCalledTimes(5);
|
|
|
|
|
|
+ await waitFor(() => {
|
|
|
|
+ expect(projectsMock).toHaveBeenCalledTimes(5);
|
|
|
|
+ });
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|