E2E refactor, Snackbar with hide button, Dialog, bugs solved

This commit is contained in:
Juan Ferrer Toribio 2018-02-20 10:00:19 +01:00
parent f2d5d58513
commit eb0276183f
42 changed files with 944 additions and 1553 deletions

View File

@ -1,6 +1,9 @@
import ngModule from '../module';
import './style.scss';
/**
* A simple login form.
*/
export default class Controller {
constructor($element, $scope, $window, $http) {
this.$element = $element;
@ -9,9 +12,9 @@ export default class Controller {
this.$http = $http;
}
submit() {
if (!(this.user && this.password)) {
if (!this.user) {
this.focusUser();
this.showMessage('Please insert your user and password');
this.showError('Please insert your user and password');
return;
}
@ -62,15 +65,15 @@ export default class Controller {
message = 'Something went wrong';
}
this.showMessage(message);
this.showError(message);
this.focusUser();
}
focusUser() {
this.$.userField.select();
this.$.userField.focus();
}
showMessage(message) {
this.$.snackbar.show({message: message});
showError(message) {
this.$.snackbar.showError({message: message});
}
}
Controller.$inject = ['$element', '$scope', '$window', '$http'];

View File

@ -39,17 +39,9 @@
<vn-submit label="Save" vn-acl="administrative"></vn-submit>
</vn-button-bar>
</form>
<vn-dialog
<vn-confirm
vn-id="send-mail"
on-response="$ctrl.returnDialog(response)">
<tpl-body>
<vn-vertical>
<vn-one text-center translate>Changed terms</vn-one>
<vn-one text-center translate>Notify customer?</vn-one>
</vn-vertical>
</tpl-body>
<tpl-buttons>
<button response="CANCEL" translate>No</button>
<button response="ACCEPT" translate>Yes, notify</button>
</tpl-buttons>
</vn-dialog>
on-response="$ctrl.returnDialog(response)"
question="Changed terms"
message="Notify customer?">
</vn-confirm>

View File

@ -0,0 +1,15 @@
Changed terms: Payment terms have changed
Notify customer?: Do you want to notify customer?
No: No
Yes, notify: Yes, notify
Notification sent!: Notification sent!
Notification error: Error while sending notification
Yes, propagate: Yes, propagate
Equivalent tax spreaded: Equivalent tax spreaded
Invoice by address: Invoice by address
Equalization tax: Equalization tax
Due day: Due day
Received core VNH: VNH core received
Received core VNL: VNL core received
Received B2B VNL: VNL B2B received
Save: Save

View File

@ -12,4 +12,4 @@ Due day: Vencimiento
Received core VNH: Recibido core VNH
Received core VNL: Recibido core VNL
Received B2B VNL: Recibido B2B VNL
SAVE: GUARDAR
Save: Guardar

View File

@ -1,23 +1,10 @@
<div ng-mousedown="$ctrl.onDialogMouseDown($event)">
<button ng-click="$ctrl.hide()" class="close" translate-attr="{title: 'Close'}">
<vn-icon vn-one icon="clear" style="color:black"></vn-icon>
</button>
<form>
<div>
<tpl-body>
<h6 class="dialog-title" translate>
{{::$ctrl.question}}
</h6>
<span translate>
{{::$ctrl.message}}
</span>
</tpl-body>
</div>
<div class="button-bar" ng-click="$ctrl.onButtonClick($event)">
<tpl-buttons>
<button response="CANCEL" translate>Cancel</button>
<button response="ACCEPT" translate>Accept</button>
</tpl-buttons>
</div>
</form>
</div>
<root>
<tpl-body>
<h6 translate>{{::$ctrl.question}}</h6>
<span translate>{{::$ctrl.message}}</span>
</tpl-body>
<tpl-buttons>
<button response="CANCEL" translate>Cancel</button>
<button response="ACCEPT" translate>Accept</button>
</tpl-buttons>
</root>

View File

@ -1,13 +1,21 @@
import ngModule from '../../module';
import Dialog from '../dialog/dialog';
import './style.scss';
import template from './confirm.html';
export default class Confirm extends Dialog {}
Dialog.$inject = ['$element'];
export default class Confirm extends Dialog {
constructor($element, $scope, $compile) {
super($element);
let cTemplate = $compile(template)($scope)[0];
this.body = cTemplate.querySelector('tpl-body');
this.buttons = cTemplate.querySelector('tpl-buttons');
}
}
Confirm.$inject = ['$element', '$scope', '$compile'];
ngModule.component('vnConfirm', {
template: require('./confirm.html'),
template: require('../dialog/dialog.html'),
bindings: {
onOpen: '&?',
onResponse: '&',
question: '@',
message: '@?'

View File

@ -1,5 +0,0 @@
vn-confirm .dialog-title {
color:#424242;
font-family: vn-font-bold;
}

View File

@ -1,12 +1,13 @@
<div ng-mousedown="$ctrl.onDialogMouseDown($event)">
<button ng-click="$ctrl.hide()" class="close" translate-attr="{title: 'Close'}">
<vn-icon vn-one icon="clear" style="color:black"></vn-icon>
<vn-icon icon="clear"></vn-icon>
</button>
<form>
<div ng-transclude="tplBody"></div>
<div
ng-transclude="tplButtons"
class="button-bar"
class="body">
</div>
<div
class="buttons"
ng-click="$ctrl.onButtonClick($event)">
</div>
</form>

View File

@ -4,44 +4,44 @@ import './style.scss';
/**
* Dialog component.
*
* @property {HTMLElement} body The dialog HTML body
* @property {HTMLElement} buttons The dialog HTML buttons
*/
export default class Dialog extends Component {
/**
* Contructor.
*
* @param {HTMLElement} $element The HTML element object
*/
constructor($element) {
constructor($element, $transclude) {
super($element);
$element.addClass('vn-dialog');
this.dialog = $element[0].firstChild;
this.element.addEventListener('mousedown', event => this.onBackgroundMouseDown(event));
this.shown = false;
this.$element.addClass('vn-dialog');
this.element.addEventListener('mousedown',
e => this.onBackgroundMouseDown(e));
if ($transclude) {
$transclude(tClone => {
this.body = tClone[0];
}, null, 'body');
$transclude(tClone => {
this.buttons = tClone[0];
}, null, 'buttons');
}
}
set body(value) {
this.element.querySelector('.body').appendChild(value);
}
set buttons(value) {
this.element.querySelector('.buttons').appendChild(value);
}
/**
* Displays the dialog to the user.
*/
show() {
let style = this.dialog.style;
let window = this.window;
let innerWidth = window.innerWidth;
let innerHeight = window.innerHeight;
let width = this.dialog.offsetWidth;
let height = this.dialog.offsetHeight;
let screenMargin = 20;
let dblMargin = screenMargin * 2;
if (width + screenMargin > innerWidth) {
width = innerWidth - dblMargin;
style.width = width + 'px';
}
if (height + screenMargin > innerHeight) {
height = innerHeight - dblMargin;
style.height = height + 'px';
}
this.keypressHandler = event => this.onKeypress(event);
if (this.shown) return;
this.shown = true;
this.keypressHandler = e => this.onKeypress(e);
this.document.addEventListener('keypress', this.keypressHandler);
this.element.style.display = 'block';
this.element.style.display = 'flex';
this.transitionTimeout =
setTimeout(() => this.$element.addClass('shown'), 30);
if (this.onOpen)
this.onOpen();
@ -65,19 +65,21 @@ export default class Dialog extends Component {
cancel = this.onResponse({response: response});
return cancel;
}
realHide() {
if (!this.shown) return;
this.element.style.display = 'none';
this.document.removeEventListener('keypress', this.keypressHandler);
this.lastEvent = null;
this.shown = false;
this.transitionTimeout =
setTimeout(() => this.$element.removeClass('shown'), 30);
}
onButtonClick(event) {
let buttonBar = this.element.querySelector('.button-bar');
let buttons = buttonBar.querySelector('tpl-buttons');
let buttons = this.element.querySelector('.buttons');
let tplButtons = buttons.querySelector('tpl-buttons');
let node = event.target;
while (node.parentNode != buttons) {
if (node == buttonBar) return;
while (node.parentNode != tplButtons) {
if (node == buttons) return;
node = node.parentNode;
}
@ -85,28 +87,28 @@ export default class Dialog extends Component {
let cancel = this.fireResponse(response);
if (cancel !== false) this.realHide();
}
onDialogMouseDown(event) {
this.lastEvent = event;
}
onBackgroundMouseDown(event) {
if (event != this.lastEvent)
this.hide();
}
onKeypress(event) {
if (event.keyCode == 27) // Esc
this.hide();
}
$onDestroy() {
clearTimeout(this.transitionTimeout);
}
}
Dialog.$inject = ['$element'];
Dialog.$inject = ['$element', '$transclude'];
ngModule.component('vnDialog', {
template: require('./dialog.html'),
transclude: {
tplBody: 'tplBody',
tplButtons: 'tplButtons'
body: 'tplBody',
buttons: 'tplButtons'
},
bindings: {
onOpen: '&?',

View File

@ -9,168 +9,45 @@ describe('Component vnDialog', () => {
beforeEach(angular.mock.inject(_$componentController_ => {
$componentController = _$componentController_;
$element = angular.element('<div></div>');
controller = $componentController('vnDialog', {$element});
$element = angular.element('<vn-dialog></vn-dialog>');
controller = $componentController('vnDialog', {$element: $element, $transclude: null});
}));
describe('show()', () => {
it(`should define keypressHandler function, call addEventListener function and define element.style.display to block then call onOpen function`, () => {
it(`should handle escape keypress event, define element.style.display to not none and call onOpen function`, () => {
window.innerHeight = 600;
window.innerWidth = 800;
controller.dialog = {style: {display: 'none'}};
controller.onOpen = () => {};
controller.dialog = {style: {}, offsetWidth: 780, offsetHeight: 581};
spyOn(controller.document, 'addEventListener');
spyOn(controller, 'onOpen');
controller.show();
expect(controller.keypressHandler).toBeDefined();
expect(controller.document.addEventListener).toHaveBeenCalledWith('keypress', controller.keypressHandler);
expect(controller.element.style.display).toEqual('block');
expect(controller.element.style.display).not.toEqual('none');
expect(controller.onOpen).toHaveBeenCalledWith();
});
it(`should define keypressHandler function, call addEventListener function and define element.style.display to block and never call onOpen function`, () => {
window.innerHeight = 600;
window.innerWidth = 800;
controller.dialog = {style: {}, offsetWidth: 781, offsetHeight: 581};
spyOn(controller.document, 'addEventListener');
controller.show();
expect(controller.keypressHandler).toBeDefined();
expect(controller.document.addEventListener).toHaveBeenCalledWith('keypress', controller.keypressHandler);
expect(controller.element.style.display).toEqual('block');
expect(controller.onOpen).not.toBeDefined();
});
});
describe('hide()', () => {
it(`should call fireResponse() and realHide()`, () => {
spyOn(controller, 'fireResponse');
spyOn(controller, 'realHide');
it(`should call onResponse()`, () => {
controller.onResponse = () => {};
spyOn(controller, 'onResponse');
controller.hide();
expect(controller.fireResponse).toHaveBeenCalledWith();
expect(controller.realHide).toHaveBeenCalledWith();
expect(controller.onResponse).toHaveBeenCalled();
});
});
describe('fireResponse()', () => {
it(`should return cancel as false`, () => {
let result = controller.fireResponse('I am the answer!');
expect(controller.onResponse).not.toBeDefined();
expect(result).toEqual(false);
});
it(`should return onResponse()`, () => {
let text = 'I am the answer!';
controller.onResponse = () => {
return {response: text};
it(`should call onResponse()`, () => {
let resposneRes;
controller.onResponse = response => {
resposneRes = response;
return false;
};
let result = controller.fireResponse(text);
let responseRet = controller.fireResponse('answer');
expect(result.response).toEqual(text);
});
});
describe('realHide()', () => {
it(`should set element.style.display and lastEvent properties and call removeEvenListener()`, () => {
spyOn(controller.document, 'removeEventListener');
expect(controller.element.style.display).not.toEqual('none');
expect(controller.lastEvent).not.toBeDefined();
controller.realHide();
expect(controller.element.style.display).toEqual('none');
expect(controller.document.removeEventListener).toHaveBeenCalledWith('keypress', controller.keypressHandler);
expect(controller.lastEvent).toEqual(null);
});
});
describe('onButtonClick()', () => {
it(`should call realHide if cancel isn't false`, () => {
controller.element = document.createElement('div');
controller.element.className = 'tpl-buttons';
let childElement = document.createElement('div');
childElement.className = 'button-bar';
controller.element.appendChild(childElement);
let event = {target: controller.element, attribute: true};
spyOn(controller, 'realHide');
spyOn(controller, 'fireResponse').and.returnValue(true);
controller.onButtonClick(event);
expect(controller.realHide).toHaveBeenCalledWith();
});
it(`should call fireResponse with the value of response`, () => {
controller.element = document.createElement('div');
controller.element.className = 'tpl-buttons';
let childElement = document.createElement('div');
childElement.className = 'button-bar';
controller.element.appendChild(childElement);
let attribute = document.createAttribute('response');
attribute.value = 'I am the response!';
controller.element.setAttributeNode(attribute);
spyOn(controller, 'fireResponse');
let event = {target: controller.element};
controller.onButtonClick(event);
expect(controller.fireResponse).toHaveBeenCalledWith('I am the response!');
});
});
describe('onDialogMouseDown()', () => {
it(`should set controller's lastEvent property`, () => {
controller.element = document.createElement('div');
let event = {target: controller.element};
controller.onDialogMouseDown(event);
expect(controller.lastEvent).toEqual(event);
});
});
describe('onBackgroundMouseDown()', () => {
it(`shouldn't call hide() function as event equals lastEvent`, () => {
controller.element = document.createElement('div');
let event = {target: controller.element};
controller.lastEvent = event;
spyOn(controller, 'hide');
controller.onBackgroundMouseDown(event);
expect(controller.hide).not.toHaveBeenCalledWith();
});
it(`should call hide() function as event doesn't equal lastEvent`, () => {
controller.element = document.createElement('div');
let event = {target: controller.element};
controller.lastEvent = event;
controller.lastEvent = 'the singularity event!';
spyOn(controller, 'hide');
controller.onBackgroundMouseDown(event);
expect(controller.hide).toHaveBeenCalledWith();
});
});
describe('onKeypress()', () => {
it(`should call hide() if the key pressed equal the code 27`, () => {
controller.element = document.createElement('div');
let event = {target: controller.element};
event.keyCode = 27;
spyOn(controller, 'hide');
controller.onKeypress(event);
expect(controller.hide).toHaveBeenCalledWith();
});
it(`should't call hide() as the key pressed equal the code 999`, () => {
controller.element = document.createElement('div');
let event = {target: controller.element};
event.keyCode = 999;
spyOn(controller, 'hide');
controller.onKeypress(event);
expect(controller.hide).not.toHaveBeenCalledWith();
expect(resposneRes).toEqual({response: 'answer'});
expect(responseRet).toEqual(false);
});
});
});

View File

@ -1,33 +1,19 @@
.vn-dialog {
display: none;
z-index: 100;
justify-content: center;
align-items: center;
z-index: 50;
position: fixed;
left: 0;
top: 0;
height: 100%;
width: 100%;
background-color: rgba(1,1,1,.4);
background-color: rgba(1, 1, 1, .6);
opacity: 0;
transition: opacity 300ms ease-in-out;
button.close {
position: absolute;
top: 0;
right: 0;
border-style: none;
background-color: transparent;
padding: .3em;
cursor: pointer;
vn-icon {
display: block;
i {
display: block;
}
}
&:hover {
background-color: rgba(0, 0, 0, .1);
}
&.shown {
opacity: 1;
}
& > div {
position: relative;
@ -35,34 +21,47 @@
background-color: white;
border-radius: .2em;
overflow: auto;
top: 50%;
left: 50%;
padding: 2em;
box-sizing: border-box;
width: 28em;
margin-top: -10em;
margin-left: -14em;
}
.button-bar {
margin-top: 1.5em;
text-align: right;
tpl-body {
display: block;
width: 20em;
}
button {
background: none;
border: none;
text-transform: uppercase;
font-size: 1.1em;
color: #ffa410;
font-family: vn-font-bold;
background-color: transparent;
border: none;
cursor: pointer;
padding: .5em;
margin: -0.5em;
margin-left: .5em;
transition: background-color 250ms;
border-radius: .1em;
&:hover {
background-color: rgba(1,1,1,.1);
}
}
& > button.close {
position: absolute;
top: 0;
right: 0;
padding: .3em;
& > vn-icon {
display: block;
color: #666;
}
}
& > form > .buttons {
margin-top: 1.5em;
text-align: right;
button {
color: #ffa410;
font-family: vn-font-bold;
padding: .7em;
margin: -0.7em;
margin-left: .7em;
}
}
}
}

View File

@ -1,6 +1,6 @@
vn-drop-down {
position: absolute;
z-index: 9999;
z-index: 10;
padding: 0 15px;
margin-left: -15px;
background: transparent;

View File

@ -1,8 +1,8 @@
vn-icon {
display: inline;
display: inline-block;
font-size: 18pt;
}
vn-icon > i {
vn-icon > i.material-icons {
display: block;
font-size: inherit !important;
font-size: inherit;
}

View File

@ -1,4 +1,4 @@
<div class="mdl-js-snackbar mdl-snackbar" style="z-index: 200;">
<div class="mdl-snackbar__text"></div>
<button class="mdl-snackbar__action" type="button"></button>
<div ng-click="$ctrl.onSnackbarClick($event)">
<button ng-click="$ctrl.onButtonClick()"></button>
<div class="text"></div>
</div>

View File

@ -1,12 +1,19 @@
import ngModule from '../../module';
import Component from '../../lib/component';
import './style.scss';
/**
* A simple component to show non-obstructive notifications to the user.
*/
export default class Controller {
constructor($element) {
export default class Controller extends Component {
constructor($element, $translate) {
super($element);
this.$translate = $translate;
this.shown = false;
this.snackbar = $element[0].firstChild;
componentHandler.upgradeElement(this.snackbar);
this.$snackbar = angular.element(this.snackbar);
this.button = $element[0].querySelector('button');
this.textNode = this.snackbar.querySelector('.text');
}
/**
* Shows a notification.
@ -14,10 +21,76 @@ export default class Controller {
* @param {Object} data The message data
*/
show(data) {
this.snackbar.MaterialSnackbar.showSnackbar(data);
this.clearTimeouts();
this.shown = true;
this.textNode.textContent = data.message;
this.actionHandler = data.actionHandler;
this.button.textContent =
data.actionText || this.$translate.instant('Hide');
this.documentClickHandler = e => this.onDocumentClick(e);
document.addEventListener('click', this.documentClickHandler);
this.timeoutId = setTimeout(() => this.hide(),
data.timeout || 6000);
this.transitionTimeout =
setTimeout(() => this.$snackbar.addClass('shown'), 30);
}
/**
* Shows an error.
*
* @param {Object} data The message data
*/
showError(data) {
this.$snackbar.addClass('error');
this.show(data);
}
/**
* Hides the snackbar.
*/
hide() {
if (!this.shown) return;
clearTimeout(this.timeoutId);
document.removeEventListener('click', this.documentClickHandler);
this.shown = false;
this.hideTimeout = setTimeout(() => this.onTransitionEnd(), 250);
this.transitionTimeout =
setTimeout(() => this.$snackbar.removeClass('shown'), 30);
}
onTransitionEnd() {
this.$snackbar.removeClass('error');
this.textNode.textContent = '';
this.button.textContent = '';
this.actionHandler = null;
}
onDocumentClick(event) {
if (event === this.event) return;
this.hide();
}
onSnackbarClick(event) {
this.event = event;
}
onButtonClick() {
if (this.actionHandler)
this.actionHandler();
else
this.hide();
}
clearTimeouts() {
clearTimeout(this.timeoutId);
clearTimeout(this.hideTimeout);
clearTimeout(this.transitionTimeout);
this.timeoutId = null;
this.hideTimeout = null;
this.transitionTimeout = null;
}
$onDestroy() {
this.clearTimeouts();
}
}
Controller.$inject = ['$element'];
Controller.$inject = ['$element', '$translate'];
ngModule.component('vnSnackbar', {
template: require('./snackbar.html'),

View File

@ -0,0 +1,48 @@
vn-snackbar > div {
box-sizing: border-box;
background-color: #333;
color: white;
position: fixed;
bottom: 0;
left: 50%;
width: 20em;
margin-left: -10em;
padding: 1em;
border-top-left-radius: .2em;
border-top-right-radius: .2em;
transform: translateY(10em);
transition: transform 300ms ease-in-out;
z-index: 100;
box-shadow: 0 0 .4em rgba(1,1,1,.4);
&.shown {
transform: translateY(0);
}
&.notice {
background-color: #1e88e5;
& > button {
color: rgba(1, 1, 1, 0.6);
}
}
&.error {
background-color: #c62828;
& > button {
color: rgba(1, 1, 1, 0.6);
}
}
& > button {
cursor: pointer;
float: right;
text-transform: uppercase;
border: none;
background-color: transparent;
font-weight: bold;
color: #ffab40;
padding: 1em;
margin: -1em;
padding-left: 1.5em;
margin-left: 0;
}
}

View File

@ -10,9 +10,33 @@ vn-textfield {
margin: 21px 0px;
background: white;
opacity: 1;
z-index: 9999;
z-index: 1;
color: #aaa;
}
.mdl-textfield {
width: 100%;
}
.mdl-textfield__error {
visibility: visible;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
}
.mdl-textfield.invalid {
.mdl-textfield__input {
border-color: #d50000;
box-shadow: none;
}
.mdl-textfield__label::after {
background-color: #d50000;
}
}
.mdl-textfield--floating-label.invalid .mdl-textfield__label {
color: #d50000;
font-size: 12px;
top: 4px;
}
.material-icons {
font-size: 18px;
float: right;

View File

@ -2,8 +2,8 @@ import ngModule from '../module';
import {kebabToCamel} from '../lib/string';
/**
* Registers the element controller into its scope as a
* property whose name is the directive value.
* Registers the element controller into the scope as a property whose name is
* the directive value transformed to lowerCamelCase.
*
* @return {Object} The directive
*/
@ -12,7 +12,8 @@ export function directive() {
restrict: 'A',
link: function($scope, $element, $attrs) {
let id = kebabToCamel($attrs.vnId);
let controller = $element.controller($element[0].tagName.toLowerCase());
let controller = $element[0].$ctrl ?
$element[0].$ctrl : $element.controller($element[0].tagName.toLowerCase());
if (!id)
throw new Error(`vnId: Attribute can't be null`);

View File

@ -24,7 +24,7 @@ describe('Directive dialog', () => {
$componentController = _$componentController_;
_$httpBackend_.when('GET', /\/locale\/\w+\/[a-z]{2}\.json/).respond({});
$element = angular.element('<div></div>');
controller = $componentController('vnDialog', {$element});
controller = $componentController('vnDialog', {$element: $element, $transclude: null});
}));
it('should call show() function if dialog is a instance of vnDialog', () => {

View File

@ -11,15 +11,13 @@ export default class App {
this.loaderStatus = 0;
this.$rootScope = $rootScope;
}
show(message) {
this.timeout = window.snackbarTimeout || 2000;
if (this.snackbar) this.snackbar.show({message: message, timeout: this.timeout});
}
showMessage(message) {
this.show(message);
if (this.snackbar)
this.snackbar.show({message: message});
}
showError(message) {
this.show(`Error: ${message}`);
if (this.snackbar)
this.snackbar.showError({message: `Error: ${message}`});
}
pushLoader() {
this.loaderStatus++;

View File

@ -21,9 +21,10 @@ export default class Component {
* @param {$rootScope.Scope} $scope The element scope
*/
constructor($element, $scope) {
this.$ = $scope;
this.$element = $element;
this.element = $element[0];
this.element.$ctrl = this;
this.$element = $element;
this.$ = $scope;
}
}
Component.$inject = ['$element', '$scope'];

View File

@ -4,4 +4,7 @@ Close: Close
Clear: Clear
Save: Save
Add: Add
Search: Search
Search: Search
Show More: Show More
No more results: No more results
Hide: Hide

View File

@ -6,4 +6,5 @@ Save: Guardar
Add: Añadir
Search: Buscar
Show More: Ver más
No more results : No hay más resultados
No more results: No hay más resultados
Hide: Ocultar

View File

@ -6,11 +6,6 @@ body {
line-height: initial;
font-size: 12pt;
}
.mdl-textfield {
width: 100%;
}
.mdl-button {
font-weight: bolder;
color: #ffa410;
@ -32,33 +27,3 @@ body {
background-color: #ff9400 !important;
}
.mdl-dialog__actions--full-width>*{
text-align: center;
}
.mdl-dialog{
width: 400px;
font-family: vn-font;
line-height: 60px;
text-align: center;
}
.mdl-textfield__error {
visibility: visible;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
}
.mdl-textfield.invalid .mdl-textfield__input {
border-color: #d50000;
box-shadow: none;
}
.mdl-textfield.invalid .mdl-textfield__label::after {
background-color: #d50000;
}
.mdl-textfield--floating-label.invalid .mdl-textfield__label {
color: #d50000;
font-size: 12px;
top: 4px;
}

View File

@ -1,6 +1,7 @@
import config from './config.js';
import Nightmare from 'nightmare';
import selectors from './selectors.js';
import {URL} from 'url';
function child(selector, childNumber) {
let aux = selector.split(' ');
@ -17,6 +18,37 @@ Nightmare.action('login', function(done) {
.then(done);
});
Nightmare.action('changeLanguageToEnglish', function(done) {
this.wait('#lang-button')
.evaluate(selector => {
return document.querySelector(selector).title;
}, '#lang-button')
.then(title => {
if (title === 'Change language') {
this.then(done);
} else {
this.click('#lang-button')
.click('#langs > li[name="en"]')
.then(done);
}
});
});
Nightmare.action('waitForLogin', function(done) {
this.login()
.waitForURL('#!/')
.url()
.changeLanguageToEnglish()
.then(done);
});
Nightmare.action('urlParsed', function(done) {
this.url()
.then(url => {
done(null, new URL(url));
});
});
Nightmare.action('getInnerText', function(selector, done) {
this.wait(selector)
.evaluate_now(function(elementToSelect) {
@ -134,29 +166,39 @@ Nightmare.action('waitForTextInInput', function(selector, name, done) {
.then(done);
});
Nightmare.action('changeLanguageToEnglish', function(done) {
this.wait('#lang-button')
.evaluate(selector => {
return document.querySelector(selector).title;
}, '#lang-button')
.then(title => {
if (title === 'Change language') {
this.then(done);
} else {
this.click('#lang-button')
.click('#langs > li[name="en"]')
.then(done);
}
});
Nightmare.action('waitForInnerText', function(selector, done) {
this.wait(selector)
.wait(selector => {
let innerText = document.querySelector(selector).innerText;
return innerText != null && innerText != '';
}, selector)
.evaluate_now(selector => {
return document.querySelector(selector).innerText;
}, done, selector);
});
Nightmare.action('waitForEmptyInnerText', function(selector, done) {
this.wait(selector => {
return document.querySelector(selector).innerText == '';
}, selector)
.then(done);
});
Nightmare.action('waitForSnackbarReset', function(done) {
this.wait(() => {
return document.querySelector('vn-snackbar').innerText === '';
})
this.click('vn-snackbar button')
.waitForEmptyInnerText('vn-snackbar .text')
.then(done);
});
Nightmare.action('waitForSnackbar', function(done) {
this.wait(200)
.waitForInnerText('vn-snackbar .text')
.then(value => {
this.waitForSnackbarReset()
.then(() => done(null, value));
});
});
Nightmare.action('waitForURL', function(hashURL, done) {
this.wait(hash => {
return document.location.hash.includes(hash);

19
e2e/helpers/helpers.js Normal file
View File

@ -0,0 +1,19 @@
import createNightmare from './nightmare';
export default myCreateNightmare;
function myCreateNightmare() {
let nightmare = createNightmare();
nightmare.header('Accept-Language', 'en');
beforeAll(() => {
return nightmare
.waitForLogin();
});
afterAll(() => {
return nightmare
.end();
});
return nightmare;
}

View File

@ -22,3 +22,5 @@ export default function createNightmare(width = 1280, height = 720) {
});
return nightmare;
}
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

View File

@ -1,2 +0,0 @@
// snackbar default 2500 and jasmine timeout should be 10000
window.snackbarTimeout = 400;

View File

@ -10,7 +10,7 @@ export default {
globalItems: {
topBar: `${components.vnTopbar}`,
logOutButton: `${components.vnIcon}[icon="exit_to_app"]`,
snackbarIsActive: '.mdl-snackbar--active > .mdl-snackbar__text',
snackbarIsActive: 'vn-snackbar .text',
applicationsMenuButton: `${components.vnIcon}[icon="apps"]`,
applicationsMenuVisible: `${components.vnMainMenu} .is-visible > div`,
clientsButton: `${components.vnMainMenu} > div > ul > li:nth-child(1)`
@ -54,7 +54,7 @@ export default {
socialNameInput: `${components.vnTextfield}[name="socialName"]`,
fiscalIdInput: `${components.vnTextfield}[name="fi"]`,
equalizationTaxCheckboxLabel: `${components.vnCheck}[label='Is equalizated'] > label > input`,
acceptPropagationButton: `body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-main-block > vn-horizontal > vn-one > vn-vertical > vn-client-fiscal-data > vn-confirm > div > form > div.button-bar > tpl-buttons > button:nth-child(2)`,
acceptPropagationButton: `vn-client-fiscal-data > vn-confirm button[response=ACCEPT]`,
addressInput: `${components.vnTextfield}[name="street"]`,
cityInput: `${components.vnTextfield}[name="city"]`,
postcodeInput: `${components.vnTextfield}[name="postcode"]`,
@ -77,7 +77,7 @@ export default {
payMethodOptionOne: `${components.vnAutocomplete}[field="$ctrl.client.payMethodFk"] > vn-vertical > vn-drop-down > vn-vertical:not(.ng-hide) > vn-auto:nth-child(2) > ul > li:nth-child(2)`,
IBANInput: `${components.vnTextfield}[name="iban"]`,
dueDayInput: `${components.vnTextfield}[name="dueDay"]`,
cancelNotificationButton: 'vn-client-billing-data > vn-dialog tpl-buttons > button:nth-child(1)',
cancelNotificationButton: 'vn-client-billing-data > vn-confirm button[response=CANCEL]',
receivedCoreVNHCheckbox: `${components.vnCheck}[label='Received core VNH'] > label > input`,
receivedCoreVNLCheckbox: `${components.vnCheck}[label='Received core VNL'] > label > input`,
receivedB2BVNLCheckbox: `${components.vnCheck}[label='Received B2B VNL'] > label > input`,

View File

@ -1,48 +1,21 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import selectors from '../../helpers/selectors';
import createNightmare from '../../helpers/helpers';
describe('create client path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
let nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should access to the clients index by clicking the clients button', done => {
nightmare
it('should access to the clients index by clicking the clients button', () => {
return nightmare
.click(selectors.moduleAccessView.clientsSectionButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it(`should search for the user Carol Danvers to confirm it isn't created yet`, done => {
nightmare
it(`should search for the user Carol Danvers to confirm it isn't created yet`, () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Carol Danvers')
.click(selectors.clientsIndex.searchButton)
@ -50,142 +23,107 @@ describe('create client path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(0);
done();
})
.catch(catchErrors(done));
});
});
it('should access to the create client view by clicking the create-client floating button', done => {
nightmare
it('should access to the create client view by clicking the create-client floating button', () => {
return nightmare
.click(selectors.clientsIndex.createClientButton)
.wait(selectors.createClientView.createButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/create');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/create');
});
});
it('should receive an error when clicking the create button having all the form fields empty', done => {
nightmare
it('should receive an error when clicking the create button having all the form fields empty', () => {
return nightmare
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the create button having all the form fields empty but name', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the create button having all the form fields empty but name', () => {
return nightmare
.type(selectors.createClientView.name, 'Carol Danvers')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the create button having all the form fields empty but Tax Number', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the create button having all the form fields empty but Tax Number', () => {
return nightmare
.clearInput(selectors.createClientView.name)
.type(selectors.createClientView.taxNumber, 'AVG tax')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the create button having all the form fields empty but Business Name', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the create button having all the form fields empty but Business Name', () => {
return nightmare
.clearInput(selectors.createClientView.taxNumber)
.type(selectors.createClientView.socialName, 'Avengers team')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the create button having all the form fields empty but User Name', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the create button having all the form fields empty but User Name', () => {
return nightmare
.clearInput(selectors.createClientView.socialName)
.type(selectors.createClientView.userName, 'CaptainMarvel')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the create button having all the form fields empty but email while email have incorrect format', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the create button having all the form fields empty but email while email have incorrect format', () => {
return nightmare
.clearInput(selectors.createClientView.userName)
.type(selectors.createClientView.email, 'I will save the Avengers!')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the create button having all the form fields empty but email', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the create button having all the form fields empty but email', () => {
return nightmare
.clearInput(selectors.createClientView.email)
.type(selectors.createClientView.email, 'CarolDanvers@verdnatura.es')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the create button having all the form fields empty but sales person', done => {
nightmare
it('should receive an error when clicking the create button having all the form fields empty but sales person', () => {
return nightmare
.waitToClick(selectors.createClientView.salesPersonInput)
.waitToClick(selectors.createClientView.salesBruceBannerOption)
.wait(200)
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it(`should create a new user with all it's data`, done => {
nightmare
.waitForSnackbarReset()
it(`should create a new user with all it's data`, () => {
return nightmare
.wait(selectors.createClientView.email)
.clearInput(selectors.createClientView.email)
.type(selectors.createClientView.name, 'Carol Danvers')
@ -194,31 +132,26 @@ describe('create client path', () => {
.type(selectors.createClientView.userName, 'CaptainMarvel')
.type(selectors.createClientView.email, 'CarolDanvers@verdnatura.es')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it(`should search for the user Carol Danvers to confirm it exists`, done => {
nightmare
it(`should search for the user Carol Danvers to confirm it exists`, () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Carol Danvers')
.click(selectors.clientsIndex.searchButton)
@ -226,8 +159,6 @@ describe('create client path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
});

View File

@ -1,50 +1,23 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import createNightmare from '../../helpers/helpers';
describe('Edit basicData path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
const nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it('should search for the user Bruce Wayne', done => {
nightmare
it('should search for the user Bruce Wayne', () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Bruce Wayne')
.click(selectors.clientsIndex.searchButton)
@ -52,42 +25,34 @@ describe('Edit basicData path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
it('should click on the search result to access to the clients basic data', done => {
nightmare
it('should click on the search result to access to the clients basic data', () => {
return nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Bruce Wayne')
.waitToClick(selectors.clientsIndex.searchResult)
.waitForURL('basic-data')
.url()
.then(url => {
expect(url).toContain('basic-data');
done();
})
.catch(catchErrors(done));
});
});
it('should edit the name', done => {
nightmare
it('should edit the name', () => {
return nightmare
.wait(selectors.clientBasicData.nameInput)
.clearInput(selectors.clientBasicData.nameInput)
.type(selectors.clientBasicData.nameInput, 'Ororo Munroe')
.click(selectors.clientBasicData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the name have been edited', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the name have been edited', () => {
return nightmare
.click(selectors.clientFiscalData.fiscalDataButton)
.wait(selectors.clientFiscalData.addressInput)
.click(selectors.clientBasicData.basicDataButton)
@ -95,29 +60,23 @@ describe('Edit basicData path', () => {
.getInputValue(selectors.clientBasicData.nameInput)
.then(result => {
expect(result).toEqual('Ororo Munroe');
done();
})
.catch(catchErrors(done));
});
});
it('should edit the contact name', done => {
nightmare
it('should edit the contact name', () => {
return nightmare
.wait(selectors.clientBasicData.contactInput)
.clearInput(selectors.clientBasicData.contactInput)
.type(selectors.clientBasicData.contactInput, 'Black Panther')
.click(selectors.clientBasicData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the contact name have been edited', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the contact name have been edited', () => {
return nightmare
.click(selectors.clientFiscalData.fiscalDataButton)
.wait(selectors.clientFiscalData.addressInput)
.click(selectors.clientBasicData.basicDataButton)
@ -125,29 +84,23 @@ describe('Edit basicData path', () => {
.getInputValue(selectors.clientBasicData.contactInput)
.then(result => {
expect(result).toEqual('Black Panther');
done();
})
.catch(catchErrors(done));
});
});
it('should add the landline phone number', done => {
nightmare
it('should add the landline phone number', () => {
return nightmare
.wait(selectors.clientBasicData.phoneInput)
.clearInput(selectors.clientBasicData.phoneInput)
.type(selectors.clientBasicData.phoneInput, '123456789')
.click(selectors.clientBasicData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the landline phone number have been added', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the landline phone number have been added', () => {
return nightmare
.click(selectors.clientFiscalData.fiscalDataButton)
.wait(selectors.clientFiscalData.addressInput)
.click(selectors.clientBasicData.basicDataButton)
@ -155,29 +108,23 @@ describe('Edit basicData path', () => {
.getInputValue(selectors.clientBasicData.phoneInput)
.then(result => {
expect(result).toEqual('123456789');
done();
})
.catch(catchErrors(done));
});
});
it('should add the mobile phone number', done => {
nightmare
it('should add the mobile phone number', () => {
return nightmare
.wait(selectors.clientBasicData.mobileInput)
.clearInput(selectors.clientBasicData.mobileInput)
.type(selectors.clientBasicData.mobileInput, '987654321')
.click(selectors.clientBasicData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the mobile phone number have been added', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the mobile phone number have been added', () => {
return nightmare
.click(selectors.clientFiscalData.fiscalDataButton)
.wait(selectors.clientFiscalData.addressInput)
.click(selectors.clientBasicData.basicDataButton)
@ -185,29 +132,23 @@ describe('Edit basicData path', () => {
.getInputValue(selectors.clientBasicData.mobileInput)
.then(result => {
expect(result).toEqual('987654321');
done();
})
.catch(catchErrors(done));
});
});
it('should edit the email', done => {
nightmare
it('should edit the email', () => {
return nightmare
.wait(selectors.clientBasicData.emailInput)
.clearInput(selectors.clientBasicData.emailInput)
.type(selectors.clientBasicData.emailInput, 'Storm@verdnatura.es')
.click(selectors.clientBasicData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the email have been edited', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the email have been edited', () => {
return nightmare
.click(selectors.clientFiscalData.fiscalDataButton)
.wait(selectors.clientFiscalData.addressInput)
.click(selectors.clientBasicData.basicDataButton)
@ -215,29 +156,23 @@ describe('Edit basicData path', () => {
.getInputValue(selectors.clientBasicData.emailInput)
.then(result => {
expect(result).toEqual('Storm@verdnatura.es');
done();
})
.catch(catchErrors(done));
});
});
it('should select the sales person', done => {
nightmare
it('should select the sales person', () => {
return nightmare
.waitToClick(selectors.clientBasicData.salesPersonInput)
.waitToClick(selectors.clientBasicData.salesBruceBannerOption)
.wait(200)
.waitToClick(selectors.clientBasicData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the sales person have been selected', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the sales person have been selected', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.wait(selectors.clientFiscalData.addressInput)
.waitToClick(selectors.clientBasicData.basicDataButton)
@ -245,29 +180,23 @@ describe('Edit basicData path', () => {
.getInputValue(selectors.clientBasicData.salesPersonInput)
.then(result => {
expect(result).toEqual('Bruce Banner');
done();
})
.catch(catchErrors(done));
});
});
it('should select the channel', done => {
nightmare
it('should select the channel', () => {
return nightmare
.waitToClick(selectors.clientBasicData.channelInput)
.waitToClick(selectors.clientBasicData.channelMetropolisOption)
.wait(400)
.waitToClick(selectors.clientBasicData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the channel have been selected', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the channel have been selected', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.wait(selectors.clientFiscalData.addressInput)
.waitToClick(selectors.clientBasicData.basicDataButton)
@ -275,8 +204,6 @@ describe('Edit basicData path', () => {
.getInputValue(selectors.clientBasicData.channelInput)
.then(result => {
expect(result).toEqual('Metropolis newspaper');
done();
})
.catch(catchErrors(done));
});
});
});

View File

@ -1,50 +1,23 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import createNightmare from '../../helpers/helpers';
describe('Edit fiscalData path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
const nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it('should search for the user Bruce Banner', done => {
nightmare
it('should search for the user Bruce Banner', () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Bruce Banner')
.click(selectors.clientsIndex.searchButton)
@ -52,14 +25,12 @@ describe('Edit fiscalData path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
describe('Confirm all addresses have EQtax false for future propagation test', () => {
it(`should click on the search result to access to the client's addresses`, done => {
nightmare
it(`should click on the search result to access to the client's addresses`, () => {
return nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Bruce Banner')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientAddresses.addressesButton)
@ -67,13 +38,11 @@ describe('Edit fiscalData path', () => {
.url()
.then(url => {
expect(url).toContain('/addresses/list');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the 1st edit icon to check EQtax is checked`, done => {
nightmare
it(`should click on the 1st edit icon to check EQtax is checked`, () => {
return nightmare
.waitToClick(selectors.clientAddresses.firstEditButton)
.wait(selectors.clientAddresses.equalizationTaxCheckboxLabel)
.wait(200)
@ -82,13 +51,11 @@ describe('Edit fiscalData path', () => {
}, selectors.clientAddresses.equalizationTaxCheckboxLabel)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
it(`should go back to addresses then select the second one and confirm the EQtax is checked`, done => {
nightmare
it(`should go back to addresses then select the second one and confirm the EQtax is checked`, () => {
return nightmare
.waitToClick(selectors.clientAddresses.addressesButton)
.waitToClick(selectors.clientAddresses.secondEditButton)
.wait(selectors.clientAddresses.equalizationTaxCheckboxLabel)
@ -98,42 +65,34 @@ describe('Edit fiscalData path', () => {
}, selectors.clientAddresses.equalizationTaxCheckboxLabel)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
});
it(`should click on the fiscal data button to start editing`, done => {
nightmare
it(`should click on the fiscal data button to start editing`, () => {
return nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitForURL('fiscal-data')
.url()
.then(url => {
expect(url).toContain('fiscal-data');
done();
})
.catch(catchErrors(done));
});
});
it('should edit the social name', done => {
nightmare
it('should edit the social name', () => {
return nightmare
.wait(selectors.clientFiscalData.socialNameInput)
.clearInput(selectors.clientFiscalData.socialNameInput)
.type(selectors.clientFiscalData.socialNameInput, 'Hulk edited')
.click(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the social name have been edited', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the social name have been edited', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
@ -141,29 +100,23 @@ describe('Edit fiscalData path', () => {
.getInputValue(selectors.clientFiscalData.socialNameInput)
.then(result => {
expect(result).toEqual('Hulk edited');
done();
})
.catch(catchErrors(done));
});
});
it('should edit the fiscal id', done => {
nightmare
it('should edit the fiscal id', () => {
return nightmare
.wait(selectors.clientFiscalData.fiscalIdInput)
.clearInput(selectors.clientFiscalData.fiscalIdInput)
.type(selectors.clientFiscalData.fiscalIdInput, '94980061C')
.click(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the fiscal id have been edited', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the fiscal id have been edited', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
@ -171,39 +124,30 @@ describe('Edit fiscalData path', () => {
.getInputValue(selectors.clientFiscalData.fiscalIdInput)
.then(result => {
expect(result).toEqual('94980061C');
done();
})
.catch(catchErrors(done));
});
});
it('should check the Equalization tax checkbox', done => {
nightmare
it('should check the Equalization tax checkbox', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.equalizationTaxCheckboxLabel)
.waitToClick(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should propagate the Equalization tax', done => {
nightmare
it('should propagate the Equalization tax', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.acceptPropagationButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
expect(result).toEqual('Equivalent tax spreaded');
});
});
it('should confirm Equalization tax checkbox is checked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm Equalization tax checkbox is checked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
@ -213,26 +157,22 @@ describe('Edit fiscalData path', () => {
}, selectors.clientFiscalData.equalizationTaxCheckboxLabel)
.then(value => {
expect(value).toBeTruthy();
done();
})
.catch(catchErrors(done));
});
});
describe('Confirm all addresses have now EQtax checked', () => {
it(`should click on the addresses button to access to the client's addresses`, done => {
nightmare
it(`should click on the addresses button to access to the client's addresses`, () => {
return nightmare
.waitToClick(selectors.clientAddresses.addressesButton)
.waitForURL('/addresses/list')
.url()
.then(url => {
expect(url).toContain('/addresses/list');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the 1st edit icon to confirm EQtax is checked`, done => {
nightmare
it(`should click on the 1st edit icon to confirm EQtax is checked`, () => {
return nightmare
.waitToClick(selectors.clientAddresses.firstEditButton)
.wait(selectors.clientAddresses.equalizationTaxCheckboxLabel)
.wait(200)
@ -241,13 +181,11 @@ describe('Edit fiscalData path', () => {
}, selectors.clientAddresses.equalizationTaxCheckboxLabel)
.then(value => {
expect(value).toBeTruthy();
done();
})
.catch(catchErrors(done));
});
});
it(`should go back to addresses then select the second one and confirm the EQtax is checked`, done => {
nightmare
it(`should go back to addresses then select the second one and confirm the EQtax is checked`, () => {
return nightmare
.waitToClick(selectors.clientAddresses.addressesButton)
.waitToClick(selectors.clientAddresses.secondEditButton)
.wait(selectors.clientAddresses.equalizationTaxCheckboxLabel)
@ -257,31 +195,25 @@ describe('Edit fiscalData path', () => {
}, selectors.clientAddresses.equalizationTaxCheckboxLabel)
.then(value => {
expect(value).toBeTruthy();
done();
})
.catch(catchErrors(done));
});
});
});
it('should go to fiscal data then edit the address', done => {
nightmare
it('should go to fiscal data then edit the address', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.wait(selectors.clientFiscalData.addressInput)
.clearInput(selectors.clientFiscalData.addressInput)
.type(selectors.clientFiscalData.addressInput, 'Somewhere edited')
.click(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the address have been edited', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the address have been edited', () => {
return nightmare
.click(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.click(selectors.clientFiscalData.fiscalDataButton)
@ -289,29 +221,23 @@ describe('Edit fiscalData path', () => {
.getInputValue(selectors.clientFiscalData.addressInput)
.then(result => {
expect(result).toEqual('Somewhere edited');
done();
})
.catch(catchErrors(done));
});
});
it('should edit the city', done => {
nightmare
it('should edit the city', () => {
return nightmare
.wait(selectors.clientFiscalData.cityInput)
.clearInput(selectors.clientFiscalData.cityInput)
.type(selectors.clientFiscalData.cityInput, 'N/A')
.click(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the city have been edited', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the city have been edited', () => {
return nightmare
.click(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.click(selectors.clientFiscalData.fiscalDataButton)
@ -319,29 +245,23 @@ describe('Edit fiscalData path', () => {
.getInputValue(selectors.clientFiscalData.cityInput)
.then(result => {
expect(result).toEqual('N/A');
done();
})
.catch(catchErrors(done));
});
});
it('should edit the postcode', done => {
nightmare
it('should edit the postcode', () => {
return nightmare
.wait(selectors.clientFiscalData.postcodeInput)
.clearInput(selectors.clientFiscalData.postcodeInput)
.type(selectors.clientFiscalData.postcodeInput, '12345')
.click(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the postcode have been edited', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the postcode have been edited', () => {
return nightmare
.click(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.click(selectors.clientFiscalData.fiscalDataButton)
@ -349,29 +269,23 @@ describe('Edit fiscalData path', () => {
.getInputValue(selectors.clientFiscalData.postcodeInput)
.then(result => {
expect(result).toEqual('12345');
done();
})
.catch(catchErrors(done));
});
});
it(`should edit the province`, done => {
nightmare
it(`should edit the province`, () => {
return nightmare
.waitToClick(selectors.clientFiscalData.provinceInput)
.waitToClick(selectors.clientFiscalData.provinceFifthOption)
.wait(200)
.waitToClick(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it(`should confirm the province have been selected`, done => {
nightmare
.waitForSnackbarReset()
it(`should confirm the province have been selected`, () => {
return nightmare
.click(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.click(selectors.clientFiscalData.fiscalDataButton)
@ -379,27 +293,21 @@ describe('Edit fiscalData path', () => {
.getInputValue(selectors.clientFiscalData.provinceInput)
.then(result => {
expect(result).toEqual('Province two');
done();
})
.catch(catchErrors(done));
});
});
it('should uncheck the active checkbox', done => {
nightmare
it('should uncheck the active checkbox', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.activeCheckboxLabel)
.waitToClick(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm active checkbox is unchecked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm active checkbox is unchecked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
@ -409,27 +317,21 @@ describe('Edit fiscalData path', () => {
}, selectors.clientFiscalData.activeCheckboxLabel)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
it('should uncheck the invoice by address checkbox', done => {
nightmare
it('should uncheck the invoice by address checkbox', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.invoiceByAddressCheckboxInput)
.waitToClick(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm invoice by address checkbox is unchecked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm invoice by address checkbox is unchecked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
@ -439,27 +341,21 @@ describe('Edit fiscalData path', () => {
}, selectors.clientFiscalData.invoiceByAddressCheckboxInput)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
it('should check the Verified data checkbox', done => {
nightmare
it('should check the Verified data checkbox', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.verifiedDataCheckboxInput)
.waitToClick(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm Verified data checkbox is unchecked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm Verified data checkbox is unchecked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
@ -469,27 +365,21 @@ describe('Edit fiscalData path', () => {
}, selectors.clientFiscalData.verifiedDataCheckboxInput)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
it('should uncheck the Has to invoice checkbox', done => {
nightmare
it('should uncheck the Has to invoice checkbox', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.hasToInvoiceCheckboxLabel)
.waitToClick(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm Has to invoice checkbox is unchecked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm Has to invoice checkbox is unchecked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
@ -499,27 +389,21 @@ describe('Edit fiscalData path', () => {
}, selectors.clientFiscalData.hasToInvoiceCheckboxLabel)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
it('should uncheck the Invoice by mail checkbox', done => {
nightmare
it('should uncheck the Invoice by mail checkbox', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.invoiceByMailCheckboxLabel)
.waitToClick(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm Invoice by mail checkbox is unchecked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm Invoice by mail checkbox is unchecked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
@ -529,27 +413,21 @@ describe('Edit fiscalData path', () => {
}, selectors.clientFiscalData.invoiceByMailCheckboxLabel)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
it('should check the Vies checkbox', done => {
nightmare
it('should check the Vies checkbox', () => {
return nightmare
.waitToClick(selectors.clientFiscalData.viesCheckboxInput)
.waitToClick(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm Vies checkbox is checked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm Vies checkbox is checked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
@ -559,8 +437,6 @@ describe('Edit fiscalData path', () => {
}, selectors.clientFiscalData.viesCheckboxInput)
.then(value => {
expect(value).toBeTruthy();
done();
})
.catch(catchErrors(done));
});
});
});

View File

@ -1,50 +1,23 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import createNightmare from '../../helpers/helpers';
describe('Edit pay method path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
const nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it('should search for the user Bruce Banner', done => {
nightmare
it('should search for the user Bruce Banner', () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Bruce Banner')
.click(selectors.clientsIndex.searchButton)
@ -52,13 +25,11 @@ describe('Edit pay method path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the search result to access to the client's pay method`, done => {
nightmare
it(`should click on the search result to access to the client's pay method`, () => {
return nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Bruce Banner')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientPayMethod.payMethodButton)
@ -66,30 +37,24 @@ describe('Edit pay method path', () => {
.url()
.then(url => {
expect(url).toContain('billing-data');
done();
})
.catch(catchErrors(done));
});
});
it(`should edit the Pay method to any without IBAN`, done => {
nightmare
it(`should edit the Pay method to any without IBAN`, () => {
return nightmare
.waitToClick(selectors.clientPayMethod.payMethodInput)
.waitToClick(selectors.clientPayMethod.payMethodOptionOne)
.wait(200)
.waitToClick(selectors.clientPayMethod.saveButton)
.waitToClick(selectors.clientPayMethod.cancelNotificationButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it(`should confirm the Pay method have been selected`, done => {
nightmare
.waitForSnackbarReset()
it(`should confirm the Pay method have been selected`, () => {
return nightmare
.click(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.click(selectors.clientPayMethod.payMethodButton)
@ -97,45 +62,36 @@ describe('Edit pay method path', () => {
.getInputValue(selectors.clientPayMethod.payMethodInput)
.then(result => {
expect(result).toEqual('PayMethod one');
done();
})
.catch(catchErrors(done));
});
});
it(`should receive an error when changing payMethod to IBAN without an IBAN entered`, done => {
nightmare
it(`should receive an error when changing payMethod to IBAN without an IBAN entered`, () => {
return nightmare
.waitToClick(selectors.clientPayMethod.payMethodInput)
.waitToClick(selectors.clientPayMethod.payMethodIBANOption)
.wait(200)
.waitToClick(selectors.clientPayMethod.saveButton)
.waitToClick(selectors.clientPayMethod.cancelNotificationButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Error');
done();
})
.catch(catchErrors(done));
});
});
it(`should add the IBAN`, done => {
nightmare
it(`should add the IBAN`, () => {
return nightmare
.clearInput(selectors.clientPayMethod.IBANInput)
.type(selectors.clientPayMethod.IBANInput, 'ES91 2100 0418 4502 0005 1332')
.waitToClick(selectors.clientPayMethod.saveButton)
.waitToClick(selectors.clientPayMethod.cancelNotificationButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it(`should confirm the IBAN pay method is sucessfully saved`, done => {
nightmare
.waitForSnackbarReset()
it(`should confirm the IBAN pay method is sucessfully saved`, () => {
return nightmare
.click(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.click(selectors.clientPayMethod.payMethodButton)
@ -143,29 +99,23 @@ describe('Edit pay method path', () => {
.getInputValue(selectors.clientPayMethod.payMethodInput)
.then(result => {
expect(result).toEqual('PayMethod with IBAN');
done();
})
.catch(catchErrors(done));
});
});
it(`should edit the due day`, done => {
nightmare
it(`should edit the due day`, () => {
return nightmare
.clearInput(selectors.clientPayMethod.dueDayInput)
.type(selectors.clientPayMethod.dueDayInput, '60')
.waitToClick(selectors.clientPayMethod.saveButton)
.waitToClick(selectors.clientPayMethod.cancelNotificationButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the due day have been edited', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the due day have been edited', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientPayMethod.payMethodButton)
@ -173,27 +123,21 @@ describe('Edit pay method path', () => {
.getInputValue(selectors.clientPayMethod.dueDayInput)
.then(result => {
expect(result).toEqual('60');
done();
})
.catch(catchErrors(done));
});
});
it('should uncheck the Received core VNH checkbox', done => {
nightmare
it('should uncheck the Received core VNH checkbox', () => {
return nightmare
.waitToClick(selectors.clientPayMethod.receivedCoreVNHCheckbox)
.waitToClick(selectors.clientPayMethod.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm Received core VNH checkbox is unchecked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm Received core VNH checkbox is unchecked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientPayMethod.payMethodButton)
@ -203,27 +147,21 @@ describe('Edit pay method path', () => {
}, selectors.clientPayMethod.receivedCoreVNHCheckbox)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
it('should uncheck the Received core VNL checkbox', done => {
nightmare
it('should uncheck the Received core VNL checkbox', () => {
return nightmare
.waitToClick(selectors.clientPayMethod.receivedCoreVNLCheckbox)
.waitToClick(selectors.clientPayMethod.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm Received core VNL checkbox is unchecked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm Received core VNL checkbox is unchecked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientPayMethod.payMethodButton)
@ -233,27 +171,21 @@ describe('Edit pay method path', () => {
}, selectors.clientPayMethod.receivedCoreVNLCheckbox)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
it('should uncheck the Received B2B VNL checkbox', done => {
nightmare
it('should uncheck the Received B2B VNL checkbox', () => {
return nightmare
.waitToClick(selectors.clientPayMethod.receivedB2BVNLCheckbox)
.waitToClick(selectors.clientPayMethod.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm Received B2B VNL checkbox is unchecked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm Received B2B VNL checkbox is unchecked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientPayMethod.payMethodButton)
@ -263,8 +195,6 @@ describe('Edit pay method path', () => {
}, selectors.clientPayMethod.receivedB2BVNLCheckbox)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
});

View File

@ -1,50 +1,23 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import createNightmare from '../../helpers/helpers';
describe('Add address path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
const nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it('should search for the user Bruce Banner', done => {
nightmare
it('should search for the user Bruce Banner', () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Bruce Banner')
.click(selectors.clientsIndex.searchButton)
@ -52,13 +25,11 @@ describe('Add address path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the search result to access to the client addresses`, done => {
nightmare
it(`should click on the search result to access to the client addresses`, () => {
return nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Bruce Banner')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientAddresses.addressesButton)
@ -66,223 +37,168 @@ describe('Add address path', () => {
.url()
.then(url => {
expect(url).toContain('addresses/list');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the add new address button to access to the new address form`, done => {
nightmare
it(`should click on the add new address button to access to the new address form`, () => {
return nightmare
.waitToClick(selectors.clientAddresses.createAddress)
.waitForURL('addresses/create')
.url()
.then(url => {
expect(url).toContain('addresses/create');
done();
})
.catch(catchErrors(done));
});
});
it('should check the default checkbox then receive an error after clicking save button as the form is empty', done => {
nightmare
it('should check the default checkbox then receive an error after clicking save button as the form is empty', () => {
return nightmare
.waitToClick(selectors.clientAddresses.defaultCheckboxInput)
.waitToClick(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the save button having all the form fields empty but consignee', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the save button having all the form fields empty but consignee', () => {
return nightmare
.type(selectors.clientAddresses.consigneeInput, 'Bruce Bunner')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the save button having all the form fields empty but Street', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the save button having all the form fields empty but Street', () => {
return nightmare
.clearInput(selectors.clientAddresses.consigneeInput)
.type(selectors.clientAddresses.streetAddressInput, '320 Park Avenue New York')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the save button having all the form fields empty but postcode', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the save button having all the form fields empty but postcode', () => {
return nightmare
.clearInput(selectors.clientAddresses.streetAddressInput)
.type(selectors.clientAddresses.postcodeInput, '10022')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the save button having all the form fields empty but city', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the save button having all the form fields empty but city', () => {
return nightmare
.clearInput(selectors.clientAddresses.postcodeInput)
.type(selectors.clientAddresses.cityInput, 'New York')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the save button having all the form fields empty but province', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the save button having all the form fields empty but province', () => {
return nightmare
.clearInput(selectors.clientAddresses.cityInput)
.waitToClick(selectors.clientAddresses.provinceInput)
.waitToClick(selectors.clientAddresses.provinceSecondOption)
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the save button having all the form fields empty but province and agency', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the save button having all the form fields empty but province and agency', () => {
return nightmare
.waitToClick(selectors.clientAddresses.agencyInput)
.waitToClick(selectors.clientAddresses.agenctySecondOption)
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the save button having all the form fields empty but province, agency and phone', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the save button having all the form fields empty but province, agency and phone', () => {
return nightmare
.type(selectors.clientAddresses.phoneInput, '999887744')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it('should receive an error when clicking the save button having all the form fields empty but province, agency and mobile', done => {
nightmare
.waitForSnackbarReset()
it('should receive an error when clicking the save button having all the form fields empty but province, agency and mobile', () => {
return nightmare
.clearInput(selectors.clientAddresses.phoneInput)
.type(selectors.clientAddresses.mobileInput, '999887744')
.click(selectors.createClientView.createButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it(`should create a new address with all it's data`, done => {
nightmare
.waitForSnackbarReset()
it(`should create a new address with all it's data`, () => {
return nightmare
.type(selectors.clientAddresses.consigneeInput, 'Bruce Bunner')
.type(selectors.clientAddresses.streetAddressInput, '320 Park Avenue New York')
.type(selectors.clientAddresses.postcodeInput, '10022')
.type(selectors.clientAddresses.cityInput, 'New York')
.type(selectors.clientAddresses.phoneInput, '999887744')
.click(selectors.clientAddresses.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the addresses button confirm the new address exists and it's the default one`, done => {
nightmare
.waitForSnackbarReset()
it(`should click on the addresses button confirm the new address exists and it's the default one`, () => {
return nightmare
.waitToClick(selectors.clientAddresses.addressesButton)
.wait(selectors.clientAddresses.defaultAddress)
.getInnerText(selectors.clientAddresses.defaultAddress)
.then(result => {
expect(result).toContain('320 Park Avenue New York');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the make default icon of the second address then confirm it is the default one now`, done => {
nightmare
.waitForSnackbarReset()
it(`should click on the make default icon of the second address then confirm it is the default one now`, () => {
return nightmare
.waitToClick(selectors.clientAddresses.secondMakeDefaultStar)
.waitForTextInElement(selectors.clientAddresses.defaultAddress, 'Somewhere in Thailand')
.getInnerText(selectors.clientAddresses.defaultAddress)
.then(result => {
expect(result).toContain('Somewhere in Thailand');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the edit icon of the default address`, done => {
nightmare
it(`should click on the edit icon of the default address`, () => {
return nightmare
.waitForTextInElement(selectors.clientAddresses.defaultAddress, 'Somewhere in Thailand')
.waitToClick(selectors.clientAddresses.firstEditButton)
.waitForURL('/edit')
.url()
.then(result => {
expect(result).toContain('/edit');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the active checkbox and receive an error to save it becouse it is the default address`, done => {
nightmare
.waitForSnackbarReset()
it(`should click on the active checkbox and receive an error to save it becouse it is the default address`, () => {
return nightmare
.waitToClick(selectors.clientAddresses.activeCheckbox)
.waitToClick(selectors.clientAddresses.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Error');
done();
})
.catch(catchErrors(done));
});
});
});

View File

@ -1,50 +1,23 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import createNightmare from '../../helpers/helpers';
describe('Add address notes path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
const nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it('should search for the user Bruce Banner', done => {
nightmare
it('should search for the user Bruce Banner', () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Bruce Banner')
.click(selectors.clientsIndex.searchButton)
@ -52,13 +25,11 @@ describe('Add address notes path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the search result to access to the client addresses`, done => {
nightmare
it(`should click on the search result to access to the client addresses`, () => {
return nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Bruce Banner')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientAddresses.addressesButton)
@ -66,34 +37,27 @@ describe('Add address notes path', () => {
.url()
.then(url => {
expect(url).toContain('addresses/list');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the edit icon of the default address`, done => {
nightmare
it(`should click on the edit icon of the default address`, () => {
return nightmare
.waitForTextInElement(selectors.clientAddresses.defaultAddress, 'Somewhere in Thailand')
.waitToClick(selectors.clientAddresses.firstEditButton)
.waitForURL('/edit')
.url()
.then(result => {
expect(result).toContain('/edit');
done();
})
.catch(catchErrors(done));
});
});
// it('should add as many notes as observation types', done => {
// nightmare
// .waitToClick(selectors.clientAddresses.defaultCheckboxInput)
// it('should add as many notes as observation types', () => {
// return nightmare
// .waitToClick(selectors.clientAddresses.defaultCheckboxInput)
// .waitToClick(selectors.clientFiscalData.saveButton)
// .wait(selectors.globalItems.snackbarIsActive)
// .getInnerText(selectors.globalItems.snackbarIsActive)
// .waitForSnackbar()
// .then(result => {
// expect(result).toContain('Some fields are invalid');
// done();
// })
// .catch(catchErrors(done));
// });
});

View File

@ -1,50 +1,23 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import createNightmare from '../../helpers/helpers';
describe('Edit web access path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
const nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it('should search for the user Bruce Banner', done => {
nightmare
it('should search for the user Bruce Banner', () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Bruce Banner')
.click(selectors.clientsIndex.searchButton)
@ -52,13 +25,11 @@ describe('Edit web access path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the search result to access to the client's web access`, done => {
nightmare
it(`should click on the search result to access to the client's web access`, () => {
return nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Bruce Banner')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientWebAccess.webAccessButton)
@ -66,27 +37,21 @@ describe('Edit web access path', () => {
.url()
.then(url => {
expect(url).toContain('web-access');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the Enable web access checkbox to uncheck it`, done => {
nightmare
it(`should click on the Enable web access checkbox to uncheck it`, () => {
return nightmare
.waitToClick(selectors.clientWebAccess.enableWebAccessCheckbox)
.waitToClick(selectors.clientFiscalData.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain(`Data saved!`);
done();
})
.catch(catchErrors(done));
});
});
it('should confirm Enable web access checkbox is unchecked', done => {
nightmare
.waitForSnackbarReset()
it('should confirm Enable web access checkbox is unchecked', () => {
return nightmare
.waitToClick(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientWebAccess.webAccessButton)
@ -96,29 +61,23 @@ describe('Edit web access path', () => {
}, selectors.clientWebAccess.enableWebAccessCheckbox)
.then(value => {
expect(value).toBeFalsy();
done();
})
.catch(catchErrors(done));
});
});
it('should edit the User name', done => {
nightmare
it('should edit the User name', () => {
return nightmare
.wait(selectors.clientWebAccess.userNameInput)
.clearInput(selectors.clientWebAccess.userNameInput)
.type(selectors.clientWebAccess.userNameInput, 'Hulk')
.click(selectors.clientWebAccess.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the User name have been edited', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the User name have been edited', () => {
return nightmare
.click(selectors.clientBasicData.basicDataButton)
.wait(selectors.clientBasicData.nameInput)
.click(selectors.clientWebAccess.webAccessButton)
@ -127,8 +86,6 @@ describe('Edit web access path', () => {
.getInputValue(selectors.clientWebAccess.userNameInput)
.then(result => {
expect(result).toEqual('Hulk');
done();
})
.catch(catchErrors(done));
});
});
});

View File

@ -1,50 +1,23 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import createNightmare from '../../helpers/helpers';
describe('Add notes path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
const nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it('should search for the user Bruce Banner', done => {
nightmare
it('should search for the user Bruce Banner', () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Bruce Banner')
.click(selectors.clientsIndex.searchButton)
@ -52,13 +25,11 @@ describe('Add notes path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the search result to access to the client's notes`, done => {
nightmare
it(`should click on the search result to access to the client's notes`, () => {
return nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Bruce Banner')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientNotes.notesButton)
@ -66,45 +37,35 @@ describe('Add notes path', () => {
.url()
.then(url => {
expect(url).toContain('notes/list');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the add note button`, done => {
nightmare
it(`should click on the add note button`, () => {
return nightmare
.waitToClick(selectors.clientNotes.addNoteFloatButton)
.waitForURL('/notes/create')
.url()
.then(url => {
expect(url).toContain('/notes/create');
done();
})
.catch(catchErrors(done));
});
});
it(`should create a note`, done => {
nightmare
it(`should create a note`, () => {
return nightmare
.type(selectors.clientNotes.noteInput, 'Meeting with Black Widow 21st 9am')
.click(selectors.clientNotes.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the note was created', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the note was created', () => {
return nightmare
.wait(selectors.clientNotes.firstNoteText)
.getInnerText(selectors.clientNotes.firstNoteText)
.then(value => {
expect(value).toEqual('Meeting with Black Widow 21st 9am');
done();
})
.catch(catchErrors(done));
});
});
});

View File

@ -1,50 +1,23 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import createNightmare from '../../helpers/helpers';
describe('Add credit path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
const nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it('should search for the user Petter Parker', done => {
nightmare
it('should search for the user Petter Parker', () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Petter Parker')
.click(selectors.clientsIndex.searchButton)
@ -52,13 +25,11 @@ describe('Add credit path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the search result to access to the client's credit`, done => {
nightmare
it(`should click on the search result to access to the client's credit`, () => {
return nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Petter Parker')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientCredit.creditButton)
@ -66,46 +37,36 @@ describe('Add credit path', () => {
.url()
.then(url => {
expect(url).toContain('credit/list');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the add credit button`, done => {
nightmare
it(`should click on the add credit button`, () => {
return nightmare
.waitToClick(selectors.clientCredit.addCreditFloatButton)
.waitForURL('/credit/create')
.url()
.then(url => {
expect(url).toContain('/credit/create');
done();
})
.catch(catchErrors(done));
});
});
it(`should edit the credit`, done => {
nightmare
it(`should edit the credit`, () => {
return nightmare
.clearInput(selectors.clientCredit.creditInput)
.type(selectors.clientCredit.creditInput, 999)
.click(selectors.clientCredit.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toEqual('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the credit was updated', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the credit was updated', () => {
return nightmare
.wait(selectors.clientCredit.firstCreditText)
.getInnerText(selectors.clientCredit.firstCreditText)
.then(value => {
expect(value).toContain(999);
done();
})
.catch(catchErrors(done));
});
});
});

View File

@ -1,50 +1,23 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import createNightmare from '../../helpers/helpers';
describe('Add greuge path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
const nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it('should search for the user Petter Parker', done => {
nightmare
it('should search for the user Petter Parker', () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Petter Parker')
.click(selectors.clientsIndex.searchButton)
@ -52,13 +25,11 @@ describe('Add greuge path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the search result to access to the client's greuge`, done => {
nightmare
it(`should click on the search result to access to the client's greuge`, () => {
return nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Petter Parker')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientGreuge.greugeButton)
@ -66,103 +37,81 @@ describe('Add greuge path', () => {
.url()
.then(url => {
expect(url).toContain('greuge/list');
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the add greuge button`, done => {
nightmare
it(`should click on the add greuge button`, () => {
return nightmare
.waitToClick(selectors.clientGreuge.addGreugeFloatButton)
.waitForURL('greuge/create')
.url()
.then(url => {
expect(url).toContain('greuge/create');
done();
})
.catch(catchErrors(done));
});
});
it(`should receive an error if all fields are empty but date on submit`, done => {
nightmare
it(`should receive an error if all fields are empty but date on submit`, () => {
return nightmare
.click(selectors.clientCredit.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it(`should receive an error if all fields are empty but date and amount on submit`, done => {
nightmare
it(`should receive an error if all fields are empty but date and amount on submit`, () => {
return nightmare
.type(selectors.clientGreuge.amountInput, 999)
.click(selectors.clientGreuge.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it(`should receive an error if all fields are empty but date and description on submit`, done => {
nightmare
it(`should receive an error if all fields are empty but date and description on submit`, () => {
return nightmare
.clearInput(selectors.clientGreuge.amountInput)
.type(selectors.clientGreuge.descriptionInput, 'new armor for Batman!')
.click(selectors.clientGreuge.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it(`should receive an error if all fields are empty but date and type on submit`, done => {
nightmare
it(`should receive an error if all fields are empty but date and type on submit`, () => {
return nightmare
.clearInput(selectors.clientGreuge.descriptionInput)
.waitToClick(selectors.clientGreuge.typeInput)
.waitToClick(selectors.clientGreuge.typeSecondOption)
.click(selectors.clientGreuge.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Some fields are invalid');
done();
})
.catch(catchErrors(done));
});
});
it(`should create a new greuge with all its data`, done => {
nightmare
it(`should create a new greuge with all its data`, () => {
return nightmare
.clearInput(selectors.clientGreuge.amountInput)
.type(selectors.clientGreuge.amountInput, 999)
.type(selectors.clientGreuge.descriptionInput, 'new armor for Batman!')
.click(selectors.clientGreuge.saveButton)
.wait(selectors.globalItems.snackbarIsActive)
.getInnerText(selectors.globalItems.snackbarIsActive)
.waitForSnackbar()
.then(result => {
expect(result).toContain('Data saved!');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the greuge was added to the list', done => {
nightmare
.waitForSnackbarReset()
it('should confirm the greuge was added to the list', () => {
return nightmare
.wait(selectors.clientGreuge.firstGreugeText)
.getInnerText(selectors.clientGreuge.firstGreugeText)
.then(value => {
expect(value).toContain(999);
expect(value).toContain('new armor for Batman!');
expect(value).toContain('Diff');
done();
})
.catch(catchErrors(done));
});
});
});

View File

@ -1,50 +1,23 @@
import config from '../../helpers/config.js';
import createNightmare from '../../helpers/nightmare';
import selectors from '../../helpers/selectors.js';
import {catchErrors} from '../../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
import createNightmare from '../../helpers/helpers';
describe('mandate path', () => {
it('should log in', done => {
nightmare
.login()
.waitForURL(moduleAccessViewHashURL)
.url()
.then(url => {
expect(url).toEqual(config.url + moduleAccessViewHashURL);
done();
})
.catch(catchErrors(done));
});
const nightmare = createNightmare();
it('should make sure the language is English', done => {
nightmare
.changeLanguageToEnglish()
.then(() => {
done();
})
.catch(catchErrors(done));
});
it('should click on the Clients button of the top bar menu', done => {
nightmare
it('should click on the Clients button of the top bar menu', () => {
return nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.url()
.urlParsed()
.then(url => {
expect(url).toEqual(config.url + '#!/clients');
done();
})
.catch(catchErrors(done));
expect(url.hash).toEqual('#!/clients');
});
});
it('should search for the user Petter Parker', done => {
nightmare
it('should search for the user Petter Parker', () => {
return nightmare
.wait(selectors.clientsIndex.searchResult)
.type(selectors.clientsIndex.searchClientInput, 'Petter Parker')
.click(selectors.clientsIndex.searchButton)
@ -52,13 +25,11 @@ describe('mandate path', () => {
.countSearchResults(selectors.clientsIndex.searchResult)
.then(result => {
expect(result).toEqual(1);
done();
})
.catch(catchErrors(done));
});
});
it(`should click on the search result to access to the client's mandate`, done => {
nightmare
it(`should click on the search result to access to the client's mandate`, () => {
return nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Petter')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientMandate.mandateButton)
@ -66,21 +37,17 @@ describe('mandate path', () => {
.url()
.then(url => {
expect(url).toContain('mandate');
done();
})
.catch(catchErrors(done));
});
});
it('should confirm the client has a mandate of the CORE type', done => {
nightmare
it('should confirm the client has a mandate of the CORE type', () => {
return nightmare
.wait(selectors.clientMandate.firstMandateText)
.getInnerText(selectors.clientMandate.firstMandateText)
.then(value => {
expect(value).toContain('1');
expect(value).toContain('WAY');
expect(value).toContain('CORE');
done();
})
.catch(catchErrors(done));
});
});
});

View File

@ -40,8 +40,8 @@ gulp.task('default', () => {
return gulp.start('services', 'client');
});
gulp.task('client', ['build-clean'], () => {
return gulp.start('watch', 'routes', 'locales', 'webpack-dev-server');
gulp.task('client', ['build-clean'], async () => {
await runSequenceP(['routes', 'locales'], 'watch', 'webpack-dev-server');
});
/**

View File

@ -72,8 +72,7 @@ let prodConfig = {
path: outputPath
}),
new webpack.HashedModuleIdsPlugin()
],
devtool: 'source-map'
]
};
let devConfig = {
@ -83,8 +82,7 @@ let devConfig = {
},
plugins: [
new webpack.NamedModulesPlugin()
],
devtool: 'eval'
]
};
let mrgConfig = devMode ? devConfig : prodConfig;