redoc/lib/services/menu.service.spec.ts

102 lines
3.1 KiB
TypeScript
Raw Normal View History

2016-05-09 22:55:16 +03:00
'use strict';
2016-07-01 15:53:16 +03:00
import { Component } from '@angular/core';
2016-05-09 22:55:16 +03:00
import {
inject,
2016-07-01 15:53:16 +03:00
async,
TestComponentBuilder
2016-05-09 22:55:16 +03:00
} from '@angular/core/testing';
import { MenuService } from './menu.service';
import { Hash } from './hash.service';
import { ScrollService } from './scroll.service';
2016-06-12 20:44:34 +03:00
import { MethodsList } from '../components/index';
2016-06-22 21:17:48 +03:00
import { SpecManager } from '../utils/SpecManager';;
2016-05-09 22:55:16 +03:00
describe('Menu service', () => {
let menu, hashService, scroll;
let builder;
2016-07-01 15:53:16 +03:00
let specMgr;
2016-05-09 22:55:16 +03:00
2016-07-01 15:53:16 +03:00
beforeEach(async(inject([TestComponentBuilder, SpecManager, Hash, ScrollService],
(tcb, _specMgr, _hash, _scroll, _menu) => {
2016-05-09 22:55:16 +03:00
hashService = _hash;
scroll = _scroll;
builder = tcb;
specMgr = _specMgr;
2016-07-01 15:53:16 +03:00
return specMgr.load('/tests/schemas/extended-petstore.yml');
})));
2016-05-09 22:55:16 +03:00
2016-07-01 15:53:16 +03:00
beforeEach(() => {
menu = new MenuService(hashService, scroll, specMgr);
2016-07-01 15:53:16 +03:00
let fixture = builder.createSync(TestAppComponent);
fixture.detectChanges();
2016-05-09 22:55:16 +03:00
});
it('should run hashScroll when hash changed', (done) => {
spyOn(menu, 'hashScroll').and.callThrough();
hashService.changed.subscribe(() => {
expect(menu.hashScroll).toHaveBeenCalled();
menu.hashScroll.and.callThrough();
done();
});
hashService.changed.next();
});
it('should scroll to method when location hash is present [jp]', (done) => {
let hash = '#tag/pet/paths/~1pet~1findByStatus/get';
spyOn(menu, 'hashScroll').and.callThrough();
spyOn(window, 'scrollTo').and.stub();
hashService.changed.subscribe(() => {
expect(menu.hashScroll).toHaveBeenCalled();
2016-06-12 20:44:34 +03:00
let scrollY = (<jasmine.Spy>window.scrollTo).calls.argsFor(0)[1];
2016-05-09 22:55:16 +03:00
expect(scrollY).toBeGreaterThan(0);
2016-06-12 20:44:34 +03:00
(<jasmine.Spy>window.scrollTo).and.callThrough();
2016-05-09 22:55:16 +03:00
done();
});
hashService.changed.next(hash);
});
it('should scroll to method when location hash is present [operation]', (done) => {
let hash = '#operation/getPetById';
spyOn(menu, 'hashScroll').and.callThrough();
spyOn(window, 'scrollTo').and.stub();
hashService.changed.subscribe(() => {
expect(menu.hashScroll).toHaveBeenCalled();
2016-06-12 20:44:34 +03:00
let scrollY = (<jasmine.Spy>window.scrollTo).calls.argsFor(0)[1];
2016-05-09 22:55:16 +03:00
expect(scrollY).toBeGreaterThan(0);
done();
});
hashService.changed.next(hash);
});
it('should select next/prev menu item when scrolled down/up', () => {
scroll.$scrollParent = document.querySelector('#parent');
menu.activeCatIdx.should.be.equal(0);
menu.activeMethodIdx.should.be.equal(-1);
let elTop = menu.getCurrentMethodEl().getBoundingClientRect().bottom;
scroll.$scrollParent.scrollTop = elTop + 1;
//simulate scroll down
spyOn(scroll, 'scrollY').and.returnValue(elTop + 2);
menu.scrollUpdate(true);
menu.activeCatIdx.should.be.equal(1);
scroll.scrollY.and.returnValue(elTop - 2);
scroll.$scrollParent.scrollTop = elTop - 1;
menu.scrollUpdate(false);
menu.activeCatIdx.should.be.equal(0);
});
});
@Component({
selector: 'test-app',
directives: [ MethodsList ],
template:
`<div id='parent' style='height: 500px; overflow:auto'>
<methods-list></methods-list>
</div>`
})
2016-06-13 20:54:24 +03:00
class TestAppComponent {
2016-05-09 22:55:16 +03:00
}