#633 El descriptor-popover + test

This commit is contained in:
Carlos Jimenez 2018-10-18 11:41:25 +02:00
parent cfc7f1ee83
commit 2bdfa6ff60
12 changed files with 332 additions and 182 deletions

View File

@ -1,6 +1,12 @@
<vn-popover vn-id="popover">
<vn-spinner
ng-if="$ctrl.client == null"
style="padding: 1em;"
enable="true">
</vn-spinner>
<vn-client-descriptor
ng-if="$ctrl.client"
client="$ctrl.client"
quicklinks="$ctrl.quicklinks">
</vn-client-descriptor>
</vn-popover>
</vn-popover>

View File

@ -3,17 +3,29 @@ import Component from 'core/src/lib/component';
import './style.scss';
class Controller extends Component {
constructor($element, $scope, $http, $timeout) {
constructor($element, $scope, $http, $timeout, $q) {
super($element, $scope);
this.$http = $http;
this.$timeout = $timeout;
this.isTooltip = true;
this.$http = $http;
this.$q = $q;
this.client = null;
}
set clientFk(value) {
if (value) {
this.getCard(value);
}
set clientFk(id) {
if (id == this._clientFk) return;
this._clientFk = id;
this.client = null;
this.getCard();
}
set client(value) {
this._client = value;
this.$timeout(() => this.$.popover.relocate());
}
get client() {
return this._client;
}
set quicklinks(value = {}) {
@ -24,27 +36,27 @@ class Controller extends Component {
return this._quicklinks;
}
clear() {
this.client = {};
this.clientFk = null;
}
getCard(clientFk) {
this.$http.get(`/client/api/Clients/${clientFk}/getCard`)
.then(response => {
this.client = response.data;
});
}
show() {
this.$.popover.parent = this.parent;
setTimeout(() => {
this.$.popover.show();
}, 150);
this.$.popover.show();
}
getCard() {
if (this.canceler)
this.canceler.resolve();
this.canceler = this.$q.defer();
let options = {timeout: this.canceler.promise};
this.$http.get(`/client/api/Clients/${this._clientFk}/getCard`, options).then(
response => {
this.client = response.data;
this.canceler = null;
}
);
}
}
Controller.$inject = ['$element', '$scope', '$http', '$timeout'];
Controller.$inject = ['$element', '$scope', '$http', '$timeout', '$q'];
ngModule.component('vnClientDescriptorPopover', {
template: require('./index.html'),

View File

@ -7,27 +7,75 @@ describe('Client', () => {
let $scope;
let controller;
let $element;
let $timeout;
beforeEach(() => {
angular.mock.module('client');
});
beforeEach(angular.mock.inject((_$componentController_, $rootScope, _$httpBackend_) => {
beforeEach(angular.mock.inject((_$componentController_, $rootScope, _$httpBackend_, _$timeout_) => {
$componentController = _$componentController_;
$httpBackend = _$httpBackend_;
$timeout = _$timeout_;
$httpBackend.when('GET', /\/locale\/\w+\/[a-z]{2}\.json/).respond({});
$element = angular.element(`<div></div>`);
$scope = $rootScope.$new();
$scope.popover = {relocate: () => {}, show: () => {}};
controller = $componentController('vnClientDescriptorPopover', {$scope: $scope, $element: $element});
}));
describe('clientFk()', () => {
it(`should not apply any changes if the received id is the same stored in _clientFk`, () => {
controller.client = 'I exist!';
controller._clientFk = 1;
spyOn(controller, 'getCard');
controller.clientFk = 1;
expect(controller.client).toEqual('I exist!');
expect(controller._clientFk).toEqual(1);
expect(controller.getCard).not.toHaveBeenCalled();
});
it(`should set the received id into _clientFk, set the client to null and then call getCard()`, () => {
controller.client = `Please don't`;
controller._clientFk = 1;
spyOn(controller, 'getCard');
controller.clientFk = 999;
expect(controller.client).toBeNull();
expect(controller._clientFk).toEqual(999);
expect(controller.getCard).toHaveBeenCalledWith();
});
});
describe('client()', () => {
it(`should save the client into _client and then call relocate()`, () => {
spyOn(controller.$.popover, 'relocate');
controller.client = `i'm the client!`;
$timeout.flush();
expect(controller._client).toEqual(`i'm the client!`);
expect(controller.$.popover.relocate).toHaveBeenCalledWith();
});
});
describe('show()', () => {
it(`should call the show()`, () => {
spyOn(controller.$.popover, 'show');
controller.show();
expect(controller.$.popover.show).toHaveBeenCalledWith();
});
});
describe('getCard()', () => {
it(`should perform a get query to store the client data into the controller`, () => {
let clientFk = 1;
let response = {id: 1, name: 'name', debt: 1000};
$httpBackend.when('GET', `/client/api/Clients/${clientFk}/getCard`).respond(response);
$httpBackend.expect('GET', `/client/api/Clients/${clientFk}/getCard`);
controller.getCard(clientFk);
controller.clientFk = 1;
controller.canceler = null;
let response = {};
$httpBackend.when('GET', `/client/api/Clients/${controller._clientFk}/getCard`).respond(response);
$httpBackend.expect('GET', `/client/api/Clients/${controller._clientFk}/getCard`);
controller.getCard();
$httpBackend.flush();
expect(controller.client).toEqual(response);

View File

@ -1,10 +1,8 @@
vn-client-descriptor-popover {
div.popover{
width: 16em!important;
}
vn-client-descriptor {
display: block;
&>vn-card{
width: 16em;
& > vn-card{
margin: 0!important;
}
.header > a:first-child {

View File

@ -1,8 +1,12 @@
<vn-popover vn-id="popover">
<vn-item-descriptor
item="$ctrl.item"
item-tags="$ctrl.itemTags"
tags="$ctrl.tags"
<vn-spinner
ng-if="$ctrl.item == null"
style="padding: 1em;"
enable="true">
</vn-spinner>
<vn-item-descriptor
ng-if="$ctrl.item"
item="$ctrl.item"
quicklinks="$ctrl.quicklinks">
</vn-item-descriptor>
</vn-popover>

View File

@ -3,20 +3,29 @@ import Component from 'core/src/lib/component';
import './style.scss';
class Controller extends Component {
constructor($element, $scope, $http) {
constructor($element, $scope, $http, $timeout, $q) {
super($element, $scope);
this.$timeout = $timeout;
this.$http = $http;
this.isTooltip = true;
this.clear();
this.$q = $q;
this.item = null;
}
set itemFk(id) {
this._itemFk = id;
if (id == this._itemFk) return;
if (id) {
this.getCard();
} else
this.clear();
this._itemFk = id;
this.item = null;
this.getCard();
}
set item(value) {
this._item = value;
this.$timeout(() => this.$.popover.relocate());
}
get item() {
return this._item;
}
set quicklinks(value = {}) {
@ -27,30 +36,33 @@ class Controller extends Component {
return this._quicklinks;
}
clear() {
this.item = null;
this.tags = {};
this.itemTags = null;
}
show() {
this.$.popover.parent = this.parent;
this.$.popover.show();
}
getCard() {
this.$http.get(`/item/api/Items/${this._itemFk}/getCard`).then(response => {
this.item = response.data;
});
if (this.canceler)
this.canceler.resolve();
this.canceler = this.$q.defer();
let options = {timeout: this.canceler.promise};
this.$http.get(`/item/api/Items/${this._itemFk}/getCard`, options).then(
response => {
this.item = response.data;
this.canceler = null;
}
);
}
}
Controller.$inject = ['$element', '$scope', '$http'];
Controller.$inject = ['$element', '$scope', '$http', '$timeout', '$q'];
ngModule.component('vnItemDescriptorPopover', {
template: require('./index.html'),
controller: Controller,
bindings: {
itemFk: '<',
quicklinks: '<'
},
controller: Controller
}
});

View File

@ -3,85 +3,82 @@ import './index.js';
describe('Item', () => {
describe('Component vnItemDescriptorPopover', () => {
let $componentController;
let $httpBackend;
let $scope;
let controller;
let $httpBackend;
let $element;
let $timeout;
beforeEach(() => {
angular.mock.module('item');
});
beforeEach(angular.mock.inject((_$componentController_, $rootScope, _$httpBackend_) => {
beforeEach(angular.mock.inject((_$componentController_, $rootScope, _$httpBackend_, _$timeout_) => {
$componentController = _$componentController_;
$element = angular.element('<vn-item-descriptor-popover></vn-item-descriptor-popover>');
$httpBackend = _$httpBackend_;
$timeout = _$timeout_;
$httpBackend.when('GET', /\/locale\/\w+\/[a-z]{2}\.json/).respond({});
$element = angular.element(`<div></div>`);
$scope = $rootScope.$new();
controller = $componentController('vnItemDescriptorPopover', {$scope, $element, $httpBackend});
controller.itemFk = 1;
controller.parent = 'mariano';
controller.$.popover = {show: () => {}};
$scope.popover = {relocate: () => {}, show: () => {}};
controller = $componentController('vnItemDescriptorPopover', {$scope: $scope, $element: $element});
}));
describe('itemFk setter', () => {
it(`should set _itemFk to a given value and call getCard if the given value is not null`, () => {
describe('itemFk()', () => {
it(`should not apply any changes if the received id is the same stored in _itemFk`, () => {
controller.item = 'I exist!';
controller._itemFk = 1;
spyOn(controller, 'getCard');
controller.itemFk = 5;
controller.itemFk = 1;
expect(controller.item).toEqual('I exist!');
expect(controller._itemFk).toEqual(1);
expect(controller.getCard).not.toHaveBeenCalled();
});
it(`should set the received id into _itemFk, set the item to null and then call getCard()`, () => {
controller.item = `Please don't`;
controller._itemFk = 1;
spyOn(controller, 'getCard');
controller.itemFk = 999;
expect(controller.item).toBeNull();
expect(controller._itemFk).toEqual(999);
expect(controller.getCard).toHaveBeenCalledWith();
expect(controller._itemFk).toEqual(5);
});
it(`shoud call clear if the given values is null`, () => {
spyOn(controller, 'clear');
controller.itemFk = null;
expect(controller.clear).toHaveBeenCalledWith();
expect(controller._itemFk).toEqual(null);
});
});
describe('quicklinks setter', () => {
it(`shoud set _quicklinks to a given value`, () => {
controller.quicklinks = 3;
describe('item()', () => {
it(`should save the item into _item and then call relocate()`, () => {
spyOn(controller.$.popover, 'relocate');
controller.item = `i'm the item!`;
$timeout.flush();
expect(controller._quicklinks).toEqual(3);
});
});
describe('clear()', () => {
it(`should set item and itemTags null, and tags {}`, () => {
controller.item = '1';
controller.itemTags = '1';
controller.tags = '1';
controller.clear();
expect(controller.item).toEqual(null);
expect(controller.itemTags).toEqual(null);
expect(controller.tags).toEqual({});
expect(controller._item).toEqual(`i'm the item!`);
expect(controller.$.popover.relocate).toHaveBeenCalledWith();
});
});
describe('show()', () => {
it(`should set $.popover.parent and call $.popover.show`, () => {
it(`should call the show()`, () => {
spyOn(controller.$.popover, 'show');
controller.show();
expect(controller.$.popover.show).toHaveBeenCalledWith();
expect(controller.$.popover.parent).toEqual('mariano');
});
});
describe('getCard()', () => {
it(`should make a query and set this.item`, () => {
$httpBackend.whenGET(`/item/api/Items/1/getCard`).respond(true);
$httpBackend.expectGET(`/item/api/Items/1/getCard`);
it(`should perform a get query to store the item data into the controller`, () => {
controller.itemFk = 1;
controller.canceler = null;
let response = {};
$httpBackend.when('GET', `/item/api/Items/${controller._itemFk}/getCard`).respond(response);
$httpBackend.expect('GET', `/item/api/Items/${controller._itemFk}/getCard`);
controller.getCard();
$httpBackend.flush();
expect(controller.item).toEqual(true);
expect(controller.item).toEqual(response);
});
});
});

View File

@ -22,8 +22,6 @@ ngModule.component('vnItemDescriptor', {
controller: Controller,
bindings: {
item: '<',
itemTags: '<',
tags: '<',
quicklinks: '<'
}
});

View File

@ -1,6 +1,12 @@
<vn-popover vn-id="popover">
<vn-spinner
ng-if="$ctrl.ticket == null"
style="padding: 1em;"
enable="true">
</vn-spinner>
<vn-ticket-descriptor
ng-if="$ctrl.ticket"
ticket="$ctrl.ticket"
quicklinks="$ctrl.quicklinks">
</vn-ticket-descriptor>
</vn-popover>
</vn-popover>

View File

@ -3,76 +3,95 @@ import Component from 'core/src/lib/component';
import './style.scss';
class Controller extends Component {
constructor($element, $scope, $http) {
constructor($element, $scope, $http, $timeout, $q) {
super($element, $scope);
this.$timeout = $timeout;
this.$http = $http;
this.isTooltip = true;
this.clear();
this.$q = $q;
this.ticket = null;
}
set ticketFk(value) {
if (value) {
let filter = {
include: [
{relation: 'warehouse', scope: {fields: ['name']}},
{relation: 'agencyMode', scope: {fields: ['name']}},
{
relation: 'client',
scope: {
fields: ['salesPersonFk', 'name', 'isActive', 'isFreezed', 'isTaxDataChecked'],
include: {
relation: 'salesPerson',
fields: ['firstName', 'name']
}
}
},
{
relation: 'tracking',
scope: {
fields: ['stateFk'],
include: {
relation: 'state',
fields: ['name']
}
}
}
]
};
set ticketFk(id) {
if (id == this._ticketFk) return;
let json = encodeURIComponent(JSON.stringify(filter));
let query = `/ticket/api/Tickets/${value}?filter=${json}`;
this.$http.get(query).then(res => {
if (res.data)
this.ticket = res.data;
});
} else
this.clear();
this._ticketFk = id;
this.ticket = null;
this.getCard();
}
get quicklinks() {
return this._quicklinks;
set ticket(value) {
this._ticket = value;
this.$timeout(() => this.$.popover.relocate());
}
get ticket() {
return this._ticket;
}
set quicklinks(value = {}) {
this._quicklinks = Object.assign(value, this._quicklinks);
}
clear() {
this.ticket = null;
get quicklinks() {
return this._quicklinks;
}
show() {
this.$.popover.parent = this.parent;
this.$.popover.show();
}
getCard() {
if (this.canceler)
this.canceler.resolve();
this.canceler = this.$q.defer();
let options = {timeout: this.canceler.promise};
let filter = {
include: [
{relation: 'warehouse', scope: {fields: ['name']}},
{relation: 'agencyMode', scope: {fields: ['name']}},
{
relation: 'client',
scope: {
fields: ['salesPersonFk', 'name', 'isActive', 'isFreezed', 'isTaxDataChecked'],
include: {
relation: 'salesPerson',
fields: ['firstName', 'name']
}
}
},
{
relation: 'tracking',
scope: {
fields: ['stateFk'],
include: {
relation: 'state',
fields: ['name']
}
}
}
]
};
let json = encodeURIComponent(JSON.stringify(filter));
let query = `/ticket/api/Tickets/${this._ticketFk}?filter=${json}`;
this.$http.get(query, options).then(
response => {
this.ticket = response.data;
this.canceler = null;
}
);
}
}
Controller.$inject = ['$element', '$scope', '$http'];
Controller.$inject = ['$element', '$scope', '$http', '$timeout', '$q'];
ngModule.component('vnTicketDescriptorPopover', {
template: require('./index.html'),
controller: Controller,
bindings: {
ticketFk: '<',
quicklinks: '<'
},
controller: Controller
}
});

View File

@ -3,61 +3,110 @@ import './index.js';
describe('Item', () => {
describe('Component vnTicketDescriptorPopover', () => {
let $componentController;
let $httpBackend;
let $scope;
let controller;
let $httpBackend;
let $element;
let $timeout;
beforeEach(() => {
angular.mock.module('item');
});
beforeEach(angular.mock.inject((_$componentController_, $rootScope, _$httpBackend_) => {
beforeEach(angular.mock.inject((_$componentController_, $rootScope, _$httpBackend_, _$timeout_) => {
$componentController = _$componentController_;
$element = angular.element('<vn-ticket-descriptor-popover></vn-ticket-descriptor-popover>');
$httpBackend = _$httpBackend_;
$timeout = _$timeout_;
$httpBackend.when('GET', /\/locale\/\w+\/[a-z]{2}\.json/).respond({});
$element = angular.element(`<div></div>`);
$scope = $rootScope.$new();
controller = $componentController('vnTicketDescriptorPopover', {$scope, $element, $httpBackend});
controller.parent = 'mariano';
controller.$.popover = {show: () => {}};
$scope.popover = {relocate: () => {}, show: () => {}};
controller = $componentController('vnTicketDescriptorPopover', {$scope: $scope, $element: $element});
}));
describe('ticketFk setter', () => {
it(`shoud call clear if the given values is null`, () => {
spyOn(controller, 'clear');
controller.ticketFk = null;
describe('ticketFk()', () => {
it(`should not apply any changes if the received id is the same stored in _ticketFk`, () => {
controller.ticket = 'I exist!';
controller._ticketFk = 1;
spyOn(controller, 'getCard');
controller.ticketFk = 1;
expect(controller.clear).toHaveBeenCalledWith();
expect(controller.ticket).toEqual(null);
expect(controller.ticket).toEqual('I exist!');
expect(controller._ticketFk).toEqual(1);
expect(controller.getCard).not.toHaveBeenCalled();
});
it(`should set the received id into _ticketFk, set the ticket to null and then call getCard()`, () => {
controller.ticket = `Please don't`;
controller._ticketFk = 1;
spyOn(controller, 'getCard');
controller.ticketFk = 999;
expect(controller.ticket).toBeNull();
expect(controller._ticketFk).toEqual(999);
expect(controller.getCard).toHaveBeenCalledWith();
});
});
describe('quicklinks setter', () => {
it(`shoud set _quicklinks to a given value`, () => {
controller.quicklinks = 3;
describe('ticket()', () => {
it(`should save the ticket into _ticket and then call relocate()`, () => {
spyOn(controller.$.popover, 'relocate');
controller.ticket = `i'm the ticket!`;
$timeout.flush();
expect(controller._quicklinks).toEqual(3);
});
});
describe('clear()', () => {
it(`should set ticket to null`, () => {
controller.ticket = '1';
controller.clear();
expect(controller.ticket).toEqual(null);
expect(controller._ticket).toEqual(`i'm the ticket!`);
expect(controller.$.popover.relocate).toHaveBeenCalledWith();
});
});
describe('show()', () => {
it(`should set $.popover.parent and call $.popover.show`, () => {
it(`should call the show()`, () => {
spyOn(controller.$.popover, 'show');
controller.show();
expect(controller.$.popover.show).toHaveBeenCalledWith();
expect(controller.$.popover.parent).toEqual('mariano');
});
});
describe('getCard()', () => {
it(`should perform a get query to store the ticket data into the controller`, () => {
controller.ticketFk = 1;
controller.canceler = null;
let response = {};
let filter = {
include: [
{relation: 'warehouse', scope: {fields: ['name']}},
{relation: 'agencyMode', scope: {fields: ['name']}},
{
relation: 'client',
scope: {
fields: ['salesPersonFk', 'name', 'isActive', 'isFreezed', 'isTaxDataChecked'],
include: {
relation: 'salesPerson',
fields: ['firstName', 'name']
}
}
},
{
relation: 'tracking',
scope: {
fields: ['stateFk'],
include: {
relation: 'state',
fields: ['name']
}
}
}
]
};
let json = encodeURIComponent(JSON.stringify(filter));
$httpBackend.when('GET', `/ticket/api/Tickets/${controller._ticketFk}?filter=${json}`).respond(response);
$httpBackend.expect('GET', `/ticket/api/Tickets/${controller._ticketFk}?filter=${json}`);
controller.getCard();
$httpBackend.flush();
expect(controller.ticket).toEqual(response);
});
});
});

View File

@ -2,6 +2,7 @@ import './index.js';
describe('ticket', () => {
describe('Component vnTicketDataStepThree', () => {
let now = Date.now();
let $componentController;
let $state;
let controller;
@ -41,8 +42,8 @@ describe('ticket', () => {
agencyModeFk: 1,
addressFk: 121,
warehouseFk: 1,
shipped: Date.now(),
landed: Date.now(),
shipped: now,
landed: now,
option: 1
};
@ -50,8 +51,8 @@ describe('ticket', () => {
agencyModeFk: 1,
addressFk: 121,
warehouseFk: 1,
shipped: Date.now(),
landed: Date.now(),
shipped: now,
landed: now,
option: 1
};