import Vue from 'vue'; import { SUCCESS_SVG } from '~/ci_status_icons'; import Stage from '~/pipelines/components/stage'; function minify(string) { return string.replace(/\s/g, ''); } describe('Pipelines Stage', () => { describe('data', () => { let stageReturnValue; beforeEach(() => { stageReturnValue = Stage.data(); }); it('should return object with .builds and .spinner', () => { expect(stageReturnValue).toEqual({ builds: '', spinner: '', }); }); }); describe('computed', () => { describe('svgHTML', function () { let stage; let svgHTML; beforeEach(() => { stage = { stage: { status: { icon: 'icon_status_success' } } }; svgHTML = Stage.computed.svgHTML.call(stage); }); it("should return the correct icon for the stage's status", () => { expect(svgHTML).toBe(SUCCESS_SVG); }); }); }); describe('when mounted', () => { let StageComponent; let renderedComponent; let stage; beforeEach(() => { stage = { status: { icon: 'icon_status_success' } }; StageComponent = Vue.extend(Stage); renderedComponent = new StageComponent({ propsData: { stage, }, }).$mount(); }); it('should render the correct status svg', () => { const minifiedComponent = minify(renderedComponent.$el.outerHTML); const expectedSVG = minify(SUCCESS_SVG); expect(minifiedComponent).toContain(expectedSVG); }); }); describe('when request fails', () => { it('closes dropdown', () => { spyOn($, 'ajax').and.callFake(options => options.error()); const StageComponent = Vue.extend(Stage); const component = new StageComponent({ propsData: { stage: { status: { icon: 'foo' } } }, }).$mount(); expect( component.$el.classList.contains('open'), ).toEqual(false); }); }); });