diff --git a/public/docs/_examples/server-communication/e2e-spec.js b/public/docs/_examples/server-communication/e2e-spec.js new file mode 100644 index 0000000000..4525c9514f --- /dev/null +++ b/public/docs/_examples/server-communication/e2e-spec.js @@ -0,0 +1,141 @@ +describe('Server Communication', function () { + + beforeAll(function () { + browser.get(''); + }); + + describe('Tour of Heroes e2e tests', function () { + + var _initialHeroCount = 4; + var _newHeroName = 'Mr. IQ'; + var _heroCountAfterAdd = 5; + + it('should display ' + _initialHeroCount + ' heroes after init', function () { + var myTohComp = element(by.tagName('my-toh')); + expect(myTohComp).toBeDefined(' must exist'); + var heroListComp = myTohComp.element(by.tagName('hero-list')); + expect(heroListComp).toBeDefined(' must exist'); + var heroTags = heroListComp.all(by.tagName('li')); + expect(heroTags.count()).toBe(_initialHeroCount); + }); + + it('should not add hero with empty name', function () { + var myTohComp = element(by.tagName('my-toh')); + expect(myTohComp).toBeDefined(' must exist'); + var addButton = myTohComp.element(by.tagName('button')); + expect(addButton).toBeDefined('"Add Hero" button must be defined'); + addButton.click().then(function() { + var heroListComp = myTohComp.element(by.tagName('hero-list')); + var heroTags = heroListComp.all(by.tagName('li')); + expect(heroTags.count()).toBe(_initialHeroCount, 'No new hero should be added'); + }); + }) + + it('should add a new hero to the list', function () { + var myTohComp = element(by.tagName('my-toh')); + expect(myTohComp).toBeDefined(' must exist'); + var heroNameInput = myTohComp.element(by.tagName('input')); + expect(heroNameInput).toBeDefined(' for hero name must exist'); + var addButton = myTohComp.element(by.tagName('button')); + expect(addButton).toBeDefined('"Add Hero" button must be defined'); + sendKeys(heroNameInput, _newHeroName); + addButton.click().then(function() { + var heroListComp = myTohComp.element(by.tagName('hero-list')); + var heroTags = heroListComp.all(by.tagName('li')); + expect(heroTags.count()).toBe(_heroCountAfterAdd, 'A new hero should be added'); + var newHeroInList = heroTags.get(_heroCountAfterAdd - 1).getText(); + expect(newHeroInList).toBe(_newHeroName, 'The hero should be added to the end of the list'); + }); + }) + }); + + describe('Wikipedia Demo e2e tests', function () { + + it('should initialize the demo with empty result list', function () { + var myWikiComp = element(by.tagName('my-wiki')); + expect(myWikiComp).toBeDefined(' must exist'); + var resultList = myWikiComp.all(by.tagName('li')); + expect(resultList.count()).toBe(0, 'result list must be empty'); + }); + + describe('Fetches after each keystroke', function () { + it('should fetch results after "B"', function(done) { + testForRefreshedResult('B', done); + }); + + it('should fetch results after "Ba"', function(done) { + testForRefreshedResult('a', done); + }); + + it('should fetch results after "Bas"', function(done) { + testForRefreshedResult('s', done); + }); + + it('should fetch results after "Basic"', function(done) { + testForRefreshedResult('ic', done); + }); + }); + + function testForRefreshedResult(keyPressed, done) { + testForResult('my-wiki', keyPressed, false, done) + } + }); + + describe('Smarter Wikipedia Demo e2e tests', function () { + + it('should initialize the demo with empty result list', function () { + var myWikiSmartComp = element(by.tagName('my-wiki-smart')); + expect(myWikiSmartComp).toBeDefined(' must exist'); + var resultList = myWikiSmartComp.all(by.tagName('li')); + expect(resultList.count()).toBe(0, 'result list must be empty'); + }); + + it('should fetch results after "Java"', function(done) { + testForNewResult('Java', done); + }); + + it('should fetch results after "JavaS"', function(done) { + testForStaleResult('S', done); + }); + + it('should fetch results after "JavaSc"', function(done) { + testForStaleResult('c', done); + }); + + it('should fetch results after "JavaScript"', function(done) { + testForStaleResult('ript', done); + }); + + + function testForNewResult(keyPressed, done) { + testForResult('my-wiki-smart', keyPressed, false, done) + } + + function testForStaleResult(keyPressed, done) { + testForResult('my-wiki-smart', keyPressed, true, done) + } + + }); + + function testForResult(componentTagName, keyPressed, hasListBeforeSearch, done) { + var searchWait = 1000; // Wait for wikipedia but not so long that tests timeout + var wikiComponent = element(by.tagName(componentTagName)); + expect(wikiComponent).toBeDefined('<' + componentTagName + '> must exist'); + var searchBox = wikiComponent.element(by.tagName('input')); + expect(searchBox).toBeDefined(' for search must exist'); + + searchBox.sendKeys(keyPressed).then(function () { + var resultList = wikiComponent.all(by.tagName('li')); + + if (hasListBeforeSearch) { + expect(resultList.count()).toBeGreaterThan(0, 'result list should not be empty before search'); + } + + setTimeout(function() { + expect(resultList.count()).toBeGreaterThan(0, 'result list should not be empty after search'); + done(); + }, searchWait); + }); + } + +});