104 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								'use strict'; // necessary for es6 output in node
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import { browser, by, element } from 'protractor';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('Hierarchical dependency injection', () => {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  beforeAll(() => {
							 | 
						||
| 
								 | 
							
								    browser.get('');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe('Heroes Scenario', () => {
							 | 
						||
| 
								 | 
							
								    let page = {
							 | 
						||
| 
								 | 
							
								      heroName: '',
							 | 
						||
| 
								 | 
							
								      income: '',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // queries
							 | 
						||
| 
								 | 
							
								      heroEl: element.all(by.css('heroes-list li')).get(0), // first hero
							 | 
						||
| 
								 | 
							
								      heroCardEl: element(by.css('heroes-list hero-tax-return')), // first hero tax-return
							 | 
						||
| 
								 | 
							
								      taxReturnNameEl: element.all(by.css('heroes-list hero-tax-return #name')).get(0),
							 | 
						||
| 
								 | 
							
								      incomeInputEl: element.all(by.css('heroes-list hero-tax-return input')).get(0),
							 | 
						||
| 
								 | 
							
								      cancelButtonEl: element(by.cssContainingText('heroes-list hero-tax-return button', 'Cancel')),
							 | 
						||
| 
								 | 
							
								      closeButtonEl: element(by.cssContainingText('heroes-list hero-tax-return button', 'Close')),
							 | 
						||
| 
								 | 
							
								      saveButtonEl: element(by.cssContainingText('heroes-list hero-tax-return button', 'Save'))
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should list multiple heroes', () => {
							 | 
						||
| 
								 | 
							
								      expect(element.all(by.css('heroes-list li')).count()).toBeGreaterThan(1);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should show no hero tax-returns at the start', () => {
							 | 
						||
| 
								 | 
							
								      expect(element.all(by.css('heroes-list li hero-tax-return')).count()).toBe(0);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should open first hero in hero-tax-return view after click', () => {
							 | 
						||
| 
								 | 
							
								      page.heroEl.getText()
							 | 
						||
| 
								 | 
							
								        .then(val => {
							 | 
						||
| 
								 | 
							
								          page.heroName = val;
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        .then(() => page.heroEl.click())
							 | 
						||
| 
								 | 
							
								        .then(() => {
							 | 
						||
| 
								 | 
							
								          expect(page.heroCardEl.isDisplayed()).toBe(true);
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('hero tax-return should have first hero\'s name', () => {
							 | 
						||
| 
								 | 
							
								      // Not `page.tax-returnNameInputEl.getAttribute('value')` although later that is essential
							 | 
						||
| 
								 | 
							
								      expect(page.taxReturnNameEl.getText()).toEqual(page.heroName);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should be able to cancel change', () => {
							 | 
						||
| 
								 | 
							
								      page.incomeInputEl.clear()
							 | 
						||
| 
								 | 
							
								        .then(() => page.incomeInputEl.sendKeys('777'))
							 | 
						||
| 
								 | 
							
								        .then(() => {
							 | 
						||
| 
								 | 
							
								          expect(page.incomeInputEl.getAttribute('value')).toBe('777', 'income should be 777');
							 | 
						||
| 
								 | 
							
								          return page.cancelButtonEl.click();
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        .then(() => {
							 | 
						||
| 
								 | 
							
								          expect(page.incomeInputEl.getAttribute('value')).not.toBe('777', 'income should not be 777');
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should be able to save change', () => {
							 | 
						||
| 
								 | 
							
								      page.incomeInputEl.clear()
							 | 
						||
| 
								 | 
							
								        .then(() => page.incomeInputEl.sendKeys('999'))
							 | 
						||
| 
								 | 
							
								        .then(() => {
							 | 
						||
| 
								 | 
							
								          expect(page.incomeInputEl.getAttribute('value')).toBe('999', 'income should be 999');
							 | 
						||
| 
								 | 
							
								          return page.saveButtonEl.click();
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        .then(() => {
							 | 
						||
| 
								 | 
							
								          expect(page.incomeInputEl.getAttribute('value')).toBe('999', 'income should still be 999');
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should be able to close tax-return', () => {
							 | 
						||
| 
								 | 
							
								      page.saveButtonEl.click()
							 | 
						||
| 
								 | 
							
								        .then(() => {
							 | 
						||
| 
								 | 
							
								          expect(element.all(by.css('heroes-list li hero-tax-return')).count()).toBe(0);
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe('Villains Scenario', () => {
							 | 
						||
| 
								 | 
							
								    it('should list multiple villains', () => {
							 | 
						||
| 
								 | 
							
								      expect(element.all(by.css('villains-list li')).count()).toBeGreaterThan(1);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe('Cars Scenario', () => {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('A-component should use expected services', () => {
							 | 
						||
| 
								 | 
							
								      expect(element(by.css('a-car')).getText()).toContain('C1-E1-T1');
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('B-component should use expected services', () => {
							 | 
						||
| 
								 | 
							
								      expect(element(by.css('b-car')).getText()).toContain('C2-E2-T1');
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('C-component should use expected services', () => {
							 | 
						||
| 
								 | 
							
								      expect(element(by.css('c-car')).getText()).toContain('C3-E2-T1');
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |