Skip to content

Commit d8b7c4f

Browse files
committed
tests: add sidebar tests
1 parent 09d021c commit d8b7c4f

File tree

1 file changed

+206
-0
lines changed

1 file changed

+206
-0
lines changed

js/tests/unit/sidebar.spec.js

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
import Sidebar from '../../src/sidebar'
2+
3+
/** Test helpers */
4+
import { getFixture, clearFixture, jQueryMock } from '../helpers/fixture'
5+
6+
describe('Sidebar', () => {
7+
let fixtureEl
8+
9+
beforeAll(() => {
10+
fixtureEl = getFixture()
11+
})
12+
13+
afterEach(() => {
14+
clearFixture()
15+
})
16+
17+
it('should return version', () => {
18+
expect(typeof Sidebar.VERSION).toEqual('string')
19+
})
20+
21+
describe('open', () => {
22+
it('should open a sidebar', done => {
23+
fixtureEl.innerHTML = [
24+
'<div class="c-app">',
25+
' <div class="c-sidebar2"></div>',
26+
'</div>'
27+
].join('')
28+
29+
30+
const sidebarEl = document.querySelector('.c-sidebar2')
31+
const sidebar = new Sidebar(sidebarEl)
32+
33+
spyOn(sidebar, '_isVisible').and.callFake(() => true)
34+
35+
sidebarEl.addEventListener('open.coreui.sidebar', e => {
36+
expect(e).toBeDefined()
37+
})
38+
39+
sidebarEl.addEventListener('opened.coreui.sidebar', () => {
40+
expect(sidebarEl.classList.contains('c-sidebar-show')).toEqual(true)
41+
done()
42+
})
43+
44+
sidebar.open()
45+
})
46+
})
47+
48+
describe('close', () => {
49+
it('should close a sidebar', done => {
50+
fixtureEl.innerHTML = [
51+
'<div class="c-app">',
52+
' <div class="c-sidebar2 c-sidebar-show"></div>',
53+
'</div>'
54+
].join('')
55+
56+
const sidebarEl = document.querySelector('.c-sidebar2')
57+
const sidebar = new Sidebar(sidebarEl)
58+
59+
spyOn(sidebar, '_isVisible').and.callFake(() => false)
60+
61+
sidebarEl.addEventListener('close.coreui.sidebar', e => {
62+
expect(e).toBeDefined()
63+
})
64+
65+
sidebarEl.addEventListener('closed.coreui.sidebar', () => {
66+
expect(sidebarEl.classList.contains('c-sidebar-show')).toEqual(false)
67+
done()
68+
})
69+
70+
sidebar.close()
71+
})
72+
})
73+
74+
describe('toggle', () => {
75+
it('should close a sidebar', done => {
76+
fixtureEl.innerHTML = '<div class="c-sidebar2 c-sidebar-show"></div>'
77+
78+
const sidebarEl = document.querySelector('.c-sidebar2')
79+
const sidebar = new Sidebar(sidebarEl)
80+
81+
spyOn(sidebar, '_open').and.returnValue(true)
82+
83+
sidebarEl.addEventListener('close.coreui.sidebar', e => {
84+
expect(e).toBeDefined()
85+
})
86+
87+
sidebarEl.addEventListener('closed.coreui.sidebar', () => {
88+
expect(sidebarEl.classList.contains('c-sidebar-show')).toEqual(false)
89+
done()
90+
})
91+
92+
sidebar.toggle()
93+
})
94+
95+
it('should open a sidebar', done => {
96+
fixtureEl.innerHTML = '<div class="c-sidebar2 c-sidebar-show"></div>'
97+
98+
const sidebarEl = document.querySelector('.c-sidebar2')
99+
const sidebar = new Sidebar(sidebarEl)
100+
101+
spyOn(sidebar, '_open').and.returnValue(false)
102+
103+
sidebar._isVisible = () => false
104+
105+
sidebarEl.addEventListener('close.coreui.sidebar', e => {
106+
expect(e).toBeDefined()
107+
})
108+
109+
sidebarEl.addEventListener('closed.coreui.sidebar', () => {
110+
expect(sidebarEl.classList.contains('c-sidebar-show')).toEqual(false)
111+
done()
112+
})
113+
114+
sidebar.toggle()
115+
})
116+
})
117+
118+
describe('minimize', () => {
119+
it('should minimize a sidebar', () => {
120+
fixtureEl.innerHTML = '<div class="c-sidebar2"></div>'
121+
122+
const sidebarEl = document.querySelector('.c-sidebar2')
123+
const sidebar = new Sidebar(sidebarEl)
124+
125+
sidebar.minimize()
126+
127+
expect(sidebarEl.classList.contains('c-sidebar-minimized')).toEqual(true)
128+
})
129+
})
130+
131+
describe('unfoldable', () => {
132+
it('should make the unfoldable sidebar', () => {
133+
fixtureEl.innerHTML = '<div class="c-sidebar2"></div>'
134+
135+
const sidebarEl = document.querySelector('.c-sidebar2')
136+
const sidebar = new Sidebar(sidebarEl)
137+
138+
sidebar.unfoldable()
139+
140+
expect(sidebarEl.classList.contains('c-sidebar-unfoldable')).toEqual(true)
141+
})
142+
})
143+
144+
describe('reset', () => {
145+
it('should unminimize a sidebar', () => {
146+
fixtureEl.innerHTML = '<div class="c-sidebar2 c-sidebar-minimized"></div>'
147+
148+
const sidebarEl = document.querySelector('.c-sidebar2')
149+
const sidebar = new Sidebar(sidebarEl)
150+
151+
spyOn(sidebar, '_psInit').and.callFake(() => true)
152+
153+
sidebar.reset()
154+
155+
expect(sidebarEl.classList.contains('c-sidebar-minimized')).toEqual(false)
156+
})
157+
158+
it('should make the standard sidebar', () => {
159+
fixtureEl.innerHTML = '<div class="c-sidebar2 c-sidebar-unfoldable"></div>'
160+
161+
const sidebarEl = document.querySelector('.c-sidebar2')
162+
const sidebar = new Sidebar(sidebarEl)
163+
164+
sidebar.reset()
165+
166+
expect(sidebarEl.classList.contains('c-sidebar-unfoldable')).toEqual(false)
167+
})
168+
})
169+
170+
describe('jQueryInterface', () => {
171+
it('should handle config passed and toggle existing sidebar', () => {
172+
fixtureEl.innerHTML = '<div class="c-sidebar2"></div>'
173+
174+
const sidebarEl = document.querySelector('.c-sidebar2')
175+
const sidebar = new Sidebar(sidebarEl)
176+
177+
spyOn(sidebar, 'toggle')
178+
179+
jQueryMock.fn.sidebar = Sidebar.jQueryInterface
180+
jQueryMock.elements = [sidebarEl]
181+
182+
jQueryMock.fn.sidebar.call(jQueryMock, 'toggle')
183+
184+
expect(sidebar.toggle).toHaveBeenCalled()
185+
})
186+
})
187+
188+
describe('getInstance', () => {
189+
it('should return sidebar instance', () => {
190+
fixtureEl.innerHTML = '<div></div>'
191+
192+
const div = fixtureEl.querySelector('div')
193+
const sidebar = new Sidebar(div)
194+
195+
expect(Sidebar.getInstance(div)).toEqual(sidebar)
196+
})
197+
198+
it('should return null when there is no collapse instance', () => {
199+
fixtureEl.innerHTML = '<div></div>'
200+
201+
const div = fixtureEl.querySelector('div')
202+
203+
expect(Sidebar.getInstance(div)).toEqual(null)
204+
})
205+
})
206+
})

0 commit comments

Comments
 (0)