110 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			110 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								'use strict'; // necessary for es6 output in node
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import { browser, element, by } from 'protractor';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Angular E2E Testing Guide:
							 | 
						||
| 
								 | 
							
								// https://docs.angularjs.org/guide/e2e-testing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('PhoneCat Application', function() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // #docregion redirect
							 | 
						||
| 
								 | 
							
								  it('should redirect `index.html` to `index.html#!/phones', function() {
							 | 
						||
| 
								 | 
							
								    browser.get('index.html');
							 | 
						||
| 
								 | 
							
								    browser.waitForAngular();
							 | 
						||
| 
								 | 
							
								    browser.getCurrentUrl().then(function(url: string) {
							 | 
						||
| 
								 | 
							
								      expect(url.endsWith('/phones')).toBe(true);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  // #enddocregion redirect
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe('View: Phone list', function() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    beforeEach(function() {
							 | 
						||
| 
								 | 
							
								      browser.get('index.html#!/phones');
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should filter the phone list as a user types into the search box', function() {
							 | 
						||
| 
								 | 
							
								      let phoneList = element.all(by.css('.phones li'));
							 | 
						||
| 
								 | 
							
								      let query = element(by.css('input'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      expect(phoneList.count()).toBe(20);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      query.sendKeys('nexus');
							 | 
						||
| 
								 | 
							
								      expect(phoneList.count()).toBe(1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      query.clear();
							 | 
						||
| 
								 | 
							
								      query.sendKeys('motorola');
							 | 
						||
| 
								 | 
							
								      expect(phoneList.count()).toBe(8);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should be possible to control phone order via the drop-down menu', function() {
							 | 
						||
| 
								 | 
							
								      let queryField = element(by.css('input'));
							 | 
						||
| 
								 | 
							
								      let orderSelect = element(by.css('select'));
							 | 
						||
| 
								 | 
							
								      let nameOption = orderSelect.element(by.css('option[value="name"]'));
							 | 
						||
| 
								 | 
							
								      let phoneNameColumn = element.all(by.css('.phones .name'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      function getNames() {
							 | 
						||
| 
								 | 
							
								        return phoneNameColumn.map(function(elem) {
							 | 
						||
| 
								 | 
							
								          return elem.getText();
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      queryField.sendKeys('tablet');   // Let's narrow the dataset to make the assertions shorter
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      expect(getNames()).toEqual([
							 | 
						||
| 
								 | 
							
								        'Motorola XOOM\u2122 with Wi-Fi',
							 | 
						||
| 
								 | 
							
								        'MOTOROLA XOOM\u2122'
							 | 
						||
| 
								 | 
							
								      ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      nameOption.click();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      expect(getNames()).toEqual([
							 | 
						||
| 
								 | 
							
								        'MOTOROLA XOOM\u2122',
							 | 
						||
| 
								 | 
							
								        'Motorola XOOM\u2122 with Wi-Fi'
							 | 
						||
| 
								 | 
							
								      ]);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // #docregion links
							 | 
						||
| 
								 | 
							
								    it('should render phone specific links', function() {
							 | 
						||
| 
								 | 
							
								      let query = element(by.css('input'));
							 | 
						||
| 
								 | 
							
								      query.sendKeys('nexus');
							 | 
						||
| 
								 | 
							
								      element.all(by.css('.phones li a')).first().click();
							 | 
						||
| 
								 | 
							
								      browser.getCurrentUrl().then(function(url: string) {
							 | 
						||
| 
								 | 
							
								        expect(url.endsWith('/phones/nexus-s')).toBe(true);
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    // #enddocregion links
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe('View: Phone detail', function() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    beforeEach(function() {
							 | 
						||
| 
								 | 
							
								      browser.get('index.html#!/phones/nexus-s');
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should display the `nexus-s` page', function() {
							 | 
						||
| 
								 | 
							
								      expect(element(by.css('h1')).getText()).toBe('Nexus S');
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should display the first phone image as the main phone image', function() {
							 | 
						||
| 
								 | 
							
								      let mainImage = element(by.css('img.phone.selected'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.0.jpg/);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should swap the main image when clicking on a thumbnail image', function() {
							 | 
						||
| 
								 | 
							
								      let mainImage = element(by.css('img.phone.selected'));
							 | 
						||
| 
								 | 
							
								      let thumbnails = element.all(by.css('.phone-thumbs img'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      thumbnails.get(2).click();
							 | 
						||
| 
								 | 
							
								      expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.2.jpg/);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      thumbnails.get(0).click();
							 | 
						||
| 
								 | 
							
								      expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.0.jpg/);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								});
							 |