235 lines
6.0 KiB
JavaScript
235 lines
6.0 KiB
JavaScript
'use strict';
|
|
|
|
var BASE_URL = 'http://localhost:3000/';
|
|
|
|
describe('Application part 4', function () {
|
|
|
|
it = extendIt(it); fit = extendIt(fit); xit = extendIt(xit);
|
|
|
|
beforeEach(function() {
|
|
goTo(BASE_URL);
|
|
});
|
|
|
|
it('menu links should change url', function () {
|
|
expect(currentUrl()).toBe(getUrl('#/search'));
|
|
|
|
link('menu-new').click();
|
|
|
|
expect(currentUrl()).toBe(getUrl('#/new'));
|
|
|
|
link('menu-search').click();
|
|
|
|
expect(currentUrl()).toBe(getUrl('#/search'));
|
|
|
|
}).deductedOnFailure(10);
|
|
|
|
|
|
it('should insert contact with name and phone number', function () {
|
|
|
|
link('menu-new').click();
|
|
|
|
var sampleData = getSampleData();
|
|
|
|
input('name-input').setValue(sampleData.name);
|
|
input('phone-input').setValue(sampleData.phone);
|
|
|
|
link('save-link').click();
|
|
|
|
expect(currentUrl()).toBe(getUrl('#/search'));
|
|
|
|
expect(element(by.tagName('table')).getText()).toContain(sampleData.name);
|
|
expect(element(by.tagName('table')).getText()).toContain(sampleData.phone);
|
|
|
|
}).deductedOnFailure(10);
|
|
|
|
|
|
it('should be able to edit contacts', function () {
|
|
var sampleData = getSampleData();
|
|
var changedName = sampleData.name + 1;
|
|
insertContact(sampleData.name);
|
|
|
|
rowContainingText(sampleData.name).elementWithCssClass('edit-link').click();
|
|
|
|
input('name-input').setValue(changedName);
|
|
link('save-link').click();
|
|
|
|
expect(currentUrl()).toBe(getUrl('#/search'));
|
|
expect(element(by.tagName('table')).getText()).toContain(changedName);
|
|
expect(element(by.tagName('table')).getText()).not.toContain(sampleData.name);
|
|
|
|
}).deductedOnFailure(5);
|
|
|
|
|
|
it('selecting a contact should change its row\'s css class', function () {
|
|
var name = getSampleData().name;
|
|
insertContact(name);
|
|
|
|
rowContainingText(name).checkBox().click();
|
|
|
|
var cssClassesList = rowContainingText(name).cssClasses();
|
|
|
|
expect(cssClassesList).toContain('selected');
|
|
|
|
}).deductedOnFailure(2);
|
|
|
|
|
|
it('should delete contacts', function () {
|
|
|
|
var name = getSampleData().name;
|
|
insertContact(name);
|
|
|
|
expect(element(by.tagName('table')).getText()).toContain(name);
|
|
|
|
rowContainingText(name).elementWithCssClass('delete-link').click();
|
|
|
|
expect(currentUrl()).toBe(getUrl('#/search'));
|
|
|
|
expect(element(by.tagName('table')).getText()).not.toContain(name);
|
|
|
|
}).deductedOnFailure(2);
|
|
|
|
|
|
it('should delete multiple contacts', function () {
|
|
|
|
var name1 = getSampleData().name;
|
|
var name2 = name1 + 1;
|
|
insertContact(name1);
|
|
insertContact(name2);
|
|
|
|
expect(element(by.tagName('table')).getText()).toContain(name1);
|
|
expect(element(by.tagName('table')).getText()).toContain(name2);
|
|
|
|
rowContainingText(name1).checkBox().click();
|
|
rowContainingText(name2).checkBox().click();
|
|
|
|
link('delete-all-link').click();
|
|
|
|
expect(currentUrl()).toBe(getUrl('#/search'));
|
|
|
|
expect(element(by.tagName('table')).getText()).not.toContain(name1);
|
|
expect(element(by.tagName('table')).getText()).not.toContain(name2);
|
|
|
|
}).deductedOnFailure(1);
|
|
|
|
it('should filter by name and phone', function () {
|
|
|
|
insertContact('Jaana');
|
|
insertContact('Jaak');
|
|
insertContact('Tiit', 'aa');
|
|
insertContact('Tiina');
|
|
|
|
input('search-string').setValue('aa');
|
|
|
|
expect(element(by.tagName('table')).getText()).toContain('Jaana');
|
|
expect(element(by.tagName('table')).getText()).toContain('Jaak');
|
|
expect(element(by.tagName('table')).getText()).toContain('Tiit');
|
|
expect(element(by.tagName('table')).getText()).not.toContain('Tiina');
|
|
|
|
}).deductedOnFailure(1);
|
|
|
|
|
|
});
|
|
|
|
function rowContainingText(searchString) {
|
|
var rows = element.all(by.tagName('tr'))
|
|
.filter(function (each) {
|
|
return each.getText().then(function (text) {
|
|
return text.indexOf(searchString) >= 0;
|
|
})
|
|
});
|
|
|
|
expect(rows.count()).toBe(1, 'should find exactly one matching row');
|
|
|
|
return {
|
|
elementWithCssClass: elementWithCssClass,
|
|
checkBox: checkBox,
|
|
cssClasses: cssClasses
|
|
};
|
|
|
|
function elementWithCssClass(cssClass) {
|
|
var elements = rows.get(0).all(by.css('.' + cssClass));
|
|
|
|
expect(elements.count()).toBe(1, 'should find exactly one matching element');
|
|
|
|
return elements.get(0);
|
|
}
|
|
|
|
function cssClasses() {
|
|
return rows.first().getAttribute('class').then(function (string) {
|
|
return string.split(' ');
|
|
});
|
|
}
|
|
|
|
function checkBox() {
|
|
var checkboxes = rows.get(0).all(by.tagName('input'));
|
|
|
|
expect(checkboxes.count()).toBe(1, 'should find exactly one checkbox');
|
|
|
|
return checkboxes.get(0);
|
|
}
|
|
}
|
|
|
|
function link(id) {
|
|
return element(by.id(id));
|
|
}
|
|
|
|
function goTo(addr) {
|
|
browser.get(addr).then(function () {
|
|
browser.manage().window().setSize(1920, 1080);
|
|
});
|
|
}
|
|
|
|
function getUrl(path) {
|
|
return BASE_URL.replace(/\/$/, '') + '/' + path;
|
|
}
|
|
|
|
function currentUrl() {
|
|
return browser.getCurrentUrl();
|
|
}
|
|
|
|
function getSampleData() {
|
|
var time = new Date().getTime();
|
|
return {
|
|
name : time,
|
|
phone : time + 1
|
|
};
|
|
}
|
|
|
|
function input(id) {
|
|
var input = element(by.id(id));
|
|
|
|
return {
|
|
getValue: getValue,
|
|
setValue: setValue,
|
|
isPresent : isPresent
|
|
};
|
|
|
|
function isPresent() {
|
|
return input.isPresent();
|
|
}
|
|
|
|
function setValue(value) {
|
|
if (value == null || value == undefined) {
|
|
return;
|
|
}
|
|
|
|
input.clear().sendKeys(value);
|
|
}
|
|
|
|
function getValue() {
|
|
return input.getAttribute('value');
|
|
}
|
|
}
|
|
|
|
function insertContact(name, phone) {
|
|
link('menu-new').click();
|
|
input('name-input').setValue(name);
|
|
input('phone-input').setValue(phone);
|
|
link('save-link').click();
|
|
expect(currentUrl()).toBe(getUrl('#/search'));
|
|
}
|
|
|
|
function extendIt(it) {
|
|
return require('./helpers/points-reporter').extendIt(it);
|
|
}
|