
committed by
Jason Aden

parent
aad3444a58
commit
2278fe8f0e
142
aio/content/examples/http/e2e/src/app.e2e-spec.ts
Normal file
142
aio/content/examples/http/e2e/src/app.e2e-spec.ts
Normal file
@ -0,0 +1,142 @@
|
||||
import { browser, element, by, ElementFinder } from 'protractor';
|
||||
import { resolve } from 'path';
|
||||
|
||||
const page = {
|
||||
configClearButton: element.all(by.css('app-config > div button')).get(2),
|
||||
configErrorButton: element.all(by.css('app-config > div button')).get(3),
|
||||
configErrorMessage: element(by.css('app-config p')),
|
||||
configGetButton: element.all(by.css('app-config > div button')).get(0),
|
||||
configGetResponseButton: element.all(by.css('app-config > div button')).get(1),
|
||||
configSpan: element(by.css('app-config span')),
|
||||
downloadButton: element.all(by.css('app-downloader button')).get(0),
|
||||
downloadClearButton: element.all(by.css('app-downloader button')).get(1),
|
||||
downloadMessage: element(by.css('app-downloader p')),
|
||||
heroesListAddButton: element.all(by.css('app-heroes > div button')).get(0),
|
||||
heroesListInput: element(by.css('app-heroes > div input')),
|
||||
heroesListSearchButton: element.all(by.css('app-heroes > div button')).get(1),
|
||||
heroesListItems: element.all(by.css('app-heroes ul li')),
|
||||
logClearButton: element(by.css('app-messages button')),
|
||||
logList: element(by.css('app-messages ol')),
|
||||
logListItems: element.all(by.css('app-messages ol li')),
|
||||
searchInput: element(by.css('app-package-search input#name')),
|
||||
searchListItems: element.all(by.css('app-package-search li')),
|
||||
uploadInput: element(by.css('app-uploader input')),
|
||||
uploadMessage: element(by.css('app-uploader p'))
|
||||
};
|
||||
|
||||
let checkLogForMessage = (message: string) => {
|
||||
expect(page.logList.getText()).toContain(message);
|
||||
};
|
||||
|
||||
// TODO(i): temorarily disable these tests because angular-in-memory-web-api is not compatible with rxjs v6 yet
|
||||
// and we don't have the backwards compatibility package yet.
|
||||
// Reenable after rxjs v6 compatibility package is out or angular-in-memory-web-api is compatible with rxjs v6
|
||||
xdescribe('Http Tests', function() {
|
||||
beforeEach(() => {
|
||||
browser.get('');
|
||||
});
|
||||
|
||||
describe('Heroes', () => {
|
||||
it('retrieves the list of heroes at startup', () => {
|
||||
expect(page.heroesListItems.count()).toBe(4);
|
||||
expect(page.heroesListItems.get(0).getText()).toContain('Mr. Nice');
|
||||
checkLogForMessage('GET "api/heroes"');
|
||||
});
|
||||
|
||||
it('makes a POST to add a new hero', () => {
|
||||
page.heroesListInput.sendKeys('Magneta');
|
||||
page.heroesListAddButton.click();
|
||||
expect(page.heroesListItems.count()).toBe(5);
|
||||
checkLogForMessage('POST "api/heroes"');
|
||||
});
|
||||
|
||||
it('makes a GET to search for a hero', () => {
|
||||
page.heroesListInput.sendKeys('Celeritas');
|
||||
page.heroesListSearchButton.click();
|
||||
checkLogForMessage('GET "api/heroes?name=Celeritas"');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Messages', () => {
|
||||
it('can clear the logs', () => {
|
||||
expect(page.logListItems.count()).toBe(1);
|
||||
page.logClearButton.click();
|
||||
expect(page.logListItems.count()).toBe(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Configuration', () => {
|
||||
it('can fetch the configuration JSON file', () => {
|
||||
page.configGetButton.click();
|
||||
checkLogForMessage('GET "assets/config.json"');
|
||||
expect(page.configSpan.getText()).toContain('Heroes API URL is "api/heroes"');
|
||||
expect(page.configSpan.getText()).toContain('Textfile URL is "assets/textfile.txt"');
|
||||
});
|
||||
|
||||
it('can fetch the configuration JSON file with headers', () => {
|
||||
page.configGetResponseButton.click();
|
||||
checkLogForMessage('GET "assets/config.json"');
|
||||
expect(page.configSpan.getText()).toContain('Response headers:');
|
||||
expect(page.configSpan.getText()).toContain('content-type: application/json; charset=UTF-8');
|
||||
});
|
||||
|
||||
it('can clear the configuration log', () => {
|
||||
page.configGetResponseButton.click();
|
||||
expect(page.configSpan.getText()).toContain('Response headers:');
|
||||
page.configClearButton.click();
|
||||
expect(page.configSpan.isPresent()).toBeFalsy();
|
||||
});
|
||||
|
||||
it('throws an error for a non valid url', () => {
|
||||
page.configErrorButton.click();
|
||||
checkLogForMessage('GET "not/a/real/url"');
|
||||
expect(page.configErrorMessage.getText()).toContain('"Something bad happened; please try again later."');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Download', () => {
|
||||
it('can download a txt file and show it', () => {
|
||||
page.downloadButton.click();
|
||||
checkLogForMessage('DownloaderService downloaded "assets/textfile.txt"');
|
||||
checkLogForMessage('GET "assets/textfile.txt"');
|
||||
expect(page.downloadMessage.getText()).toContain('Contents: "This is the downloaded text file "');
|
||||
});
|
||||
|
||||
it('can clear the log of the download', () => {
|
||||
page.downloadButton.click();
|
||||
expect(page.downloadMessage.getText()).toContain('Contents: "This is the downloaded text file "');
|
||||
page.downloadClearButton.click();
|
||||
expect(page.downloadMessage.isPresent()).toBeFalsy();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Upload', () => {
|
||||
it('can upload a file', () => {
|
||||
const filename = 'app.po.ts';
|
||||
const url = resolve(__dirname, filename);
|
||||
page.uploadInput.sendKeys(url);
|
||||
checkLogForMessage('POST "/upload/file" succeeded in');
|
||||
expect(page.uploadMessage.getText()).toContain(
|
||||
`File "${filename}" was completely uploaded!`);
|
||||
});
|
||||
});
|
||||
|
||||
describe('PackageSearch', () => {
|
||||
it('can search for npm package and find in cache', () => {
|
||||
const packageName = 'angular';
|
||||
page.searchInput.sendKeys(packageName);
|
||||
checkLogForMessage(
|
||||
'Caching response from "https://npmsearch.com/query?q=angular"');
|
||||
expect(page.searchListItems.count()).toBeGreaterThan(1, 'angular items');
|
||||
|
||||
page.searchInput.clear();
|
||||
page.searchInput.sendKeys(' ');
|
||||
expect(page.searchListItems.count()).toBe(0, 'search empty');
|
||||
|
||||
page.searchInput.clear();
|
||||
page.searchInput.sendKeys(packageName);
|
||||
checkLogForMessage(
|
||||
'Found cached response for "https://npmsearch.com/query?q=angular"');
|
||||
});
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user