Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-12-05 21:10:06 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-12-05 21:10:06 +0300
commitc8419b0227e069a7403f41589f1d0ef690e762f1 (patch)
tree7009382402811f9e32b448f68f7f90912237aa03 /spec/frontend
parent6659634b2bdc3ba362574541985c6852ad1574a4 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend')
-rw-r--r--spec/frontend/__helpers__/mock_observability_client.js1
-rw-r--r--spec/frontend/groups_projects/components/more_actions_dropdown_spec.js173
-rw-r--r--spec/frontend/observability/client_spec.js38
3 files changed, 212 insertions, 0 deletions
diff --git a/spec/frontend/__helpers__/mock_observability_client.js b/spec/frontend/__helpers__/mock_observability_client.js
index 82425aa2842..a65b5233b73 100644
--- a/spec/frontend/__helpers__/mock_observability_client.js
+++ b/spec/frontend/__helpers__/mock_observability_client.js
@@ -7,6 +7,7 @@ export function createMockClient() {
servicesUrl: 'services-url',
operationsUrl: 'operations-url',
metricsUrl: 'metrics-url',
+ metricsSearchUrl: 'metrics-search-url',
});
Object.getOwnPropertyNames(mockClient)
diff --git a/spec/frontend/groups_projects/components/more_actions_dropdown_spec.js b/spec/frontend/groups_projects/components/more_actions_dropdown_spec.js
new file mode 100644
index 00000000000..1bcff8a44be
--- /dev/null
+++ b/spec/frontend/groups_projects/components/more_actions_dropdown_spec.js
@@ -0,0 +1,173 @@
+import { GlDisclosureDropdownItem, GlDisclosureDropdown } from '@gitlab/ui';
+import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import moreActionsDropdown from '~/groups_projects/components/more_actions_dropdown.vue';
+
+describe('moreActionsDropdown', () => {
+ let wrapper;
+
+ const createComponent = ({ provideData = {}, propsData = {} } = {}) => {
+ wrapper = shallowMountExtended(moreActionsDropdown, {
+ provide: {
+ isGroup: false,
+ id: 1,
+ leavePath: '',
+ leaveConfirmMessage: '',
+ withdrawPath: '',
+ withdrawConfirmMessage: '',
+ requestAccessPath: '',
+ ...provideData,
+ },
+ propsData,
+ stubs: {
+ GlDisclosureDropdownItem,
+ },
+ });
+ };
+
+ const findDropdown = () => wrapper.findComponent(GlDisclosureDropdown);
+ const showDropdown = () => {
+ findDropdown().vm.$emit('show');
+ };
+
+ describe('copy id', () => {
+ describe('project namespace type', () => {
+ beforeEach(async () => {
+ createComponent({
+ provideData: {
+ id: 22,
+ },
+ });
+ await showDropdown();
+ });
+
+ it('has correct test id `copy-project-id`', () => {
+ expect(wrapper.findByTestId('copy-project-id').exists()).toBe(true);
+ expect(wrapper.findByTestId('copy-group-id').exists()).toBe(false);
+ });
+
+ it('renders copy project id with correct id', () => {
+ expect(wrapper.findByTestId('copy-project-id').text()).toBe('Copy project ID: 22');
+ });
+ });
+
+ describe('group namespace type', () => {
+ beforeEach(async () => {
+ createComponent({
+ provideData: {
+ isGroup: true,
+ id: 11,
+ },
+ });
+ await showDropdown();
+ });
+
+ it('has correct test id `copy-group-id`', () => {
+ expect(wrapper.findByTestId('copy-project-id').exists()).toBe(false);
+ expect(wrapper.findByTestId('copy-group-id').exists()).toBe(true);
+ });
+
+ it('renders copy group id with correct id', () => {
+ expect(wrapper.findByTestId('copy-group-id').text()).toBe('Copy group ID: 11');
+ });
+ });
+ });
+
+ describe('request access', () => {
+ it('does not render request access link', async () => {
+ createComponent();
+ await showDropdown();
+
+ expect(wrapper.findByTestId('request-access-link').exists()).toBe(false);
+ });
+
+ it('renders request access link', async () => {
+ createComponent({
+ provideData: {
+ requestAccessPath: 'http://request.path/path',
+ },
+ });
+ await showDropdown();
+
+ expect(wrapper.findByTestId('request-access-link').text()).toBe('Request Access');
+ expect(wrapper.findByTestId('request-access-link').attributes('href')).toBe(
+ 'http://request.path/path',
+ );
+ });
+ });
+
+ describe('withdraw access', () => {
+ it('does not render withdraw access link', async () => {
+ createComponent();
+ await showDropdown();
+
+ expect(wrapper.findByTestId('withdraw-access-link').exists()).toBe(false);
+ });
+
+ it('renders withdraw access link', async () => {
+ createComponent({
+ provideData: {
+ withdrawPath: 'http://withdraw.path/path',
+ },
+ });
+ await showDropdown();
+
+ expect(wrapper.findByTestId('withdraw-access-link').text()).toBe('Withdraw Access Request');
+ expect(wrapper.findByTestId('withdraw-access-link').attributes('href')).toBe(
+ 'http://withdraw.path/path',
+ );
+ });
+ });
+
+ describe('leave access', () => {
+ it('does not render leave link', async () => {
+ createComponent();
+ await showDropdown();
+
+ expect(wrapper.findByTestId('leave-project-link').exists()).toBe(false);
+ });
+
+ it('renders leave link', async () => {
+ createComponent({
+ provideData: {
+ leavePath: 'http://leave.path/path',
+ },
+ });
+ await showDropdown();
+
+ expect(wrapper.findByTestId('leave-project-link').exists()).toBe(true);
+ expect(wrapper.findByTestId('leave-project-link').text()).toBe('Leave project');
+ expect(wrapper.findByTestId('leave-project-link').attributes('href')).toBe(
+ 'http://leave.path/path',
+ );
+ });
+
+ describe('when `isGroup` is set to `false`', () => {
+ it('use testid `leave-project-link`', async () => {
+ createComponent({
+ provideData: {
+ leavePath: 'http://leave.path/path',
+ },
+ });
+ await showDropdown();
+
+ expect(wrapper.findByTestId('leave-project-link').exists()).toBe(true);
+ expect(wrapper.findByTestId('leave-group-link').exists()).toBe(false);
+ });
+ });
+
+ describe('when `isGroup` is set to `true`', () => {
+ it('use testid `leave-group-link`', async () => {
+ createComponent({
+ provideData: {
+ isGroup: true,
+ leavePath: 'http://leave.path/path',
+ },
+ });
+ await showDropdown();
+
+ expect(wrapper.findByTestId('leave-project-link').exists()).toBe(false);
+ expect(wrapper.findByTestId('leave-group-link').exists()).toBe(true);
+ });
+ });
+ });
+});
diff --git a/spec/frontend/observability/client_spec.js b/spec/frontend/observability/client_spec.js
index 9b8f100785b..e7b68a2346e 100644
--- a/spec/frontend/observability/client_spec.js
+++ b/spec/frontend/observability/client_spec.js
@@ -18,6 +18,7 @@ describe('buildClient', () => {
const servicesUrl = 'https://example.com/services';
const operationsUrl = 'https://example.com/services/$SERVICE_NAME$/operations';
const metricsUrl = 'https://example.com/metrics';
+ const metricsSearchUrl = 'https://example.com/metrics/search';
const FETCHING_TRACES_ERROR = 'traces are missing/invalid in the response';
const apiConfig = {
@@ -26,6 +27,7 @@ describe('buildClient', () => {
servicesUrl,
operationsUrl,
metricsUrl,
+ metricsSearchUrl,
};
const getQueryParam = () => decodeURIComponent(axios.get.mock.calls[0][1].params.toString());
@@ -531,4 +533,40 @@ describe('buildClient', () => {
expectErrorToBeReported(new Error(FETCHING_METRICS_ERROR));
});
});
+
+ describe('fetchMetric', () => {
+ it('fetches the metric from the API', async () => {
+ const data = { results: [] };
+ axiosMock.onGet(metricsSearchUrl).reply(200, data);
+
+ const result = await client.fetchMetric('name', 'type');
+
+ expect(axios.get).toHaveBeenCalledTimes(1);
+ expect(axios.get).toHaveBeenCalledWith(metricsSearchUrl, {
+ withCredentials: true,
+ params: new URLSearchParams({ mname: 'name', mtype: 'type' }),
+ });
+ expect(result).toEqual(data.results);
+ });
+
+ it('rejects if results is missing from the response', async () => {
+ axiosMock.onGet(metricsSearchUrl).reply(200, {});
+ const e = 'metrics are missing/invalid in the response';
+
+ await expect(client.fetchMetric('name', 'type')).rejects.toThrow(e);
+ expectErrorToBeReported(new Error(e));
+ });
+
+ it('rejects if metric name is missing', async () => {
+ const e = 'fetchMetric() - metric name is required.';
+ await expect(client.fetchMetric()).rejects.toThrow(e);
+ expectErrorToBeReported(new Error(e));
+ });
+
+ it('rejects if metric type is missing', async () => {
+ const e = 'fetchMetric() - metric type is required.';
+ await expect(client.fetchMetric('name')).rejects.toThrow(e);
+ expectErrorToBeReported(new Error(e));
+ });
+ });
});