discoverSavedQueriesStore.spec.jsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. import DiscoverSavedQueriesStore from 'app/stores/discoverSavedQueriesStore';
  2. import {
  3. fetchSavedQueries,
  4. createSavedQuery,
  5. updateSavedQuery,
  6. deleteSavedQuery,
  7. } from 'app/actionCreators/discoverSavedQueries';
  8. import {Client} from 'app/api';
  9. describe('DiscoverSavedQueriesStore', function() {
  10. let api;
  11. const now = '2019-09-03T12:13:14';
  12. beforeAll(async function() {
  13. api = new Client();
  14. DiscoverSavedQueriesStore.reset();
  15. await tick();
  16. });
  17. beforeEach(function() {
  18. Client.addMockResponse({
  19. url: '/organizations/org-1/discover/saved/',
  20. body: [
  21. {
  22. id: '1',
  23. name: 'first query',
  24. fields: ['title', 'count()'],
  25. dateCreated: now,
  26. dateUpdated: now,
  27. createdBy: '1',
  28. },
  29. {
  30. id: '2',
  31. name: 'second query',
  32. fields: ['transaction', 'count()'],
  33. dateCreated: now,
  34. dateUpdated: now,
  35. createdBy: '1',
  36. },
  37. ],
  38. });
  39. });
  40. afterEach(async function() {
  41. Client.clearMockResponses();
  42. DiscoverSavedQueriesStore.reset();
  43. await tick();
  44. });
  45. it('has default state', function() {
  46. expect(DiscoverSavedQueriesStore.get()).toEqual({
  47. hasError: false,
  48. isLoading: true,
  49. savedQueries: [],
  50. });
  51. });
  52. it('fetching queries updates the store', async function() {
  53. fetchSavedQueries(api, 'org-1');
  54. await tick();
  55. await tick();
  56. const state = DiscoverSavedQueriesStore.get();
  57. expect(state.isLoading).toEqual(false);
  58. expect(state.hasError).toEqual(false);
  59. expect(state.savedQueries).toHaveLength(2);
  60. });
  61. it('fetching queries updates the store on error', async function() {
  62. Client.clearMockResponses();
  63. Client.addMockResponse({
  64. url: '/organizations/org-1/discover/saved/',
  65. method: 'GET',
  66. statusCode: 500,
  67. });
  68. fetchSavedQueries(api, 'org-1');
  69. await tick();
  70. await tick();
  71. const state = DiscoverSavedQueriesStore.get();
  72. expect(state.isLoading).toEqual(false);
  73. expect(state.hasError).toEqual(true);
  74. expect(state.savedQueries).toHaveLength(0);
  75. });
  76. it('updating a query updates the store', async function() {
  77. Client.addMockResponse({
  78. url: '/organizations/org-1/discover/saved/1/',
  79. method: 'PUT',
  80. body: {
  81. id: '2',
  82. name: 'best query',
  83. dateCreated: now,
  84. dateUpdated: now,
  85. createdBy: '2',
  86. },
  87. });
  88. fetchSavedQueries(api, 'org-1');
  89. await tick();
  90. const query = {
  91. id: '2',
  92. name: 'best query',
  93. fields: ['title', 'count()'],
  94. };
  95. updateSavedQuery(api, 'org-1', query);
  96. await tick();
  97. const state = DiscoverSavedQueriesStore.get();
  98. expect(state.isLoading).toEqual(false);
  99. expect(state.hasError).toEqual(false);
  100. expect(state.savedQueries).toHaveLength(2);
  101. expect(state.savedQueries[0].dateCreated).toEqual(now);
  102. });
  103. it('creating a query updates the store', async function() {
  104. Client.addMockResponse({
  105. url: '/organizations/org-1/discover/saved/',
  106. method: 'POST',
  107. body: {
  108. id: '2',
  109. name: 'best query',
  110. fields: ['title', 'count()'],
  111. dateCreated: now,
  112. dateUpdated: now,
  113. createdBy: '2',
  114. },
  115. });
  116. fetchSavedQueries(api, 'org-1');
  117. await tick();
  118. const query = {
  119. name: 'best query',
  120. fields: ['title', 'count()'],
  121. };
  122. createSavedQuery(api, 'org-1', query);
  123. await tick();
  124. await tick();
  125. const state = DiscoverSavedQueriesStore.get();
  126. expect(state.isLoading).toEqual(false);
  127. expect(state.hasError).toEqual(false);
  128. expect(state.savedQueries).toHaveLength(3);
  129. });
  130. it('deleting a query updates the store', async function() {
  131. Client.addMockResponse({
  132. url: '/organizations/org-1/discover/saved/1/',
  133. method: 'DELETE',
  134. statusCode: 200,
  135. });
  136. fetchSavedQueries(api, 'org-1');
  137. await tick();
  138. deleteSavedQuery(api, 'org-1', '1');
  139. await tick();
  140. await tick();
  141. const state = DiscoverSavedQueriesStore.get();
  142. expect(state.isLoading).toEqual(false);
  143. expect(state.hasError).toEqual(false);
  144. expect(state.savedQueries).toHaveLength(1);
  145. });
  146. });