improve test service

This commit is contained in:
Eugenio Romano
2016-09-05 13:56:35 +02:00
parent ef20d6aafd
commit 0ee2a1654c
15 changed files with 305 additions and 133 deletions

View File

@@ -56,11 +56,10 @@ The following component needs to be added to your systemjs.config:
- ng2-translate
- ng2-alfresco-core
- ng2-alfresco-datatable
Please refer to the following example to have an idea of how your systemjs.config should look like :
https://github.com/Alfresco/alfresco-ng2-components/blob/master/ng2-components/ng2-alfresco-webscript/demo/systemjs.config.js
https://github.com/Alfresco/alfresco-ng2-components/blob/master/ng2-components/ng2-alfresco-tag/demo/systemjs.config.js
#### Style
The style of this component is based on material design, so if you want to visualize it correctly you have to add the material

View File

@@ -1,7 +1,7 @@
{
"name": "ng2-alfresco-tag-demo",
"description": "Alfresco Angular2 Tag - Demo",
"version": "0.2.0",
"version": "0.3.0",
"author": "Alfresco Software, Ltd.",
"main": "index.js",
"scripts": {
@@ -37,11 +37,10 @@
"material-design-icons": "2.2.3",
"material-design-lite": "1.1.3",
"alfresco-js-api": "^0.2.0",
"alfresco-js-api": "^0.3.0",
"ng2-translate": "2.2.2",
"ng2-alfresco-core": "^0.2.0",
"ng2-alfresco-datatable": "^0.2.0"
"ng2-alfresco-core": "^0.3.0"
},
"devDependencies": {
"concurrently": "2.0.0",

View File

@@ -33,8 +33,8 @@ import {TAGCOMPONENT, TAGSERVICES} from 'ng2-alfresco-tag';
template: `
<label for="token"><b>Insert a valid access token / ticket:</b></label><br>
<input id="token" type="text" size="48" (change)="updateToken();documentList.reload()" [(ngModel)]="token"><br>
<label for="token"><b>Insert the ip of your Alfresco instance:</b></label><br>
<input id="token" type="text" size="48" (change)="updateHost();documentList.reload()" [(ngModel)]="ecmHost"><br><br>
<label for="host"><b>Insert the ip of your Alfresco instance:</b></label><br>
<input id="host" type="text" size="48" (change)="updateHost();documentList.reload()" [(ngModel)]="ecmHost"><br><br>
<div *ngIf="!authenticated" style="color:#FF2323">
Authentication failed to ip {{ ecmHost }} with user: admin, admin, you can still try to add a valid token to perform
operations.

View File

@@ -12,7 +12,6 @@
'ng2-translate': 'node_modules/ng2-translate',
'ng2-alfresco-core': 'node_modules/ng2-alfresco-core/dist',
'ng2-alfresco-datatable': 'node_modules/ng2-alfresco-datatable/dist',
'ng2-alfresco-tag': 'node_modules/ng2-alfresco-tag/dist'
};
// packages tells the System loader how to load when no filename and/or no extension
@@ -23,7 +22,6 @@
'ng2-translate': { defaultExtension: 'js' },
'ng2-alfresco-core': { main: 'index.js', defaultExtension: 'js' },
'ng2-alfresco-datatable': { main: 'index.js', defaultExtension: 'js' },
'ng2-alfresco-tag': { main: 'index.js', defaultExtension: 'js' }
};
var ngPackageNames = [

View File

@@ -17,6 +17,10 @@ module.exports = function (config) {
{pattern: 'node_modules/@angular/**/*.js', included: false, watched: false},
{pattern: 'node_modules/@angular/**/*.map', included: false, watched: false},
{pattern: 'node_modules/ng2-alfresco-core/dist/**/*.js', included: false, served: true, watched: false},
{pattern: 'node_modules/ng2-alfresco-datatable/dist/**/*.js', included: false, served: true, watched: false},
{pattern: 'node_modules/ng2-alfresco-datatable/dist/**/*.html', included: false, served: true, watched: false},
{pattern: 'node_modules/ng2-alfresco-datatable/dist/**/*.css', included: false, served: true, watched: false},
{pattern: 'node_modules/ng2-translate/**/*.js', included: false, served: true, watched: false},
{pattern: 'node_modules/alfresco-js-api/dist/alfresco-js-api.js', included: true, watched: false},
{pattern: 'node_modules/material-design-lite/material.min.js', included: true, watched: false},

View File

@@ -1,7 +1,7 @@
{
"name": "ng2-alfresco-tag",
"description": "Alfresco tag component",
"version": "0.2.0",
"version": "0.3.0",
"author": "Alfresco Software, Ltd.",
"main": "./dist/index.js",
"typings": "./dist/index.d.ts",
@@ -44,11 +44,10 @@
"@angular/upgrade": "2.0.0-rc.3",
"systemjs": "0.19.27",
"core-js": "^2.4.0",
"alfresco-js-api": "^0.2.0",
"alfresco-js-api": "^0.3.0",
"ng2-translate": "2.2.2",
"ng2-alfresco-core": "^0.2.0",
"ng2-alfresco-datatable": "^0.2.0",
"ng2-alfresco-core": "^0.3.0",
"reflect-metadata": "^0.1.3",
"rxjs": "5.0.0-beta.6",
"zone.js": "^0.6.12"

View File

@@ -15,3 +15,39 @@
* limitations under the License.
*/
import { describe, inject, beforeEachProviders, beforeEach, afterEach } from '@angular/core/testing';
import { AlfrescoAuthenticationService, AlfrescoSettingsService } from 'ng2-alfresco-core';
import { TagService } from '../services/tag.service';
declare let jasmine: any;
describe('Tag actions', () => {
let service;
beforeEachProviders(() => {
return [
AlfrescoSettingsService,
AlfrescoAuthenticationService,
TagService
];
});
beforeEach(inject([TagService], (tagService: TagService) => {
service = tagService;
}));
describe('Content tests', () => {
beforeEach(() => {
jasmine.Ajax.install();
});
afterEach(() => {
jasmine.Ajax.uninstall();
});
});
});

View File

@@ -48,7 +48,6 @@ export class TagActionsComponent {
tagsEntries: any;
/**
* Constructor
* @param authService

View File

@@ -0,0 +1,53 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { describe, inject, beforeEachProviders, beforeEach, afterEach } from '@angular/core/testing';
import { AlfrescoAuthenticationService, AlfrescoSettingsService } from 'ng2-alfresco-core';
import { TagService } from '../services/tag.service';
declare let jasmine: any;
describe('Tag list', () => {
let service;
beforeEachProviders(() => {
return [
AlfrescoSettingsService,
AlfrescoAuthenticationService,
TagService
];
});
beforeEach(inject([TagService], (tagService: TagService) => {
service = tagService;
}));
describe('Content tests', () => {
beforeEach(() => {
jasmine.Ajax.install();
});
afterEach(() => {
jasmine.Ajax.uninstall();
});
});
});

View File

@@ -54,8 +54,7 @@ export class TagList {
}
refreshTagEcm() {
this.tagService.getAllTheTags().then((data) => {
this.tagService.getAllTheTags().subscribe((data) => {
this.tagsEntries = data;
});
}

View File

@@ -0,0 +1,60 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { describe, inject, beforeEachProviders, beforeEach, afterEach } from '@angular/core/testing';
import { AlfrescoAuthenticationService, AlfrescoSettingsService } from 'ng2-alfresco-core';
import { TagService } from '../services/tag.service';
declare let jasmine: any;
describe('Tag relative node list', () => {
let service;
beforeEachProviders(() => {
return [
AlfrescoSettingsService,
AlfrescoAuthenticationService,
TagService
];
});
describe('Content tests', () => {
beforeEach(() => {
jasmine.Ajax.install();
});
afterEach(() => {
jasmine.Ajax.uninstall();
});
it('getTagsByNodeId catch errors call', (done) => {
service.getTagsByNodeId('fake-node-id', 'fake-tag').subscribe(() => {
}, () => {
done();
});
jasmine.Ajax.requests.mostRecent().respondWith({
status: 403
});
});
});
});

View File

@@ -15,9 +15,9 @@
* limitations under the License.
*/
import {Component, Input} from '@angular/core';
import {AlfrescoAuthenticationService} from 'ng2-alfresco-core';
import {TagService} from '../services/tag.service';
import { Component, Input } from '@angular/core';
import { AlfrescoAuthenticationService } from 'ng2-alfresco-core';
import { TagService } from '../services/tag.service';
/**
*
@@ -38,9 +38,6 @@ export class TagNodeList {
@Input()
nodeId: string;
@Input()
properties: string;
tagsEntries: any;
/**
@@ -48,7 +45,6 @@ export class TagNodeList {
* @param authService
*/
constructor(public authService: AlfrescoAuthenticationService, private tagService: TagService) {
}
ngOnChanges(changes) {
@@ -56,15 +52,9 @@ export class TagNodeList {
}
refreshTag() {
if (this.nodeId) {
this.tagService.getTagsByNodeId(this.nodeId).then((data) => {
this.tagsEntries = data;
});
} else if (this.properties) {
this.tagService.getTagsByProperties(this.properties).then((data) => {
this.tagsEntries = data;
});
}
this.tagService.getTagsByNodeId(this.nodeId).then((data) => {
this.tagsEntries = data;
});
}
removeTag(tag: string) {

View File

@@ -0,0 +1,114 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { describe, expect, it, inject, beforeEachProviders, beforeEach, afterEach } from '@angular/core/testing';
import { AlfrescoAuthenticationService, AlfrescoSettingsService } from 'ng2-alfresco-core';
import { TagService } from './tag.service';
declare let jasmine: any;
describe('Tag service', () => {
let service;
beforeEachProviders(() => {
return [
AlfrescoSettingsService,
AlfrescoAuthenticationService,
TagService
];
});
beforeEach(inject([TagService], (tagService: TagService) => {
service = tagService;
}));
describe('Content tests', () => {
beforeEach(() => {
jasmine.Ajax.install();
});
afterEach(() => {
jasmine.Ajax.uninstall();
});
it('removeTag should perform a call against the server', (done) => {
service.removeTag('fake-node-id', 'fake-tag').subscribe(() => {
expect(jasmine.Ajax.requests.mostRecent().method).toBe('DELETE');
expect(jasmine.Ajax.requests.mostRecent().url)
.toBe('http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/fake-node-id/tags/fake-tag');
done();
});
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200
});
});
it('addTag should perform a call against the server', (done) => {
service.addTag('fake-node-id', 'fake-tag').subscribe(() => {
expect(jasmine.Ajax.requests.mostRecent().method).toBe('POST');
expect(jasmine.Ajax.requests.mostRecent().url)
.toBe('http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/fake-node-id/tags');
done();
});
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200
});
});
it('getAllTheTags should perform a call against the server', (done) => {
service.getAllTheTags('fake-node-id', 'fake-tag').subscribe(() => {
expect(jasmine.Ajax.requests.mostRecent().method).toBe('GET');
expect(jasmine.Ajax.requests.mostRecent().url)
.toBe('http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/tags');
done();
});
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200
});
});
it('getTagsByNodeId should perform a call against the server', (done) => {
service.getTagsByNodeId('fake-node-id', 'fake-tag').subscribe(() => {
expect(jasmine.Ajax.requests.mostRecent().method).toBe('GET');
expect(jasmine.Ajax.requests.mostRecent().url)
.toBe('http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/fake-node-id/tags');
done();
});
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200
});
});
it('getTagsByNodeId catch errors call', (done) => {
service.getTagsByNodeId('fake-node-id', 'fake-tag').subscribe(() => {
}, () => {
done();
});
jasmine.Ajax.requests.mostRecent().respondWith({
status: 403
});
});
});
});

View File

@@ -15,128 +15,51 @@
* limitations under the License.
*/
import {Injectable} from '@angular/core';
import {AlfrescoAuthenticationService} from 'ng2-alfresco-core';
import { Injectable } from '@angular/core';
import { AlfrescoAuthenticationService } from 'ng2-alfresco-core';
import { Observable } from 'rxjs/Rx';
/**
*
* This component, provide a list of the tags relative a node with actions button to add or remove new tag
*
* @returns {TagComponent} .
* @returns {TagService} .
*/
declare let __moduleName: string;
@Injectable()
export class TagService {
cacheTagList: any = [];
promiseCache: any;
/**
* Constructor
* @param authService
*/
constructor(public authService: AlfrescoAuthenticationService) {
this.promiseCache = new Promise((resolve) => {
this.getAllTheTags().then((data) => {
this.cacheTagList = data;
resolve(data);
});
});
}
getTagsByProperties(properties: string) {
return new Promise((resolve) => {
if (!this.cacheTagList) {
this.promiseCache.then((data) => {
this.cacheTagList = data;
resolve(this._associateTagByNodeProperties(properties, data));
});
} else {
resolve(this._associateTagByNodeProperties(properties, this.cacheTagList));
}
});
}
_associateTagByNodeProperties(properties: any, tagList: any) {
let tagsArray = [];
if (properties) {
try {
let jsonProps;
if (typeof properties !== 'object') {
jsonProps = JSON.parse(properties);
} else {
jsonProps = properties;
}
if (jsonProps.hasOwnProperty('cm:taggable')) {
jsonProps['cm:taggable'].forEach((currentTagId) => {
if (tagList && tagList.length > 0) {
let tag = tagList.filter((currentCacheTag) => {
if (currentCacheTag.entry.id === currentTagId) {
return currentCacheTag.entry;
}
});
if (tag && tag.length > 0) {
tagsArray.push(tag[0]);
}
}
});
}
} catch (error) {
console.log('error' + error);
}
}
return tagsArray;
}
getTagsByNodeId(nodeId: string): any {
return new Promise((resolve, reject) => {
this.authService.getAlfrescoApi().core.tagsApi.getNodeTags(nodeId).then((data) => {
resolve(data.list.entries);
}, function (error) {
console.log('Error' + error);
reject();
});
});
return Observable.fromPromise(this.authService.getAlfrescoApi().core.tagsApi.getNodeTags(nodeId))
.catch(this.handleError);
}
getAllTheTags() {
return new Promise((resolve, reject) => {
this.authService.getAlfrescoApi().core.tagsApi.getTags().then((data) => {
resolve(data.list.entries);
}, function (error) {
console.log('Error' + error);
reject();
});
});
return Observable.fromPromise(this.authService.getAlfrescoApi().core.tagsApi.getTags())
.catch(this.handleError);
}
addTag(nodeId: string, tagName: string): any {
return new Promise((resolve, reject) => {
let alfrescoApi = this.authService.getAlfrescoApi();
let tagBody = new alfrescoApi.core.TagBody();
tagBody.tag = tagName;
this.authService.getAlfrescoApi().core.tagsApi.addTag(nodeId, tagBody).then((res) => {
this.cacheTagList.push(res);
resolve(res);
}, function (error) {
console.log('Error' + error);
reject();
});
});
let alfrescoApi = this.authService.getAlfrescoApi();
let tagBody = new alfrescoApi.core.TagBody();
tagBody.tag = tagName;
return Observable.fromPromise(this.authService.getAlfrescoApi().core.tagsApi.addTag(nodeId, tagBody))
.catch(this.handleError);
}
removeTag(nodeId: string, tag: string): any {
return new Promise((resolve, reject) => {
this.authService.getAlfrescoApi().core.tagsApi.removeTag(nodeId, tag).then(() => {
resolve();
}, function (error) {
console.log('Error' + error);
reject();
});
});
return Observable.fromPromise(this.authService.getAlfrescoApi().core.tagsApi.removeTag(nodeId, tag))
.catch(this.handleError);
}
private handleError(error: any) {
console.error(error);
return Observable.throw(error || 'Server error');
}
}

View File

@@ -85,8 +85,7 @@ describe('Test ng2-alfresco-webscript', () => {
component.ngOnChanges().then(() => {
webscriptComponentFixture.detectChanges();
let request = jasmine.Ajax.requests.mostRecent();
expect(request.url).toBe('http://localhost:8080/alfresco/service/sample/folder/Company%20Home');
expect(jasmine.Ajax.requests.mostRecent().url).toBe('http://localhost:8080/alfresco/service/sample/folder/Company%20Home');
done();
});