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/jobs/components/job/empty_state_spec.js')
-rw-r--r--spec/frontend/jobs/components/job/empty_state_spec.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/spec/frontend/jobs/components/job/empty_state_spec.js b/spec/frontend/jobs/components/job/empty_state_spec.js
new file mode 100644
index 00000000000..299b607ad78
--- /dev/null
+++ b/spec/frontend/jobs/components/job/empty_state_spec.js
@@ -0,0 +1,140 @@
+import { mount } from '@vue/test-utils';
+import EmptyState from '~/jobs/components/job/empty_state.vue';
+
+describe('Empty State', () => {
+ let wrapper;
+
+ const defaultProps = {
+ illustrationPath: 'illustrations/pending_job_empty.svg',
+ illustrationSizeClass: 'svg-430',
+ title: 'This job has not started yet',
+ playable: false,
+ };
+
+ const createWrapper = (props) => {
+ wrapper = mount(EmptyState, {
+ propsData: {
+ ...defaultProps,
+ ...props,
+ },
+ });
+ };
+
+ const content = 'This job is in pending state and is waiting to be picked by a runner';
+
+ const findEmptyStateImage = () => wrapper.find('img');
+ const findTitle = () => wrapper.find('[data-testid="job-empty-state-title"]');
+ const findContent = () => wrapper.find('[data-testid="job-empty-state-content"]');
+ const findAction = () => wrapper.find('[data-testid="job-empty-state-action"]');
+ const findManualVarsForm = () => wrapper.find('[data-testid="manual-vars-form"]');
+
+ afterEach(() => {
+ if (wrapper?.destroy) {
+ wrapper.destroy();
+ wrapper = null;
+ }
+ });
+
+ describe('renders image and title', () => {
+ beforeEach(() => {
+ createWrapper();
+ });
+
+ it('renders empty state image', () => {
+ expect(findEmptyStateImage().exists()).toBe(true);
+ });
+
+ it('renders provided title', () => {
+ expect(findTitle().text().trim()).toBe(defaultProps.title);
+ });
+ });
+
+ describe('with content', () => {
+ beforeEach(() => {
+ createWrapper({ content });
+ });
+
+ it('renders content', () => {
+ expect(findContent().text().trim()).toBe(content);
+ });
+ });
+
+ describe('without content', () => {
+ beforeEach(() => {
+ createWrapper();
+ });
+
+ it('does not render content', () => {
+ expect(findContent().exists()).toBe(false);
+ });
+ });
+
+ describe('with action', () => {
+ beforeEach(() => {
+ createWrapper({
+ action: {
+ path: 'runner',
+ button_title: 'Check runner',
+ method: 'post',
+ },
+ });
+ });
+
+ it('renders action', () => {
+ expect(findAction().attributes('href')).toBe('runner');
+ });
+ });
+
+ describe('without action', () => {
+ beforeEach(() => {
+ createWrapper({
+ action: null,
+ });
+ });
+
+ it('does not render action', () => {
+ expect(findAction().exists()).toBe(false);
+ });
+
+ it('does not render manual variables form', () => {
+ expect(findManualVarsForm().exists()).toBe(false);
+ });
+ });
+
+ describe('with playable action and not scheduled job', () => {
+ beforeEach(() => {
+ createWrapper({
+ content,
+ playable: true,
+ scheduled: false,
+ action: {
+ path: 'runner',
+ button_title: 'Check runner',
+ method: 'post',
+ },
+ });
+ });
+
+ it('renders manual variables form', () => {
+ expect(findManualVarsForm().exists()).toBe(true);
+ });
+
+ it('does not render the empty state action', () => {
+ expect(findAction().exists()).toBe(false);
+ });
+ });
+
+ describe('with playable action and scheduled job', () => {
+ beforeEach(() => {
+ createWrapper({
+ playable: true,
+ scheduled: true,
+ content,
+ });
+ });
+
+ it('does not render manual variables form', () => {
+ expect(findManualVarsForm().exists()).toBe(false);
+ });
+ });
+});