]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-12646 Fix inconsistent date filtering
authorJeremy Davis <jeremy.davis@sonarsource.com>
Wed, 13 Nov 2019 07:01:34 +0000 (16:01 +0900)
committerSonarTech <sonartech@sonarsource.com>
Wed, 4 Dec 2019 19:46:09 +0000 (20:46 +0100)
server/sonar-web/src/main/js/apps/projectsManagement/App.tsx
server/sonar-web/src/main/js/apps/projectsManagement/__tests__/App-test.tsx

index f8c9611676244ee2e34afab789dcdb77806db22a..1d31a5bc7a9cacb9b7a8522eb717d1b5407403c9 100644 (file)
@@ -21,7 +21,7 @@ import { debounce, uniq, without } from 'lodash';
 import * as React from 'react';
 import Helmet from 'react-helmet';
 import ListFooter from 'sonar-ui-common/components/controls/ListFooter';
-import { toNotSoISOString } from 'sonar-ui-common/helpers/dates';
+import { toShortNotSoISOString } from 'sonar-ui-common/helpers/dates';
 import { translate } from 'sonar-ui-common/helpers/l10n';
 import { getComponents, Project } from '../../api/components';
 import Suggestions from '../../app/components/embed-docs-modal/Suggestions';
@@ -86,7 +86,7 @@ export default class App extends React.PureComponent<Props, State> {
   requestProjects = () => {
     const { analyzedBefore } = this.state;
     const parameters = {
-      analyzedBefore: analyzedBefore && toNotSoISOString(analyzedBefore),
+      analyzedBefore: analyzedBefore && toShortNotSoISOString(analyzedBefore),
       onProvisionedOnly: this.state.provisioned || undefined,
       organization: this.props.organization.key,
       p: this.state.page !== 1 ? this.state.page : undefined,
index 4ac8adae2bc97fbbb33082bd18f28baa6c2b5092..6941a34fbdccf9a237d6faaf4d99ae72fcefafe7 100644 (file)
@@ -20,7 +20,9 @@
 
 import { shallow } from 'enzyme';
 import * as React from 'react';
+import { getComponents } from '../../../api/components';
 import App, { Props } from '../App';
+import Search from '../Search';
 
 jest.mock('lodash', () => {
   const lodash = require.requireActual('lodash');
@@ -28,9 +30,9 @@ jest.mock('lodash', () => {
   return lodash;
 });
 
-jest.mock('../../../api/components', () => ({ getComponents: jest.fn() }));
-
-const getComponents = require('../../../api/components').getComponents as jest.Mock<any>;
+jest.mock('../../../api/components', () => ({
+  getComponents: jest.fn().mockResolvedValue({ paging: { total: 0 }, components: [] })
+}));
 
 const organization: T.Organization = { key: 'org', name: 'org', projectVisibility: 'public' };
 
@@ -42,9 +44,7 @@ const defaultSearchParameters = {
 };
 
 beforeEach(() => {
-  getComponents
-    .mockImplementation(() => Promise.resolve({ paging: { total: 0 }, components: [] }))
-    .mockClear();
+  jest.clearAllMocks();
 });
 
 it('fetches all projects on mount', () => {
@@ -75,6 +75,19 @@ it('searches', () => {
   expect(getComponents).lastCalledWith({ ...defaultSearchParameters, q: 'foo', qualifiers: 'TRK' });
 });
 
+it('should handle date filtering', () => {
+  const wrapper = shallowRender();
+  wrapper
+    .find(Search)
+    .props()
+    .onDateChanged(new Date('2019-11-14T06:55:02.663Z'));
+  expect(getComponents).toHaveBeenCalledWith({
+    ...defaultSearchParameters,
+    qualifiers: 'TRK',
+    analyzedBefore: '2019-11-14'
+  });
+});
+
 it('loads more', () => {
   const wrapper = shallowRender();
   wrapper.find('ListFooter').prop<Function>('loadMore')();
@@ -82,7 +95,7 @@ it('loads more', () => {
 });
 
 it('selects and deselects projects', async () => {
-  getComponents.mockImplementation(() =>
+  (getComponents as jest.Mock).mockImplementation(() =>
     Promise.resolve({ paging: { total: 2 }, components: [{ key: 'foo' }, { key: 'bar' }] })
   );
   const wrapper = shallowRender();
@@ -118,7 +131,7 @@ it('creates project', () => {
 
   wrapper.find('CreateProjectForm').prop<Function>('onProjectCreated')();
   wrapper.update();
-  expect(getComponents.mock.calls).toHaveLength(2);
+  expect((getComponents as jest.Mock).mock.calls).toHaveLength(2);
 
   wrapper.find('CreateProjectForm').prop<Function>('onClose')();
   wrapper.update();
@@ -133,7 +146,7 @@ it('changes default project visibility', () => {
 });
 
 function shallowRender(props?: { [P in keyof Props]?: Props[P] }) {
-  return shallow(
+  return shallow<App>(
     <App
       currentUser={{ login: 'foo' }}
       hasProvisionPermission={true}