Skip to content
Snippets Groups Projects
Unverified Commit b9f9e6fa authored by Filipa Lacerda's avatar Filipa Lacerda
Browse files

Removes UJS from reset cache button

Uses loading button for better UX
parent 2b8e9add
No related branches found
No related tags found
No related merge requests found
<script>
import LoadingButton from '../../vue_shared/components/loading_button.vue';
export default {
name: 'PipelineNavControls',
components: {
LoadingButton,
},
props: {
newPipelinePath: {
type: String,
Loading
Loading
@@ -19,6 +24,17 @@
required: false,
default: null,
},
isResetCacheButtonLoading: {
type: Boolean,
required: false,
default: false,
},
},
methods: {
onClickResetCache() {
this.$emit('resetRunnersCache', this.resetCachePath);
},
},
};
</script>
Loading
Loading
@@ -32,14 +48,13 @@
{{ s__('Pipelines|Run Pipeline') }}
</a>
 
<a
<loading-button
v-if="resetCachePath"
data-method="post"
:href="resetCachePath"
@click="onClickResetCache"
:loading="isResetCacheButtonLoading"
class="btn btn-default js-clear-cache"
>
{{ s__('Pipelines|Clear Runner Caches') }}
</a>
:label="s__('Pipelines|Clear Runner Caches')"
/>
 
<a
v-if="ciLintPath"
Loading
Loading
<script>
import _ from 'underscore';
import { __, sprintf, s__ } from '../../locale';
import createFlash from '../../flash';
import PipelinesService from '../services/pipelines_service';
import pipelinesMixin from '../mixins/pipelines';
import TablePagination from '../../vue_shared/components/table_pagination.vue';
Loading
Loading
@@ -92,6 +93,7 @@
scope: getParameterByName('scope') || 'all',
page: getParameterByName('page') || '1',
requestData: {},
isResetCacheButtonLoading: false,
};
},
stateMap: {
Loading
Loading
@@ -265,6 +267,23 @@
this.poll.restart({ data: this.requestData });
});
},
handleResetRunnersCache(endpoint) {
this.isResetCacheButtonLoading = true;
this.service.postAction(endpoint)
.then(() => {
this.isResetCacheButtonLoading = false;
createFlash(
s__('Pipelines|Project cache successfully reset.'),
'notice',
);
})
.catch(() => {
this.isResetCacheButtonLoading = false;
createFlash(s__('Pipelines|Something went wrong while cleaning runners cache.'));
});
},
},
};
</script>
Loading
Loading
@@ -301,6 +320,8 @@
:new-pipeline-path="newPipelinePath"
:reset-cache-path="resetCachePath"
:ci-lint-path="ciLintPath"
@resetRunnersCache="handleResetRunnersCache"
:is-reset-cache-button-loading="isResetCacheButtonLoading"
/>
</div>
 
Loading
Loading
Loading
Loading
@@ -51,12 +51,10 @@ export default {
}
});
 
eventHub.$on('refreshPipelines', this.fetchPipelines);
eventHub.$on('postAction', this.postAction);
},
beforeDestroy() {
eventHub.$off('refreshPipelines');
eventHub.$on('postAction', this.postAction);
eventHub.$off('postAction', this.postAction);
},
destroyed() {
this.poll.stop();
Loading
Loading
@@ -92,7 +90,7 @@ export default {
},
postAction(endpoint) {
this.service.postAction(endpoint)
.then(() => eventHub.$emit('refreshPipelines'))
.then(() => this.fetchPipelines())
.catch(() => Flash(__('An error occurred while making the request.')));
},
},
Loading
Loading
Loading
Loading
@@ -557,7 +557,7 @@ describe 'Pipelines', :js do
end
 
it 'has a clear caches button' do
expect(page).to have_link 'Clear Runner Caches'
expect(page).to have_button 'Clear Runner Caches'
end
 
describe 'user clicks the button' do
Loading
Loading
@@ -567,14 +567,16 @@ describe 'Pipelines', :js do
end
 
it 'increments jobs_cache_index' do
click_link 'Clear Runner Caches'
click_button 'Clear Runner Caches'
wait_for_requests
expect(page.find('.flash-notice')).to have_content 'Project cache successfully reset.'
end
end
 
context 'when project does not have jobs_cache_index' do
it 'sets jobs_cache_index to 1' do
click_link 'Clear Runner Caches'
click_button 'Clear Runner Caches'
wait_for_requests
expect(page.find('.flash-notice')).to have_content 'Project cache successfully reset.'
end
end
Loading
Loading
Loading
Loading
@@ -39,19 +39,6 @@ describe('Pipelines Nav Controls', () => {
expect(component.$el.querySelector('.js-run-pipeline')).toEqual(null);
});
 
it('should render link for resetting runner caches', () => {
const mockData = {
newPipelinePath: 'foo',
ciLintPath: 'foo',
resetCachePath: 'foo',
};
component = mountComponent(NavControlsComponent, mockData);
expect(component.$el.querySelector('.js-clear-cache').textContent.trim()).toContain('Clear Runner Caches');
expect(component.$el.querySelector('.js-clear-cache').getAttribute('href')).toEqual(mockData.resetCachePath);
});
it('should render link for CI lint', () => {
const mockData = {
newPipelinePath: 'foo',
Loading
Loading
@@ -65,4 +52,28 @@ describe('Pipelines Nav Controls', () => {
expect(component.$el.querySelector('.js-ci-lint').textContent.trim()).toContain('CI Lint');
expect(component.$el.querySelector('.js-ci-lint').getAttribute('href')).toEqual(mockData.ciLintPath);
});
describe('Reset Runners Cache', () => {
beforeEach(() => {
const mockData = {
newPipelinePath: 'foo',
ciLintPath: 'foo',
resetCachePath: 'foo',
};
component = mountComponent(NavControlsComponent, mockData);
});
it('should render button for resetting runner caches', () => {
expect(component.$el.querySelector('.js-clear-cache').textContent.trim()).toContain('Clear Runner Caches');
});
it('should emit postAction event when reset runner cache button is clicked', () => {
spyOn(component, '$on');
component.$el.querySelector('.js-clear-cache').click();
expect(component.$on).toHaveBeenCalledWith('postAction', 'foo');
});
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment