Commit e1fd7d0d authored by Miguel Rincon's avatar Miguel Rincon

Respond to frontend review

- Receive selector instead of element in load_branches.js
- Use `data-testid` to find mini pipeline instead of class.
parent d96abce6
...@@ -36,7 +36,7 @@ export default { ...@@ -36,7 +36,7 @@ export default {
}; };
</script> </script>
<template> <template>
<div data-testid="widget-mini-pipeline-graph"> <div data-testid="pipeline-mini-graph">
<div <div
v-for="stage in stages" v-for="stage in stages"
:key="stage.name" :key="stage.name"
......
...@@ -3,11 +3,9 @@ import { initCommitPipelineMiniGraph } from './init_commit_pipeline_mini_graph'; ...@@ -3,11 +3,9 @@ import { initCommitPipelineMiniGraph } from './init_commit_pipeline_mini_graph';
import { initDetailsButton } from './init_details_button'; import { initDetailsButton } from './init_details_button';
import { loadBranches } from './load_branches'; import { loadBranches } from './load_branches';
export const initCommitBoxInfo = (containerSelector = '.js-commit-box-info') => { export const initCommitBoxInfo = () => {
const containerEl = document.querySelector(containerSelector);
// Display commit related branches // Display commit related branches
loadBranches(containerEl); loadBranches();
// Related merge requests to this commit // Related merge requests to this commit
fetchCommitMergeRequests(); fetchCommitMergeRequests();
......
...@@ -2,7 +2,8 @@ import axios from 'axios'; ...@@ -2,7 +2,8 @@ import axios from 'axios';
import { sanitize } from '~/lib/dompurify'; import { sanitize } from '~/lib/dompurify';
import { __ } from '~/locale'; import { __ } from '~/locale';
export const loadBranches = (containerEl) => { export const loadBranches = (containerSelector = '.js-commit-box-info') => {
const containerEl = document.querySelector(containerSelector);
if (!containerEl) { if (!containerEl) {
return; return;
} }
......
...@@ -23,7 +23,7 @@ RSpec.describe 'Merge request < User sees mini pipeline graph', :js do ...@@ -23,7 +23,7 @@ RSpec.describe 'Merge request < User sees mini pipeline graph', :js do
end end
it 'displays a mini pipeline graph' do it 'displays a mini pipeline graph' do
expect(page).to have_selector('.mr-widget-pipeline-graph') expect(page).to have_selector('[data-testid="pipeline-mini-graph"]')
end end
context 'as json' do context 'as json' do
......
...@@ -26,7 +26,7 @@ RSpec.describe 'Mini Pipeline Graph in Commit View', :js do ...@@ -26,7 +26,7 @@ RSpec.describe 'Mini Pipeline Graph in Commit View', :js do
end end
it 'displays a mini pipeline graph' do it 'displays a mini pipeline graph' do
expect(page).to have_selector('.mr-widget-pipeline-graph') expect(page).to have_selector('[data-testid="pipeline-mini-graph"]')
first('.mini-pipeline-graph-dropdown-toggle').click first('.mini-pipeline-graph-dropdown-toggle').click
...@@ -47,7 +47,7 @@ RSpec.describe 'Mini Pipeline Graph in Commit View', :js do ...@@ -47,7 +47,7 @@ RSpec.describe 'Mini Pipeline Graph in Commit View', :js do
end end
it 'does not display a mini pipeline graph' do it 'does not display a mini pipeline graph' do
expect(page).not_to have_selector('.mr-widget-pipeline-graph') expect(page).not_to have_selector('[data-testid="pipeline-mini-graph"]')
end end
end end
end end
...@@ -534,7 +534,7 @@ RSpec.describe 'Pipelines', :js do ...@@ -534,7 +534,7 @@ RSpec.describe 'Pipelines', :js do
end end
it 'renders a mini pipeline graph' do it 'renders a mini pipeline graph' do
expect(page).to have_selector('[data-testid="widget-mini-pipeline-graph"]') expect(page).to have_selector('[data-testid="pipeline-mini-graph"]')
expect(page).to have_selector(dropdown_selector) expect(page).to have_selector(dropdown_selector)
end end
......
import axios from 'axios'; import axios from 'axios';
import MockAdapter from 'axios-mock-adapter'; import MockAdapter from 'axios-mock-adapter';
import { setHTMLFixture } from 'helpers/fixtures';
import waitForPromises from 'helpers/wait_for_promises'; import waitForPromises from 'helpers/wait_for_promises';
import { loadBranches } from '~/projects/commit_box/info/load_branches'; import { loadBranches } from '~/projects/commit_box/info/load_branches';
...@@ -9,32 +10,38 @@ const mockBranchesRes = ...@@ -9,32 +10,38 @@ const mockBranchesRes =
describe('~/projects/commit_box/info/load_branches', () => { describe('~/projects/commit_box/info/load_branches', () => {
let mock; let mock;
let el;
const getElInnerHtml = () => document.querySelector('.js-commit-box-info').innerHTML;
beforeEach(() => { beforeEach(() => {
setHTMLFixture(`
<div class="js-commit-box-info" data-commit-path="${mockCommitPath}">
<div class="commit-info branches">
<span class="spinner"/>
</div>
</div>`);
mock = new MockAdapter(axios); mock = new MockAdapter(axios);
mock.onGet(mockCommitPath).reply(200, mockBranchesRes); mock.onGet(mockCommitPath).reply(200, mockBranchesRes);
el = document.createElement('div');
el.dataset.commitPath = mockCommitPath;
el.innerHTML = '<div class="commit-info branches"><span class="spinner"/></div>';
}); });
it('loads and renders branches info', async () => { it('loads and renders branches info', async () => {
loadBranches(el); loadBranches();
await waitForPromises(); await waitForPromises();
expect(el.innerHTML).toBe(`<div class="commit-info branches">${mockBranchesRes}</div>`); expect(getElInnerHtml()).toMatchInterpolatedText(
`<div class="commit-info branches">${mockBranchesRes}</div>`,
);
}); });
it('does not load when no container is provided', async () => { it('does not load when no container is provided', async () => {
loadBranches(null); loadBranches('.js-another-class');
await waitForPromises(); await waitForPromises();
expect(mock.history.get).toHaveLength(0); expect(mock.history.get).toHaveLength(0);
}); });
describe('when braches request returns unsafe content', () => { describe('when branches request returns unsafe content', () => {
beforeEach(() => { beforeEach(() => {
mock mock
.onGet(mockCommitPath) .onGet(mockCommitPath)
...@@ -42,25 +49,25 @@ describe('~/projects/commit_box/info/load_branches', () => { ...@@ -42,25 +49,25 @@ describe('~/projects/commit_box/info/load_branches', () => {
}); });
it('displays sanitized html', async () => { it('displays sanitized html', async () => {
loadBranches(el); loadBranches();
await waitForPromises(); await waitForPromises();
expect(el.innerHTML).toBe( expect(getElInnerHtml()).toMatchInterpolatedText(
'<div class="commit-info branches"><a href="/-/commits/master">master</a></div>', '<div class="commit-info branches"><a href="/-/commits/master">master</a></div>',
); );
}); });
}); });
describe('when braches request fails', () => { describe('when branches request fails', () => {
beforeEach(() => { beforeEach(() => {
mock.onGet(mockCommitPath).reply(500, 'Error!'); mock.onGet(mockCommitPath).reply(500, 'Error!');
}); });
it('attempts to load and renders an error', async () => { it('attempts to load and renders an error', async () => {
loadBranches(el); loadBranches();
await waitForPromises(); await waitForPromises();
expect(el.innerHTML).toBe( expect(getElInnerHtml()).toMatchInterpolatedText(
'<div class="commit-info branches">Failed to load branches. Please try again.</div>', '<div class="commit-info branches">Failed to load branches. Please try again.</div>',
); );
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment