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:
Diffstat (limited to 'spec/frontend/monitoring/components/embeds/metric_embed_spec.js')
-rw-r--r--spec/frontend/monitoring/components/embeds/metric_embed_spec.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/spec/frontend/monitoring/components/embeds/metric_embed_spec.js b/spec/frontend/monitoring/components/embeds/metric_embed_spec.js
new file mode 100644
index 00000000000..d0fe22cefec
--- /dev/null
+++ b/spec/frontend/monitoring/components/embeds/metric_embed_spec.js
@@ -0,0 +1,102 @@
+import { createLocalVue, shallowMount } from '@vue/test-utils';
+import Vuex from 'vuex';
+import PanelType from 'ee_else_ce/monitoring/components/panel_type.vue';
+import { TEST_HOST } from 'helpers/test_constants';
+import MetricEmbed from '~/monitoring/components/embeds/metric_embed.vue';
+import { groups, initialState, metricsData, metricsWithData } from './mock_data';
+
+const localVue = createLocalVue();
+localVue.use(Vuex);
+
+describe('MetricEmbed', () => {
+ let wrapper;
+ let store;
+ let actions;
+ let metricsWithDataGetter;
+
+ function mountComponent() {
+ wrapper = shallowMount(MetricEmbed, {
+ localVue,
+ store,
+ propsData: {
+ dashboardUrl: TEST_HOST,
+ },
+ });
+ }
+
+ beforeEach(() => {
+ actions = {
+ setFeatureFlags: jest.fn(),
+ setShowErrorBanner: jest.fn(),
+ setEndpoints: jest.fn(),
+ setTimeRange: jest.fn(),
+ fetchDashboard: jest.fn(),
+ };
+
+ metricsWithDataGetter = jest.fn();
+
+ store = new Vuex.Store({
+ modules: {
+ monitoringDashboard: {
+ namespaced: true,
+ actions,
+ getters: {
+ metricsWithData: () => metricsWithDataGetter,
+ },
+ state: initialState,
+ },
+ },
+ });
+ });
+
+ afterEach(() => {
+ metricsWithDataGetter.mockClear();
+ if (wrapper) {
+ wrapper.destroy();
+ }
+ });
+
+ describe('no metrics are available yet', () => {
+ beforeEach(() => {
+ mountComponent();
+ });
+
+ it('shows an empty state when no metrics are present', () => {
+ expect(wrapper.find('.metrics-embed').exists()).toBe(true);
+ expect(wrapper.find(PanelType).exists()).toBe(false);
+ });
+ });
+
+ describe('metrics are available', () => {
+ beforeEach(() => {
+ store.state.monitoringDashboard.dashboard.panelGroups = groups;
+ store.state.monitoringDashboard.dashboard.panelGroups[0].panels = metricsData;
+
+ metricsWithDataGetter.mockReturnValue(metricsWithData);
+
+ mountComponent();
+ });
+
+ it('calls actions to fetch data', () => {
+ const expectedTimeRangePayload = expect.objectContaining({
+ start: expect.any(String),
+ end: expect.any(String),
+ });
+
+ expect(actions.setTimeRange).toHaveBeenCalledTimes(1);
+ expect(actions.setTimeRange.mock.calls[0][1]).toEqual(expectedTimeRangePayload);
+
+ expect(actions.fetchDashboard).toHaveBeenCalled();
+ });
+
+ it('shows a chart when metrics are present', () => {
+ expect(wrapper.find('.metrics-embed').exists()).toBe(true);
+ expect(wrapper.find(PanelType).exists()).toBe(true);
+ expect(wrapper.findAll(PanelType).length).toBe(2);
+ });
+
+ it('includes groupId with dashboardUrl', () => {
+ expect(wrapper.find(PanelType).props('groupId')).toBe(TEST_HOST);
+ });
+ });
+});