aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/BackgroundTasksApp.js2
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/Task.js28
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/search.js29
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/tasks.js3
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/containers/BackgroundTasksAppContainer.js2
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/containers/SearchContainer.js3
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/containers/TasksContainer.js3
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/store/actions.js15
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/store/reducers.js1
-rw-r--r--server/sonar-web/tests/apps/background-tasks-test.js91
10 files changed, 81 insertions, 96 deletions
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/BackgroundTasksApp.js b/server/sonar-web/src/main/js/apps/background-tasks/components/BackgroundTasksApp.js
index 9f2192ab629..3418548c36e 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/BackgroundTasksApp.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/BackgroundTasksApp.js
@@ -30,7 +30,7 @@ import ListFooterContainer from '../containers/ListFooterContainer';
export default class BackgroundTasksApp extends Component {
componentDidMount () {
- this.props.initApp();
+ this.props.initApp(this.props.options.component);
}
getComponentFilter () {
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/Task.js b/server/sonar-web/src/main/js/apps/background-tasks/components/Task.js
index 58daa47f6bb..c8bbf919a95 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/Task.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/Task.js
@@ -26,21 +26,9 @@ import TaskDate from './TaskDate';
import TaskExecutionTime from './TaskExecutionTime';
import TaskCancelButton from './TaskCancelButton';
import TaskLogsLink from './TaskLogsLink';
-
import { STATUSES } from './../constants';
-
-function renderFilter (task) {
- // if (this.props.options && this.props.options.component) {
- // return null;
- // }
- return <td className="thin nowrap">
- <a onClick={this.handleFilter.bind(this, task)} className="icon-filter icon-half-transparent spacer-left" href="#"
- title={`Show only "${task.componentName}" tasks`} data-toggle="tooltip"/>
- </td>;
-}
-
-export default function Task ({ task, index, tasks, onCancelTask, onFilterTask }) {
+export default function Task ({ task, index, tasks, component, onCancelTask, onFilterTask }) {
function handleFilterTask (task, e) {
e.preventDefault();
onFilterTask(task);
@@ -68,12 +56,14 @@ export default function Task ({ task, index, tasks, onCancelTask, onFilterTask }
</td>
<td className="thin nowrap">
- <a
- onClick={handleFilterTask.bind(this, task)}
- className="icon-filter icon-half-transparent spacer-left"
- href="#"
- title={`Show only "${task.componentName}" tasks`}
- data-toggle="tooltip"/>
+ {!component && (
+ <a
+ onClick={handleFilterTask.bind(this, task)}
+ className="icon-filter icon-half-transparent spacer-left"
+ href="#"
+ title={`Show only "${task.componentName}" tasks`}
+ data-toggle="tooltip"/>
+ )}
</td>
</tr>
);
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/search.js b/server/sonar-web/src/main/js/apps/background-tasks/components/search.js
index 349b62ad9c3..507cae227ea 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/search.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/search.js
@@ -39,17 +39,23 @@ export default React.createClass({
},
renderSearchBox() {
- if (this.props.options && this.props.options.component) {
+ if (this.props.component) {
// do not render search form on the project-level page
return null;
}
return (
- <input onChange={this.onSearch}
- value={this.props.query}
- ref="searchInput"
- className="input-large"
- type="search"
- placeholder="Search"/>
+ <li>
+ <h6 className="bt-search-form-label">
+ Component
+ </h6>
+
+ <input onChange={this.onSearch}
+ value={this.props.query}
+ ref="searchInput"
+ className="js-search input-large"
+ type="search"
+ placeholder="Search"/>
+ </li>
);
},
@@ -97,12 +103,9 @@ export default React.createClass({
value={this.props.date}
onChange={this.props.onDateChange}/>
</li>
- <li>
- <h6 className="bt-search-form-label">
- Component
- </h6>
- {this.renderSearchBox()}
- </li>
+
+ {this.renderSearchBox()}
+
<li className="bt-search-form-right">
<button
ref="reloadButton"
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/tasks.js b/server/sonar-web/src/main/js/apps/background-tasks/components/tasks.js
index 85b29bd53a1..6d3b225eb87 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/tasks.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/tasks.js
@@ -22,7 +22,7 @@ import React from 'react';
import Task from './Task';
import { translate } from '../../../helpers/l10n';
-export default function Tasks ({ tasks, onCancelTask, onFilterTask }) {
+export default function Tasks ({ tasks, component, onCancelTask, onFilterTask }) {
return (
<table className="data zebra zebra-hover background-tasks">
<thead>
@@ -44,6 +44,7 @@ export default function Tasks ({ tasks, onCancelTask, onFilterTask }) {
task={task}
index={index}
tasks={tasks}
+ component={component}
onCancelTask={onCancelTask}
onFilterTask={onFilterTask}/>
))}
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/containers/BackgroundTasksAppContainer.js b/server/sonar-web/src/main/js/apps/background-tasks/containers/BackgroundTasksAppContainer.js
index 75496136964..88859c23ab3 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/containers/BackgroundTasksAppContainer.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/containers/BackgroundTasksAppContainer.js
@@ -28,7 +28,7 @@ function mapStateToProps () {
function mapDispatchToProps (dispatch) {
return {
- initApp: () => dispatch(initApp())
+ initApp: (component) => dispatch(initApp(component))
};
}
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/containers/SearchContainer.js b/server/sonar-web/src/main/js/apps/background-tasks/containers/SearchContainer.js
index ccae8470dd2..d00631618bd 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/containers/SearchContainer.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/containers/SearchContainer.js
@@ -30,7 +30,8 @@ function mapStateToProps (state) {
date: state.date,
query: state.query,
taskType: state.taskType,
- types: state.types
+ types: state.types,
+ component: state.component
};
}
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/containers/TasksContainer.js b/server/sonar-web/src/main/js/apps/background-tasks/containers/TasksContainer.js
index 0fc2989b98c..fe962bc652c 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/containers/TasksContainer.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/containers/TasksContainer.js
@@ -25,7 +25,8 @@ import { cancelTask, filterTasks } from '../store/actions';
function mapStateToProps (state) {
return {
fetching: state.fetching,
- tasks: state.tasks
+ tasks: state.tasks,
+ component: state.component
};
}
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/store/actions.js b/server/sonar-web/src/main/js/apps/background-tasks/store/actions.js
index 511af5cdb29..6dcd93afa4d 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/store/actions.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/store/actions.js
@@ -33,9 +33,10 @@ export const CANCEL_ALL_PENDING = 'CANCEL_ALL_PENDING';
export const CANCEL_TASK = 'CANCEL_TASK';
export const FINISH_CANCEL_TASK = 'FINISH_CANCEL_TASK';
-export function init (types) {
+export function init (component, types) {
return {
type: INIT,
+ component,
types
};
}
@@ -138,10 +139,16 @@ function getInProgressDuration (tasks) {
}
function fetchTasks (filters) {
- return dispatch => {
+ return (dispatch, getState) => {
+ const { component } = getState();
const parameters = mapFiltersToParameters(filters);
+
parameters.ps = PAGE_SIZE;
+ if (component) {
+ parameters.componentId = component.id;
+ }
+
dispatch(requestTasks(filters));
return Promise.all([
@@ -200,10 +207,10 @@ export function cancelTask (task) {
};
}
-export function initApp () {
+export function initApp (component) {
return dispatch => {
getTypes().then(types => {
- dispatch(init(types));
+ dispatch(init(component, types));
dispatch(filterTasks());
});
};
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/store/reducers.js b/server/sonar-web/src/main/js/apps/background-tasks/store/reducers.js
index 5c00567011d..3774f5aebda 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/store/reducers.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/store/reducers.js
@@ -53,6 +53,7 @@ export default function (state = initialState, action) {
case INIT:
return {
...state,
+ component: action.component,
types: action.types
};
case REQUEST_TASKS:
diff --git a/server/sonar-web/tests/apps/background-tasks-test.js b/server/sonar-web/tests/apps/background-tasks-test.js
index 0d70aa18311..f72e3b41e69 100644
--- a/server/sonar-web/tests/apps/background-tasks-test.js
+++ b/server/sonar-web/tests/apps/background-tasks-test.js
@@ -7,8 +7,8 @@ import Header from '../../src/main/js/apps/background-tasks/components/Header';
import Stats from '../../src/main/js/apps/background-tasks/components/Stats';
import Search from '../../src/main/js/apps/background-tasks/components/Search';
import Tasks from '../../src/main/js/apps/background-tasks/components/Tasks';
-import {STATUSES, CURRENTS, DEBOUNCE_DELAY} from '../../src/main/js/apps/background-tasks/constants';
-import {formatDuration} from '../../src/main/js/apps/background-tasks/helpers';
+import { STATUSES, CURRENTS, DEBOUNCE_DELAY } from '../../src/main/js/apps/background-tasks/constants';
+import { formatDuration } from '../../src/main/js/apps/background-tasks/helpers';
let chai = require('chai');
let expect = chai.expect;
@@ -28,44 +28,37 @@ describe('Background Tasks', function () {
});
});
- describe('Header', () => {
- it('should render', () => {
- let component = TestUtils.renderIntoDocument(<Header/>),
- header = TestUtils.scryRenderedDOMComponentsWithTag(component, 'header');
- expect(header.length).to.equal(1);
- });
- });
-
describe('Search', () => {
it('should render search form', () => {
- let spy = sinon.spy();
- let component = TestUtils.renderIntoDocument(<Search options={{}}
- onStatusChange={spy}
- onCurrentsChange={spy}
- onDateChange={spy}/>),
- searchBox = TestUtils.scryRenderedDOMComponentsWithClass(component, 'search-box');
+ let component = TestUtils.renderIntoDocument(
+ <Search
+ types={[]}
+ date={{}}/>
+ ),
+ searchBox = TestUtils.scryRenderedDOMComponentsWithClass(component, 'js-search');
expect(searchBox).to.have.length(1);
});
it('should not render search form', () => {
- let spy = sinon.spy();
- let component = TestUtils.renderIntoDocument(<Search options={{ component: { id: 'ABCD' } }}
- onStatusChange={spy}
- onCurrentsChange={spy}
- onDateChange={spy}/>),
- searchBox = TestUtils.scryRenderedDOMComponentsWithClass(component, 'search-box');
+ let component = TestUtils.renderIntoDocument(
+ <Search
+ options={{ component: { id: 'ABCD' } }}
+ types={[]}
+ date={{}}/>
+ ),
+ searchBox = TestUtils.scryRenderedDOMComponentsWithClass(component, 'js-search');
expect(searchBox).to.be.empty;
});
it('should search', (done) => {
- let spy = sinon.spy(),
- searchSpy = sinon.spy();
- let component = TestUtils.renderIntoDocument(<Search options={{}}
- onStatusChange={spy}
- onCurrentsChange={spy}
- onDateChange={spy}
- onSearch={searchSpy}/>);
- let searchInput = ReactDOM.findDOMNode(TestUtils.findRenderedDOMComponentWithClass(component, 'search-box-input'));
+ let searchSpy = sinon.spy();
+ let component = TestUtils.renderIntoDocument(
+ <Search
+ types={[]}
+ date={{}}
+ onSearch={searchSpy}/>);
+ let searchInput = ReactDOM.findDOMNode(
+ TestUtils.findRenderedDOMComponentWithClass(component, 'js-search'));
searchInput.value = 'some search query';
TestUtils.Simulate.change(searchInput);
setTimeout(() => {
@@ -75,13 +68,13 @@ describe('Background Tasks', function () {
});
it('should reload', () => {
- let spy = sinon.spy(),
- reloadSpy = sinon.spy();
- let component = TestUtils.renderIntoDocument(<Search options={{}}
- onStatusChange={spy}
- onCurrentsChange={spy}
- onDateChange={spy}
- refresh={reloadSpy}/>);
+ let reloadSpy = sinon.spy();
+ let component = TestUtils.renderIntoDocument(
+ <Search
+ types={[]}
+ date={{}}
+ onRefresh={reloadSpy}/>
+ );
let reloadButton = component.refs.reloadButton;
expect(reloadSpy).to.not.have.been.called;
TestUtils.Simulate.click(reloadButton);
@@ -117,7 +110,7 @@ describe('Background Tasks', function () {
it('should trigger cancelling pending', () => {
let spy = sinon.spy();
- let result = TestUtils.renderIntoDocument(<Stats pendingCount="5" cancelPending={spy}/>),
+ let result = TestUtils.renderIntoDocument(<Stats pendingCount="5" onCancelAllPending={spy}/>),
cancelPending = result.refs.cancelPending;
expect(spy).to.not.have.been.called;
TestUtils.Simulate.click(cancelPending);
@@ -127,32 +120,32 @@ describe('Background Tasks', function () {
describe('Failures', () => {
it('should show zero failures', () => {
- let result = TestUtils.renderIntoDocument(<Stats failuresCount="0"/>),
+ let result = TestUtils.renderIntoDocument(<Stats failingCount="0"/>),
failureCounter = result.refs.failureCount;
expect(failureCounter.textContent).to.contain('0');
});
it('should show 5 failures', () => {
- let result = TestUtils.renderIntoDocument(<Stats failuresCount="5"/>),
+ let result = TestUtils.renderIntoDocument(<Stats failingCount="5"/>),
failureCounter = result.refs.failureCount;
expect(failureCounter.textContent).to.contain('5');
});
it('should not show link to failures', () => {
- let result = TestUtils.renderIntoDocument(<Stats failuresCount="0"/>),
+ let result = TestUtils.renderIntoDocument(<Stats failingCount="0"/>),
failureCounter = result.refs.failureCount;
expect(failureCounter.tagName.toLowerCase()).to.not.equal('a');
});
it('should show link to failures', () => {
- let result = TestUtils.renderIntoDocument(<Stats failuresCount="5"/>),
+ let result = TestUtils.renderIntoDocument(<Stats failingCount="5"/>),
failureCounter = result.refs.failureCount;
expect(failureCounter.tagName.toLowerCase()).to.equal('a');
});
it('should trigger filtering failures', () => {
let spy = sinon.spy();
- let result = TestUtils.renderIntoDocument(<Stats failuresCount="5" showFailures={spy}/>),
+ let result = TestUtils.renderIntoDocument(<Stats failingCount="5" onShowFailing={spy}/>),
failureCounter = result.refs.failureCount;
expect(spy).to.not.have.been.called;
TestUtils.Simulate.click(failureCounter);
@@ -181,18 +174,6 @@ describe('Background Tasks', function () {
});
});
- describe('Tasks', () => {
- it('should show list', () => {
- let tasks = [
- { id: 'a' },
- { id: 'b' },
- { id: 'c' }
- ];
- let result = TestUtils.renderIntoDocument(<Tasks tasks={tasks}/>);
- expect(TestUtils.scryRenderedDOMComponentsWithTag(result, 'tr')).to.have.length(3 + /* table header */ 1);
- });
- });
-
describe('Helpers', () => {
describe('#formatDuration()', () => {
it('should format 173ms', () => {