diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-20 13:18:24 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-20 13:18:24 +0000 |
commit | 0653e08efd039a5905f3fa4f6e9cef9f5d2f799c (patch) | |
tree | 4dcc884cf6d81db44adae4aa99f8ec1233a41f55 /spec/javascripts | |
parent | 744144d28e3e7fddc117924fef88de5d9674fe4c (diff) | |
download | gitlab-ce-0653e08efd039a5905f3fa4f6e9cef9f5d2f799c.tar.gz |
Add latest changes from gitlab-org/gitlab@14-3-stable-eev14.3.0-rc42
Diffstat (limited to 'spec/javascripts')
-rw-r--r-- | spec/javascripts/.eslintrc.yml | 39 | ||||
-rw-r--r-- | spec/javascripts/fixtures/.gitignore | 2 | ||||
-rw-r--r-- | spec/javascripts/fly_out_nav_browser_spec.js | 334 | ||||
-rw-r--r-- | spec/javascripts/lib/utils/browser_spec.js | 69 | ||||
-rw-r--r-- | spec/javascripts/lib/utils/mock_data.js | 1 | ||||
-rw-r--r-- | spec/javascripts/test_bundle.js | 145 | ||||
-rw-r--r-- | spec/javascripts/test_constants.js | 1 |
7 files changed, 0 insertions, 591 deletions
diff --git a/spec/javascripts/.eslintrc.yml b/spec/javascripts/.eslintrc.yml deleted file mode 100644 index b863156b57c..00000000000 --- a/spec/javascripts/.eslintrc.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -env: - jasmine: true -extends: plugin:jasmine/recommended -globals: - appendLoadFixtures: false - appendLoadStyleFixtures: false - appendSetFixtures: false - appendSetStyleFixtures: false - getJSONFixture: false - loadFixtures: false - loadJSONFixtures: false - loadStyleFixtures: false - preloadFixtures: false - preloadStyleFixtures: false - readFixtures: false - sandbox: false - setFixtures: false - setStyleFixtures: false - spyOnDependency: false - spyOnEvent: false - ClassSpecHelper: false -plugins: - - jasmine -rules: - func-names: off - jasmine/no-suite-dupes: - - warn - - branch - jasmine/no-spec-dupes: - - warn - - branch - prefer-arrow-callback: off - import/no-unresolved: - - error - - ignore: - - 'fixtures/blob' - # Temporarily disabled to facilitate an upgrade to eslint-plugin-jasmine - jasmine/prefer-toHaveBeenCalledWith: off diff --git a/spec/javascripts/fixtures/.gitignore b/spec/javascripts/fixtures/.gitignore deleted file mode 100644 index d6b7ef32c84..00000000000 --- a/spec/javascripts/fixtures/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/spec/javascripts/fly_out_nav_browser_spec.js b/spec/javascripts/fly_out_nav_browser_spec.js deleted file mode 100644 index 12ea0e262bc..00000000000 --- a/spec/javascripts/fly_out_nav_browser_spec.js +++ /dev/null @@ -1,334 +0,0 @@ -// this file can't be migrated to jest because it relies on the browser to perform integration tests: -// (specifically getClientBoundingRect and mouse movements) -// see: https://gitlab.com/groups/gitlab-org/-/epics/895#what-if-theres-a-karma-spec-which-is-simply-unmovable-to-jest-ie-it-is-dependent-on-a-running-browser-environment - -import { GlBreakpointInstance } from '@gitlab/ui/dist/utils'; -import { SIDEBAR_COLLAPSED_CLASS } from '~/contextual_sidebar'; -import { - calculateTop, - showSubLevelItems, - canShowSubItems, - canShowActiveSubItems, - mouseEnterTopItems, - mouseLeaveTopItem, - getOpenMenu, - setOpenMenu, - mousePos, - getHideSubItemsInterval, - documentMouseMove, - getHeaderHeight, - setSidebar, - subItemsMouseLeave, -} from '~/fly_out_nav'; - -describe('Fly out sidebar navigation', () => { - let el; - let breakpointSize = 'lg'; - - beforeEach(() => { - el = document.createElement('div'); - el.style.position = 'relative'; - document.body.appendChild(el); - - spyOn(GlBreakpointInstance, 'getBreakpointSize').and.callFake(() => breakpointSize); - - setOpenMenu(null); - }); - - afterEach(() => { - document.body.innerHTML = ''; - breakpointSize = 'lg'; - mousePos.length = 0; - - setSidebar(null); - }); - - describe('calculateTop', () => { - it('returns boundingRect top', () => { - const boundingRect = { - top: 100, - height: 100, - }; - - expect(calculateTop(boundingRect, 100)).toBe(100); - }); - - it('returns boundingRect - bottomOverflow', () => { - const boundingRect = { - top: window.innerHeight - 50, - height: 100, - }; - - expect(calculateTop(boundingRect, 100)).toBe(window.innerHeight - 50); - }); - }); - - describe('getHideSubItemsInterval', () => { - beforeEach(() => { - el.innerHTML = - '<div class="sidebar-sub-level-items" style="position: fixed; top: 0; left: 100px; height: 150px;"></div>'; - }); - - it('returns 0 if currentOpenMenu is nil', () => { - expect(getHideSubItemsInterval()).toBe(0); - }); - - it('returns 0 if mousePos is empty', () => { - expect(getHideSubItemsInterval()).toBe(0); - }); - - it('returns 0 when mouse above sub-items', () => { - showSubLevelItems(el); - documentMouseMove({ - clientX: el.getBoundingClientRect().left, - clientY: el.getBoundingClientRect().top, - }); - documentMouseMove({ - clientX: el.getBoundingClientRect().left, - clientY: el.getBoundingClientRect().top - 50, - }); - - expect(getHideSubItemsInterval()).toBe(0); - }); - - it('returns 0 when mouse is below sub-items', () => { - const subItems = el.querySelector('.sidebar-sub-level-items'); - - showSubLevelItems(el); - documentMouseMove({ - clientX: el.getBoundingClientRect().left, - clientY: el.getBoundingClientRect().top, - }); - documentMouseMove({ - clientX: el.getBoundingClientRect().left, - clientY: el.getBoundingClientRect().top - subItems.getBoundingClientRect().height + 50, - }); - - expect(getHideSubItemsInterval()).toBe(0); - }); - - it('returns 300 when mouse is moved towards sub-items', () => { - documentMouseMove({ - clientX: el.getBoundingClientRect().left, - clientY: el.getBoundingClientRect().top, - }); - showSubLevelItems(el); - documentMouseMove({ - clientX: el.getBoundingClientRect().left + 20, - clientY: el.getBoundingClientRect().top + 10, - }); - - expect(getHideSubItemsInterval()).toBe(300); - }); - }); - - describe('mouseLeaveTopItem', () => { - beforeEach(() => { - spyOn(el.classList, 'remove'); - }); - - it('removes is-over class if currentOpenMenu is null', () => { - mouseLeaveTopItem(el); - - expect(el.classList.remove).toHaveBeenCalledWith('is-over'); - }); - - it('removes is-over class if currentOpenMenu is null & there are sub-items', () => { - el.innerHTML = '<div class="sidebar-sub-level-items" style="position: absolute;"></div>'; - - mouseLeaveTopItem(el); - - expect(el.classList.remove).toHaveBeenCalledWith('is-over'); - }); - - it('does not remove is-over class if currentOpenMenu is the passed in sub-items', () => { - el.innerHTML = '<div class="sidebar-sub-level-items" style="position: absolute;"></div>'; - - setOpenMenu(el.querySelector('.sidebar-sub-level-items')); - mouseLeaveTopItem(el); - - expect(el.classList.remove).not.toHaveBeenCalled(); - }); - }); - - describe('mouseEnterTopItems', () => { - beforeEach(() => { - el.innerHTML = - '<div class="sidebar-sub-level-items" style="position: absolute; top: 0; left: 100px; height: 200px;"></div>'; - }); - - it('shows sub-items after 0ms if no menu is open', (done) => { - mouseEnterTopItems(el); - - expect(getHideSubItemsInterval()).toBe(0); - - setTimeout(() => { - expect(el.querySelector('.sidebar-sub-level-items').style.display).toBe('block'); - - done(); - }); - }); - - it('shows sub-items after 300ms if a menu is currently open', (done) => { - documentMouseMove({ - clientX: el.getBoundingClientRect().left, - clientY: el.getBoundingClientRect().top, - }); - - setOpenMenu(el.querySelector('.sidebar-sub-level-items')); - - documentMouseMove({ - clientX: el.getBoundingClientRect().left + 20, - clientY: el.getBoundingClientRect().top + 10, - }); - - mouseEnterTopItems(el, 0); - - expect(getHideSubItemsInterval()).toBe(300); - - setTimeout(() => { - expect(el.querySelector('.sidebar-sub-level-items').style.display).toBe('block'); - - done(); - }); - }); - }); - - describe('showSubLevelItems', () => { - beforeEach(() => { - el.innerHTML = '<div class="sidebar-sub-level-items" style="position: absolute;"></div>'; - }); - - it('adds is-over class to el', () => { - spyOn(el.classList, 'add'); - - showSubLevelItems(el); - - expect(el.classList.add).toHaveBeenCalledWith('is-over'); - }); - - it('does not show sub-items on mobile', () => { - breakpointSize = 'xs'; - - showSubLevelItems(el); - - expect(el.querySelector('.sidebar-sub-level-items').style.display).not.toBe('block'); - }); - - it('shows sub-items', () => { - showSubLevelItems(el); - - expect(el.querySelector('.sidebar-sub-level-items').style.display).toBe('block'); - }); - - it('shows collapsed only sub-items if icon only sidebar', () => { - const subItems = el.querySelector('.sidebar-sub-level-items'); - const sidebar = document.createElement('div'); - sidebar.classList.add(SIDEBAR_COLLAPSED_CLASS); - subItems.classList.add('is-fly-out-only'); - - setSidebar(sidebar); - - showSubLevelItems(el); - - expect(el.querySelector('.sidebar-sub-level-items').style.display).toBe('block'); - }); - - it('does not show collapsed only sub-items if icon only sidebar', () => { - const subItems = el.querySelector('.sidebar-sub-level-items'); - subItems.classList.add('is-fly-out-only'); - - showSubLevelItems(el); - - expect(subItems.style.display).not.toBe('block'); - }); - - it('sets transform of sub-items', () => { - const sidebar = document.createElement('div'); - const subItems = el.querySelector('.sidebar-sub-level-items'); - - sidebar.style.width = '200px'; - - document.body.appendChild(sidebar); - - setSidebar(sidebar); - showSubLevelItems(el); - - expect(subItems.style.transform).toBe( - `translate3d(200px, ${ - Math.floor(el.getBoundingClientRect().top) - getHeaderHeight() - }px, 0px)`, - ); - }); - - it('sets is-above when element is above', () => { - const subItems = el.querySelector('.sidebar-sub-level-items'); - subItems.style.height = `${window.innerHeight + el.offsetHeight}px`; - el.style.top = `${window.innerHeight - el.offsetHeight}px`; - - spyOn(subItems.classList, 'add'); - - showSubLevelItems(el); - - expect(subItems.classList.add).toHaveBeenCalledWith('is-above'); - }); - }); - - describe('canShowSubItems', () => { - it('returns true if on desktop size', () => { - expect(canShowSubItems()).toBeTruthy(); - }); - - it('returns false if on mobile size', () => { - breakpointSize = 'xs'; - - expect(canShowSubItems()).toBeFalsy(); - }); - }); - - describe('canShowActiveSubItems', () => { - it('returns true by default', () => { - expect(canShowActiveSubItems(el)).toBeTruthy(); - }); - - it('returns false when active & expanded sidebar', () => { - const sidebar = document.createElement('div'); - el.classList.add('active'); - - setSidebar(sidebar); - - expect(canShowActiveSubItems(el)).toBeFalsy(); - }); - - it('returns true when active & collapsed sidebar', () => { - const sidebar = document.createElement('div'); - sidebar.classList.add(SIDEBAR_COLLAPSED_CLASS); - el.classList.add('active'); - - setSidebar(sidebar); - - expect(canShowActiveSubItems(el)).toBeTruthy(); - }); - }); - - describe('subItemsMouseLeave', () => { - beforeEach(() => { - el.innerHTML = '<div class="sidebar-sub-level-items" style="position: absolute;"></div>'; - - setOpenMenu(el.querySelector('.sidebar-sub-level-items')); - }); - - it('hides subMenu if element is not hovered', () => { - subItemsMouseLeave(el); - - expect(getOpenMenu()).toBeNull(); - }); - - it('does not hide subMenu if element is hovered', () => { - el.classList.add('is-over'); - subItemsMouseLeave(el); - - expect(getOpenMenu()).not.toBeNull(); - }); - }); -}); diff --git a/spec/javascripts/lib/utils/browser_spec.js b/spec/javascripts/lib/utils/browser_spec.js deleted file mode 100644 index f41fa2503b1..00000000000 --- a/spec/javascripts/lib/utils/browser_spec.js +++ /dev/null @@ -1,69 +0,0 @@ -/** - * This file should only contain browser specific specs. - * If you need to add or update a spec, please see spec/frontend/lib/utils/*.js - * https://gitlab.com/gitlab-org/gitlab/issues/194242#note_292137135 - * https://gitlab.com/groups/gitlab-org/-/epics/895#what-if-theres-a-karma-spec-which-is-simply-unmovable-to-jest-ie-it-is-dependent-on-a-running-browser-environment - */ - -import { GlBreakpointInstance as breakpointInstance } from '@gitlab/ui/dist/utils'; -import * as commonUtils from '~/lib/utils/common_utils'; - -describe('common_utils browser specific specs', () => { - describe('contentTop', () => { - it('does not add height for fileTitle or compareVersionsHeader if screen is too small', () => { - spyOn(breakpointInstance, 'isDesktop').and.returnValue(false); - - setFixtures(` - <div class="diff-file file-title-flex-parent"> - blah blah blah - </div> - <div class="mr-version-controls"> - more blah blah blah - </div> - `); - - expect(commonUtils.contentTop()).toBe(0); - }); - - it('adds height for fileTitle and compareVersionsHeader screen is large enough', () => { - spyOn(breakpointInstance, 'isDesktop').and.returnValue(true); - - setFixtures(` - <div class="diff-file file-title-flex-parent"> - blah blah blah - </div> - <div class="mr-version-controls"> - more blah blah blah - </div> - `); - - expect(commonUtils.contentTop()).toBe(18); - }); - }); - - describe('isInViewport', () => { - let el; - - beforeEach(() => { - el = document.createElement('div'); - }); - - afterEach(() => { - document.body.removeChild(el); - }); - - it('returns true when provided `el` is in viewport', () => { - el.setAttribute('style', `position: absolute; right: ${window.innerWidth + 0.2};`); - document.body.appendChild(el); - - expect(commonUtils.isInViewport(el)).toBe(true); - }); - - it('returns false when provided `el` is not in viewport', () => { - el.setAttribute('style', 'position: absolute; top: -1000px; left: -1000px;'); - document.body.appendChild(el); - - expect(commonUtils.isInViewport(el)).toBe(false); - }); - }); -}); diff --git a/spec/javascripts/lib/utils/mock_data.js b/spec/javascripts/lib/utils/mock_data.js deleted file mode 100644 index f1358986f2a..00000000000 --- a/spec/javascripts/lib/utils/mock_data.js +++ /dev/null @@ -1 +0,0 @@ -export * from '../../../frontend/lib/utils/mock_data'; diff --git a/spec/javascripts/test_bundle.js b/spec/javascripts/test_bundle.js deleted file mode 100644 index be14d2ee7e7..00000000000 --- a/spec/javascripts/test_bundle.js +++ /dev/null @@ -1,145 +0,0 @@ -/* eslint-disable - jasmine/no-global-setup, no-underscore-dangle, no-console -*/ - -import { config as testUtilsConfig } from '@vue/test-utils'; -import jasmineDiff from 'jasmine-diff'; -import $ from 'jquery'; -import 'core-js/features/set-immediate'; -import 'vendor/jasmine-jquery'; -import '~/commons'; -import Vue from 'vue'; -import { getDefaultAdapter } from '~/lib/utils/axios_utils'; -import Translate from '~/vue_shared/translate'; - -import { FIXTURES_PATH, TEST_HOST } from './test_constants'; - -// Tech debt issue TBD -testUtilsConfig.logModifiedComponents = false; - -const isHeadlessChrome = /\bHeadlessChrome\//.test(navigator.userAgent); -Vue.config.devtools = !isHeadlessChrome; -Vue.config.productionTip = false; - -let hasVueWarnings = false; -Vue.config.warnHandler = (msg, vm, trace) => { - // The following workaround is necessary, so we are able to use setProps from Vue test utils - // see https://github.com/vuejs/vue-test-utils/issues/631#issuecomment-421108344 - const currentStack = new Error().stack; - const isInVueTestUtils = currentStack - .split('\n') - .some((line) => line.startsWith(' at VueWrapper.setProps (')); - if (isInVueTestUtils) { - return; - } - - hasVueWarnings = true; - fail(`${msg}${trace}`); -}; - -let hasVueErrors = false; -Vue.config.errorHandler = function (err) { - hasVueErrors = true; - fail(err); -}; - -Vue.use(Translate); - -// enable test fixtures -jasmine.getFixtures().fixturesPath = FIXTURES_PATH; -jasmine.getJSONFixtures().fixturesPath = FIXTURES_PATH; - -beforeAll(() => { - jasmine.addMatchers( - jasmineDiff(jasmine, { - colors: window.__karma__.config.color, - inline: window.__karma__.config.color, - }), - ); -}); - -// globalize common libraries -window.$ = $; -window.jQuery = window.$; - -// stub expected globals -window.gl = window.gl || {}; -window.gl.TEST_HOST = TEST_HOST; -window.gon = window.gon || {}; -window.gon.test_env = true; -window.gon.ee = process.env.IS_EE; -gon.relative_url_root = ''; - -let hasUnhandledPromiseRejections = false; - -window.addEventListener('unhandledrejection', (event) => { - hasUnhandledPromiseRejections = true; - console.error('Unhandled promise rejection:'); - console.error(event.reason.stack || event.reason); -}); - -let longRunningTestTimeoutHandle; - -beforeEach((done) => { - longRunningTestTimeoutHandle = setTimeout(() => { - done.fail('Test is running too long!'); - }, 4000); - done(); -}); - -afterEach(() => { - clearTimeout(longRunningTestTimeoutHandle); -}); - -const axiosDefaultAdapter = getDefaultAdapter(); - -// render all of our tests -const testContexts = [require.context('spec', true, /_spec$/)]; - -if (process.env.IS_EE) { - testContexts.push(require.context('ee_spec', true, /_spec$/)); -} - -testContexts.forEach((context) => { - context.keys().forEach((path) => { - try { - context(path); - } catch (err) { - console.log(err); - console.error('[GL SPEC RUNNER ERROR] Unable to load spec: ', path); - describe('Test bundle', function () { - it(`includes '${path}'`, function () { - expect(err).toBeNull(); - }); - }); - } - }); -}); - -describe('test errors', () => { - beforeAll((done) => { - if (hasUnhandledPromiseRejections || hasVueWarnings || hasVueErrors) { - setTimeout(done, 1000); - } else { - done(); - } - }); - - it('has no unhandled Promise rejections', () => { - expect(hasUnhandledPromiseRejections).toBe(false); - }); - - it('has no Vue warnings', () => { - expect(hasVueWarnings).toBe(false); - }); - - it('has no Vue error', () => { - expect(hasVueErrors).toBe(false); - }); - - it('restores axios adapter after mocking', () => { - if (getDefaultAdapter() !== axiosDefaultAdapter) { - fail('axios adapter is not restored! Did you forget a restore() on MockAdapter?'); - } - }); -}); diff --git a/spec/javascripts/test_constants.js b/spec/javascripts/test_constants.js deleted file mode 100644 index de7b3a0e80c..00000000000 --- a/spec/javascripts/test_constants.js +++ /dev/null @@ -1 +0,0 @@ -export * from '../frontend/__helpers__/test_constants'; |