diff --git a/src/app/layout/blocks/profile-image/profile-image-block.component.spec.ts b/src/app/layout/blocks/profile-image/profile-image-block.component.spec.ts index cf12c12..da5207f 100644 --- a/src/app/layout/blocks/profile-image/profile-image-block.component.spec.ts +++ b/src/app/layout/blocks/profile-image/profile-image-block.component.spec.ts @@ -14,6 +14,7 @@ describe("Components", () => { describe("Profile Image Block Component", () => { beforeEach(angular.mock.module("templates")); + let personService = jasmine.createSpyObj("personService", ["upload"]); let profileService = jasmine.createSpyObj("ProfileService", ["isMember", "addMember", "removeMember"]); profileService.isMember = jasmine.createSpy("isMember").and.returnValue(Promise.resolve(false)); @@ -24,6 +25,8 @@ describe("Components", () => { directives: [ProfileImageBlockComponent], providers: [ helpers.createProviderToValue('SessionService', helpers.mocks.sessionWithCurrentUser({})), + helpers.createProviderToValue("PersonService", personService), + helpers.createProviderToValue("$uibModal", helpers.mocks.$modal), helpers.createProviderToValue('ProfileService', profileService), helpers.createProviderToValue('NotificationService', helpers.mocks.notificationService) ].concat(helpers.provideFilters("translateFilter")) diff --git a/src/app/layout/blocks/profile-image/profile-image-block.scss b/src/app/layout/blocks/profile-image/profile-image-block.scss index 585d4eb..390c7af 100644 --- a/src/app/layout/blocks/profile-image/profile-image-block.scss +++ b/src/app/layout/blocks/profile-image/profile-image-block.scss @@ -3,13 +3,13 @@ display: block; } .upload-camera-container { - top: 305px; - left: 23px; + top: 77%; + left: 6%; } } .profile-image-block-editable { - top: 287px; + top: 68%; width: 284px; font-weight: 700; height: 43px; diff --git a/src/app/profile/image/image.component.spec.ts b/src/app/profile/image/image.component.spec.ts index 13e02ff..12a9e0b 100644 --- a/src/app/profile/image/image.component.spec.ts +++ b/src/app/profile/image/image.component.spec.ts @@ -4,22 +4,49 @@ * @description * This file contains the tests for the {@link components.noosfero.profile-image.ProfileImage} component. */ - +import {ComponentTestHelper, createClass} from '../../../spec/component-test-helper'; import {TestComponentBuilder, ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder'; import {Pipe, Input, provide, Component} from 'ng-forward'; +import {PersonService} from "../../../lib/ng-noosfero-api/http/person.service"; import * as helpers from "../../../spec/helpers"; import {ProfileImageComponent} from "./image.component"; -const tcb = new TestComponentBuilder(); +const htmlTemplate: string = ''; describe("Components", () => { describe("Profile Image Component", () => { + let helper: ComponentTestHelper; + beforeEach(angular.mock.module("templates")); + beforeEach((done) => { + let scope = helpers.mocks.scopeWithEvents; + let personService = jasmine.createSpyObj("personService", ["upload"]); + let properties = { profile: { custom_footer: "footer" } }; + let cls = createClass({ + template: htmlTemplate, + directives: [ProfileImageComponent], + properties: properties, + providers: [ + helpers.createProviderToValue("PersonService", personService), + helpers.createProviderToValue("$uibModal", helpers.mocks.$modal), + helpers.createProviderToValue("$scope", scope) + ] + }); + helper = new ComponentTestHelper(cls, done); + }); + + it("set modal instance when select files modal", () => { + helper.component['$uibModal'].open = jasmine.createSpy("open"); + helper.component.fileSelected("file", []); + expect(helper.component['$uibModal'].open).toHaveBeenCalled(); + }); + + /* it("show community users image if profile is not Person", done => { helpers.tcb.createAsync(ProfileImageComponent).then(fixture => { let profileImageComponent: ProfileImageComponent = fixture.componentInstance; @@ -45,7 +72,7 @@ describe("Components", () => { expect(profileImageComponent.defaultIcon).toEqual("fa-user", "The default icon should be person user"); done(); }); - }); + });*/ }); }); \ No newline at end of file diff --git a/src/app/profile/image/image.component.ts b/src/app/profile/image/image.component.ts index 9b68739..db49635 100644 --- a/src/app/profile/image/image.component.ts +++ b/src/app/profile/image/image.component.ts @@ -13,7 +13,7 @@ import {ProfileImageEditorComponent} from "./profile-image-editor.component"; templateUrl: 'app/profile/image/image.html', providers: [ provide('personService', { useClass: PersonService }) ] }) -@Inject(PersonService, "$uibModal", "Upload", "$timeout", "$scope") +@Inject(PersonService, "$uibModal", "$scope") export class ProfileImageComponent { /** @@ -32,22 +32,18 @@ export class ProfileImageComponent { * The default icon used by this profile */ defaultIcon: string; - + @Input() editable: boolean; - + @Input() editClass: string; picFile: any; croppedDataUrl: any; modalInstance: any; - constructor(private personService: PersonService, private $uibModal: any, private Upload: any, - private $timeout: any, private $scope: ng.IScope) { - //console.log("ImageComponent.Created with upload: ", this.Upload); - //console.log("ImageComponent.Cropped: ", this.croppedDataUrl); - //console.log("ImageComponent.PicFile: ", this.picFile); + constructor(private personService: PersonService, private $uibModal: any, private $scope: ng.IScope) { } - + fileSelected(file: any, errFiles: any) { console.log("File selected: ", file); if (file) { @@ -67,18 +63,18 @@ export class ProfileImageComponent { }); } } - + private _showCamera: boolean = false; - + showChange(show: boolean) { this._showCamera = show; } - + showCamera() { return this._showCamera; } - - + + /** * @ngdoc method * @name ngOnInit @@ -92,11 +88,6 @@ export class ProfileImageComponent { this.defaultIcon = 'fa-user'; } } - - ngAfterViewInit() { - console.log("Parent scope: ", this.$scope.$parent['ctrl']['__proto__']); - console.log("Editable: " + this.editable); - console.log("Edit_class: " + this.editClass); - } + } diff --git a/src/app/profile/image/profile-image-editor.component.spec.ts b/src/app/profile/image/profile-image-editor.component.spec.ts new file mode 100644 index 0000000..78a2877 --- /dev/null +++ b/src/app/profile/image/profile-image-editor.component.spec.ts @@ -0,0 +1,62 @@ +import {Pipe, Input, provide, Component} from 'ng-forward'; +import {ComponentTestHelper, createClass} from '../../../spec/component-test-helper'; +import * as helpers from "../../../spec/helpers"; + +import {ProfileImageEditorComponent} from "./profile-image-editor.component"; + +describe("Components", () => { + + describe("Profile Image Editor Component", () => { + + beforeEach(angular.mock.module("templates")); + + let expectedData = "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAgAElEQ…Cm2OLHvfdNPte3zrH709Q0esN1LPQ0t7DL696ERpu+9/8BVPLIpElf7VYAAAAASUVORK5CYII="; + + let profile = { name: "profile_name", id: 1, identifier: "test" }; + let modal = helpers.mocks.$modal; + let modalInstance = jasmine.createSpyObj("$uibModalInstance", ["close"]); + let picFile = { type: "png" }; + let $q: ng.IQService; + let personServiceMock: any; + let $rootScope: ng.IRootScopeService; + + beforeEach(inject((_$q_: ng.IQService, _$rootScope_: ng.IRootScopeService) => { + $q = _$q_; + $rootScope = _$rootScope_; + })); + + let comp = new ProfileImageEditorComponent(picFile, this.profile, personServiceMock, modalInstance); + + it("get data", done => { + let testDataUrl = "data:image/png;base64," + expectedData; + let result = comp.getData(testDataUrl); + expect(result).toBe(expectedData); + done(); + }); + + it("get image name", done => { + let imageName = "image1"; + let expectedName = "profile_name_" + imageName; + comp['profile'] = profile; + let result = comp.getImageName(imageName); + expect(result).toBe(expectedName); + done(); + }); + + it("upload image", done => { + let testDataUrl = "data:image/png;base64," + expectedData; + let imageName = "image1"; + personServiceMock = jasmine.createSpyObj("personServiceMock", ["uploadImage"]); + console.log("PersonServiceMock:", personServiceMock); + let deferredUploadImage = $q.defer(); + personServiceMock.uploadImage = jasmine.createSpy('uploadImage').and.returnValue(deferredUploadImage.promise); + comp.personService = personServiceMock; + comp.uploadImage(testDataUrl, imageName); + deferredUploadImage.resolve(); + $rootScope.$apply(); + expect(comp.$uibModalInstance.close).toHaveBeenCalled(); + done(); + }); + + }); +}); diff --git a/src/app/profile/image/profile-image-editor.component.ts b/src/app/profile/image/profile-image-editor.component.ts index 0752440..7d0244b 100644 --- a/src/app/profile/image/profile-image-editor.component.ts +++ b/src/app/profile/image/profile-image-editor.component.ts @@ -6,55 +6,37 @@ export class ProfileImageEditorComponent { activities: any; croppedDataUrl: string; - static $inject = ["Upload", "$timeout", "$scope", "picFile", "profile", "personService", "$uibModalInstance"]; - - constructor( - private upload: any, private $timeout: any, private $scope: ng.IScope, - public picFile: any, private profile: noosfero.Profile, private personService: PersonService, - private $uibModalInstance: any) { - //this.picFile = this.picFile; - console.log("Value set: ", this.picFile); + static $inject = ["picFile", "profile", "personService", "$uibModalInstance"]; + + constructor(public picFile: any, public profile: noosfero.Profile, public personService: PersonService, + public $uibModalInstance: any) { } uploadImage(dataUrl: any, name: any) { - console.log("Uploading [" + name + "] with data: ", dataUrl); - let data = dataUrl.substring(dataUrl.indexOf('base64,') + 7); - let image_name = this.profile.name + "_" + name; - let base64_image_json = { + let base64_image_json = this.getBase64ImageJson(dataUrl, name); + this.personService.uploadImage(this.profile, base64_image_json).then( (result: any) => { + this.$uibModalInstance.close(name); + }); + } + + getBase64ImageJson(dataUrl: any, name: any) { + let data = this.getData(dataUrl); + let image_name = this.getImageName(name); + return { tempfile: data, filename: image_name, type: this.picFile.type }; - console.log("Base64Image JSON: ", base64_image_json); - this.personService.uploadImage(this.profile, base64_image_json).then( (result: any) => { - console.log("Upload finished: ", result); - this.$uibModalInstance.close(name); - }); } - - uploadFiles(file: any, errFiles: any) { - console.log("Going to upload: ", file); - - //$scope.f = file; - let errFile = errFiles && errFiles[0]; - if (file) { - let base64 = this.upload.base64DataUrl(file); - console.log("Base64", base64); - base64.then( (base64Urls: any) => { - console.log("Uploading base64Urls: ", base64Urls); - let data = base64Urls.substring(base64Urls.indexOf('base64,') + 7); - let image_name = this.profile.name + "_" + file.name; - let base64_image_json = { - tempfile: data, - filename: image_name, - type: file.type - }; - console.log("Base64Image JSON: ", base64_image_json); - this.personService.uploadImage(this.profile, base64_image_json); - }); - } - } - + + getImageName(name: any) { + return this.profile.name + "_" + name; + } + + getData(dataUrl: any) { + return dataUrl.substring(dataUrl.indexOf('base64,') + 7); + } + cancel() { this.$uibModalInstance.close(); } diff --git a/src/app/profile/info/profile-info.scss b/src/app/profile/info/profile-info.scss index fb6d236..3b507b0 100644 --- a/src/app/profile/info/profile-info.scss +++ b/src/app/profile/info/profile-info.scss @@ -1,10 +1,10 @@ .profile-info .upload-camera-container { - top: 162px; + top: 55%; left: 39px; } .profile-info-editable { - top: 151px; + top: 51%; width: 103px; height: 28px; } diff --git a/src/lib/ng-noosfero-api/http/person.service.ts b/src/lib/ng-noosfero-api/http/person.service.ts index a9885e6..914ffbc 100644 --- a/src/lib/ng-noosfero-api/http/person.service.ts +++ b/src/lib/ng-noosfero-api/http/person.service.ts @@ -36,7 +36,7 @@ export class PersonService extends RestangularService { let attributesToUpdate: any = { person: { image_builder: base64_image_json } }; - let restRequest: ng.IPromise> = + let restRequest: ng.IPromise> = this.getElement(profile.id).customPOST(attributesToUpdate, null, null, headers); restRequest.then(this.getHandleSuccessFunction(deferred)) .catch(this.getHandleErrorFunction(deferred)); -- libgit2 0.21.2