diff --git a/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts b/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts index 8cf39a75b..4b2303a91 100644 --- a/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts +++ b/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts @@ -15,7 +15,7 @@ import { AssignContributorForm, AutocompleteSource, ContributorsState, - PublicUserDto, + UserDto, UsersService } from '@app/shared'; @@ -85,7 +85,7 @@ export class ContributorsPageComponent implements OnInit { if (value) { let user = value.user; - if (user instanceof PublicUserDto) { + if (user instanceof UserDto) { user = user.id; } diff --git a/src/Squidex/app/shared/components/pipes.ts b/src/Squidex/app/shared/components/pipes.ts index c14e3b70a..00e001756 100644 --- a/src/Squidex/app/shared/components/pipes.ts +++ b/src/Squidex/app/shared/components/pipes.ts @@ -11,7 +11,7 @@ import { Observable, Subscription } from 'rxjs'; import { ApiUrlConfig, MathHelper, - PublicUserDto, + UserDto, UsersProviderService } from '@app/shared/internal'; @@ -101,7 +101,7 @@ export class UserDtoPicture implements PipeTransform { ) { } - public transform(user: PublicUserDto): string | null { + public transform(user: UserDto): string | null { return this.apiUrl.buildUrl(`api/users/${user.id}/picture`); } } diff --git a/src/Squidex/app/shared/services/rules.service.spec.ts b/src/Squidex/app/shared/services/rules.service.spec.ts index 1ec71c811..d65898f61 100644 --- a/src/Squidex/app/shared/services/rules.service.spec.ts +++ b/src/Squidex/app/shared/services/rules.service.spec.ts @@ -22,61 +22,6 @@ import { Version } from './../'; -describe('RuleDto', () => { - const creation = DateTime.today(); - const creator = 'not-me'; - const modified = DateTime.now(); - const modifier = 'me'; - const version = new Version('1'); - const newVersion = new Version('2'); - - it('should update trigger', () => { - const trigger = { param2: 2, triggerType: 'NewType' }; - - const rule_1 = new RuleDto('id1', creator, creator, creation, creation, version, true, {}, 'contentChanged', {}, 'webhook'); - const rule_2 = rule_1.updateTrigger(trigger, modifier, newVersion, modified); - - expect(rule_2.trigger).toEqual(trigger); - expect(rule_2.triggerType).toEqual(trigger.triggerType); - expect(rule_2.lastModified).toEqual(modified); - expect(rule_2.lastModifiedBy).toEqual(modifier); - expect(rule_2.version).toEqual(newVersion); - }); - - it('should update action', () => { - const action = { param2: 2, actionType: 'NewType' }; - - const rule_1 = new RuleDto('id1', creator, creator, creation, creation, version, true, {}, 'contentChanged', {}, 'webhook'); - const rule_2 = rule_1.updateAction(action, modifier, newVersion, modified); - - expect(rule_2.action).toEqual(action); - expect(rule_2.actionType).toEqual(action.actionType); - expect(rule_2.lastModified).toEqual(modified); - expect(rule_2.lastModifiedBy).toEqual(modifier); - expect(rule_2.version).toEqual(newVersion); - }); - - it('should enable', () => { - const rule_1 = new RuleDto('id1', creator, creator, creation, creation, version, true, {}, 'contentChanged', {}, 'webhook'); - const rule_2 = rule_1.enable(modifier, newVersion, modified); - - expect(rule_2.isEnabled).toBeTruthy(); - expect(rule_2.lastModified).toEqual(modified); - expect(rule_2.lastModifiedBy).toEqual(modifier); - expect(rule_2.version).toEqual(newVersion); - }); - - it('should disable', () => { - const rule_1 = new RuleDto('id1', creator, creator, creation, creation, version, true, {}, 'contentChanged', {}, 'webhook'); - const rule_2 = rule_1.disable(modifier, newVersion, modified); - - expect(rule_2.isEnabled).toBeFalsy(); - expect(rule_2.lastModified).toEqual(modified); - expect(rule_2.lastModifiedBy).toEqual(modifier); - expect(rule_2.version).toEqual(newVersion); - }); -}); - describe('RulesService', () => { const now = DateTime.now(); const user = 'me'; diff --git a/src/Squidex/app/shared/services/rules.service.ts b/src/Squidex/app/shared/services/rules.service.ts index 10b1645f5..5711c50e1 100644 --- a/src/Squidex/app/shared/services/rules.service.ts +++ b/src/Squidex/app/shared/services/rules.service.ts @@ -65,58 +65,6 @@ export class RuleDto { public readonly actionType: string ) { } - - public updateTrigger(trigger: any, user: string, version: Version, now?: DateTime): RuleDto { - return new RuleDto( - this.id, - this.createdBy, user, - this.created, now || DateTime.now(), - version, - this.isEnabled, - trigger, - trigger.triggerType, - this.action, - this.action.actionType); - } - - public updateAction(action: any, user: string, version: Version, now?: DateTime): RuleDto { - return new RuleDto( - this.id, - this.createdBy, user, - this.created, now || DateTime.now(), - version, - this.isEnabled, - this.trigger, - this.trigger.triggerType, - action, - action.actionType); - } - - public enable(user: string, version: Version, now?: DateTime): RuleDto { - return new RuleDto( - this.id, - this.createdBy, user, - this.created, now || DateTime.now(), - version, - true, - this.trigger, - this.triggerType, - this.action, - this.actionType); - } - - public disable(user: string, version: Version, now?: DateTime): RuleDto { - return new RuleDto( - this.id, - this.createdBy, user, - this.created, now || DateTime.now(), - version, - false, - this.trigger, - this.triggerType, - this.action, - this.actionType); - } } export class RuleEventDto { diff --git a/src/Squidex/app/shared/services/users-provider.service.spec.ts b/src/Squidex/app/shared/services/users-provider.service.spec.ts index b0db0f23c..5e0adc69e 100644 --- a/src/Squidex/app/shared/services/users-provider.service.spec.ts +++ b/src/Squidex/app/shared/services/users-provider.service.spec.ts @@ -11,7 +11,7 @@ import { IMock, Mock, Times } from 'typemoq'; import { AuthService, Profile, - PublicUserDto, + UserDto, UsersProviderService, UsersService } from './../'; @@ -28,12 +28,12 @@ describe('UsersProviderService', () => { }); it('should return users service when user not cached', () => { - const user = new PublicUserDto('123', 'User1'); + const user = new UserDto('123', 'User1'); usersService.setup(x => x.getUser('123')) .returns(() => Observable.of(user)).verifiable(Times.once()); - let resultingUser: PublicUserDto | null = null; + let resultingUser: UserDto | null = null; usersProviderService.getUser('123').subscribe(result => { resultingUser = result; @@ -45,14 +45,14 @@ describe('UsersProviderService', () => { }); it('should return provide user from cache', () => { - const user = new PublicUserDto('123', 'User1'); + const user = new UserDto('123', 'User1'); usersService.setup(x => x.getUser('123')) .returns(() => Observable.of(user)).verifiable(Times.once()); usersProviderService.getUser('123'); - let resultingUser: PublicUserDto | null = null; + let resultingUser: UserDto | null = null; usersProviderService.getUser('123').subscribe(result => { resultingUser = result; @@ -64,7 +64,7 @@ describe('UsersProviderService', () => { }); it('should return me when user is current user', () => { - const user = new PublicUserDto('123', 'User1'); + const user = new UserDto('123', 'User1'); authService.setup(x => x.user) .returns(() => new Profile({ profile: { sub: '123'}})); @@ -72,13 +72,13 @@ describe('UsersProviderService', () => { usersService.setup(x => x.getUser('123')) .returns(() => Observable.of(user)).verifiable(Times.once()); - let resultingUser: PublicUserDto | null = null; + let resultingUser: UserDto | null = null; usersProviderService.getUser('123').subscribe(result => { resultingUser = result; }).unsubscribe(); - expect(resultingUser).toEqual(new PublicUserDto('123', 'Me')); + expect(resultingUser).toEqual(new UserDto('123', 'Me')); usersService.verifyAll(); }); @@ -90,13 +90,13 @@ describe('UsersProviderService', () => { usersService.setup(x => x.getUser('123')) .returns(() => Observable.throw('NOT FOUND')).verifiable(Times.once()); - let resultingUser: PublicUserDto | null = null; + let resultingUser: UserDto | null = null; usersProviderService.getUser('123').subscribe(result => { resultingUser = result; }).unsubscribe(); - expect(resultingUser).toEqual(new PublicUserDto('Unknown', 'Unknown')); + expect(resultingUser).toEqual(new UserDto('Unknown', 'Unknown')); usersService.verifyAll(); }); diff --git a/src/Squidex/app/shared/services/users-provider.service.ts b/src/Squidex/app/shared/services/users-provider.service.ts index 87f9f1db9..88a0473cb 100644 --- a/src/Squidex/app/shared/services/users-provider.service.ts +++ b/src/Squidex/app/shared/services/users-provider.service.ts @@ -8,13 +8,13 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { PublicUserDto, UsersService } from './users.service'; +import { UserDto, UsersService } from './users.service'; import { AuthService } from './auth.service'; @Injectable() export class UsersProviderService { - private readonly caches: { [id: string]: Observable } = {}; + private readonly caches: { [id: string]: Observable } = {}; constructor( private readonly usersService: UsersService, @@ -22,14 +22,14 @@ export class UsersProviderService { ) { } - public getUser(id: string, me: string | null = 'Me'): Observable { + public getUser(id: string, me: string | null = 'Me'): Observable { let result = this.caches[id]; if (!result) { const request = this.usersService.getUser(id) .catch(error => { - return Observable.of(new PublicUserDto('Unknown', 'Unknown')); + return Observable.of(new UserDto('Unknown', 'Unknown')); }) .publishLast(); @@ -41,7 +41,7 @@ export class UsersProviderService { return result .map(dto => { if (me && this.authService.user && dto.id === this.authService.user.id) { - dto = new PublicUserDto(dto.id, me); + dto = new UserDto(dto.id, me); } return dto; }).share(); diff --git a/src/Squidex/app/shared/services/users.service.spec.ts b/src/Squidex/app/shared/services/users.service.spec.ts index af54d971b..e7ad55c7a 100644 --- a/src/Squidex/app/shared/services/users.service.spec.ts +++ b/src/Squidex/app/shared/services/users.service.spec.ts @@ -10,39 +10,10 @@ import { inject, TestBed } from '@angular/core/testing'; import { ApiUrlConfig, - CreateUserDto, - PublicUserDto, - UpdateUserDto, UserDto, - UserManagementService, - UsersDto, UsersService } from './../'; -describe('UserDto', () => { - it('should update email and display name property when unlocking', () => { - const user_1 = new UserDto('1', 'sebastian@squidex.io', 'Sebastian', true); - const user_2 = user_1.update('qaisar@squidex.io', 'Qaisar'); - - expect(user_2.email).toEqual('qaisar@squidex.io'); - expect(user_2.displayName).toEqual('Qaisar'); - }); - - it('should update isLocked property when locking', () => { - const user_1 = new UserDto('1', 'sebastian@squidex.io', 'Sebastian', false); - const user_2 = user_1.lock(); - - expect(user_2.isLocked).toBeTruthy(); - }); - - it('should update isLocked property when unlocking', () => { - const user_1 = new UserDto('1', 'sebastian@squidex.io', 'Sebastian', true); - const user_2 = user_1.unlock(); - - expect(user_2.isLocked).toBeFalsy(); - }); -}); - describe('UsersService', () => { beforeEach(() => { TestBed.configureTestingModule({ @@ -63,7 +34,7 @@ describe('UsersService', () => { it('should make get request to get many users', inject([UsersService, HttpTestingController], (usersService: UsersService, httpMock: HttpTestingController) => { - let users: PublicUserDto[] | null = null; + let users: UserDto[] | null = null; usersService.getUsers().subscribe(result => { users = result; @@ -87,15 +58,15 @@ describe('UsersService', () => { expect(users).toEqual( [ - new PublicUserDto('123', 'User1'), - new PublicUserDto('456', 'User2') + new UserDto('123', 'User1'), + new UserDto('456', 'User2') ]); })); it('should make get request with query to get many users', inject([UsersService, HttpTestingController], (usersService: UsersService, httpMock: HttpTestingController) => { - let users: PublicUserDto[] | null = null; + let users: UserDto[] | null = null; usersService.getUsers('my-query').subscribe(result => { users = result; @@ -119,15 +90,15 @@ describe('UsersService', () => { expect(users).toEqual( [ - new PublicUserDto('123', 'User1'), - new PublicUserDto('456', 'User2') + new UserDto('123', 'User1'), + new UserDto('456', 'User2') ]); })); it('should make get request to get single user', inject([UsersService, HttpTestingController], (usersService: UsersService, httpMock: HttpTestingController) => { - let user: PublicUserDto | null = null; + let user: UserDto | null = null; usersService.getUser('123').subscribe(result => { user = result; @@ -140,190 +111,6 @@ describe('UsersService', () => { req.flush({ id: '123', displayName: 'User1' }); - expect(user).toEqual(new PublicUserDto('123', 'User1')); - })); -}); - -describe('UserManagementService', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ - HttpClientTestingModule - ], - providers: [ - UserManagementService, - { provide: ApiUrlConfig, useValue: new ApiUrlConfig('http://service/p/') } - ] - }); - }); - - afterEach(inject([HttpTestingController], (httpMock: HttpTestingController) => { - httpMock.verify(); - })); - - it('should make get request to get many users', - inject([UserManagementService, HttpTestingController], (userManagementService: UserManagementService, httpMock: HttpTestingController) => { - - let users: UsersDto | null = null; - - userManagementService.getUsers(20, 30).subscribe(result => { - users = result; - }); - - const req = httpMock.expectOne('http://service/p/api/user-management?take=20&skip=30&query='); - - expect(req.request.method).toEqual('GET'); - expect(req.request.headers.get('If-Match')).toBeNull(); - - req.flush({ - total: 100, - items: [ - { - id: '123', - email: 'mail1@domain.com', - displayName: 'User1', - isLocked: true - }, - { - id: '456', - email: 'mail2@domain.com', - displayName: 'User2', - isLocked: true - } - ] - }); - - expect(users).toEqual( - new UsersDto(100, [ - new UserDto('123', 'mail1@domain.com', 'User1', true), - new UserDto('456', 'mail2@domain.com', 'User2', true) - ])); - })); - - it('should make get request with query to get many users', - inject([UserManagementService, HttpTestingController], (userManagementService: UserManagementService, httpMock: HttpTestingController) => { - - let users: UsersDto | null = null; - - userManagementService.getUsers(20, 30, 'my-query').subscribe(result => { - users = result; - }); - - const req = httpMock.expectOne('http://service/p/api/user-management?take=20&skip=30&query=my-query'); - - expect(req.request.method).toEqual('GET'); - expect(req.request.headers.get('If-Match')).toBeNull(); - - req.flush({ - total: 100, - items: [ - { - id: '123', - email: 'mail1@domain.com', - displayName: 'User1', - pictureUrl: 'path/to/image1', - isLocked: true - }, - { - id: '456', - email: 'mail2@domain.com', - displayName: 'User2', - pictureUrl: 'path/to/image2', - isLocked: true - } - ] - }); - - expect(users).toEqual( - new UsersDto(100, [ - new UserDto('123', 'mail1@domain.com', 'User1', true), - new UserDto('456', 'mail2@domain.com', 'User2', true) - ])); - })); - - it('should make get request to get single user', - inject([UserManagementService, HttpTestingController], (userManagementService: UserManagementService, httpMock: HttpTestingController) => { - - let user: UserDto | null = null; - - userManagementService.getUser('123').subscribe(result => { - user = result; - }); - - const req = httpMock.expectOne('http://service/p/api/user-management/123'); - - expect(req.request.method).toEqual('GET'); - expect(req.request.headers.get('If-Match')).toBeNull(); - - req.flush({ - id: '123', - email: 'mail1@domain.com', - displayName: 'User1', - isLocked: true - }); - - expect(user).toEqual(new UserDto('123', 'mail1@domain.com', 'User1', true)); - })); - - it('should make post request to create user', - inject([UserManagementService, HttpTestingController], (userManagementService: UserManagementService, httpMock: HttpTestingController) => { - - const dto = new CreateUserDto('mail@squidex.io', 'Squidex User', 'password'); - - let user: UserDto | null = null; - - userManagementService.postUser(dto).subscribe(result => { - user = result; - }); - - const req = httpMock.expectOne('http://service/p/api/user-management'); - - expect(req.request.method).toEqual('POST'); - expect(req.request.headers.get('If-Match')).toBeNull(); - - req.flush({ id: '123' }); - - expect(user).toEqual(new UserDto('123', dto.email, dto.displayName, false)); - })); - - it('should make put request to update user', - inject([UserManagementService, HttpTestingController], (userManagementService: UserManagementService, httpMock: HttpTestingController) => { - - const dto = new UpdateUserDto('mail@squidex.io', 'Squidex User', 'password'); - - userManagementService.putUser('123', dto).subscribe(); - - const req = httpMock.expectOne('http://service/p/api/user-management/123'); - - expect(req.request.method).toEqual('PUT'); - expect(req.request.headers.get('If-Match')).toBeNull(); - - req.flush({}); - })); - - it('should make put request to lock user', - inject([UserManagementService, HttpTestingController], (userManagementService: UserManagementService, httpMock: HttpTestingController) => { - - userManagementService.lockUser('123').subscribe(); - - const req = httpMock.expectOne('http://service/p/api/user-management/123/lock'); - - expect(req.request.method).toEqual('PUT'); - expect(req.request.headers.get('If-Match')).toBeNull(); - - req.flush({}); - })); - - it('should make put request to unlock user', - inject([UserManagementService, HttpTestingController], (userManagementService: UserManagementService, httpMock: HttpTestingController) => { - - userManagementService.unlockUser('123').subscribe(); - - const req = httpMock.expectOne('http://service/p/api/user-management/123/unlock'); - - expect(req.request.method).toEqual('PUT'); - expect(req.request.headers.get('If-Match')).toBeNull(); - - req.flush({}); + expect(user).toEqual(new UserDto('123', 'User1')); })); }); \ No newline at end of file diff --git a/src/Squidex/app/shared/services/users.service.ts b/src/Squidex/app/shared/services/users.service.ts index eecd01580..855968f7b 100644 --- a/src/Squidex/app/shared/services/users.service.ts +++ b/src/Squidex/app/shared/services/users.service.ts @@ -13,55 +13,7 @@ import '@app/framework/angular/http/http-extensions'; import { ApiUrlConfig, HTTP } from '@app/framework'; -export class UsersDto { - constructor( - public readonly total: number, - public readonly items: UserDto[] - ) { - } -} - export class UserDto { - constructor( - public readonly id: string, - public readonly email: string, - public readonly displayName: string, - public readonly isLocked: boolean - ) { - } - - public update(email: string, displayName: string): UserDto { - return new UserDto(this.id, email, displayName, this.isLocked); - } - - public lock(): UserDto { - return new UserDto(this.id, this.email, this.displayName, true); - } - - public unlock(): UserDto { - return new UserDto(this.id, this.email, this.displayName, false); - } -} - -export class CreateUserDto { - constructor( - public readonly email: string, - public readonly displayName: string, - public readonly password: string - ) { - } -} - -export class UpdateUserDto { - constructor( - public readonly email: string, - public readonly displayName: string, - public readonly password: string - ) { - } -} - -export class PublicUserDto { constructor( public readonly id: string, public readonly displayName: string @@ -77,7 +29,7 @@ export class UsersService { ) { } - public getUsers(query?: string): Observable { + public getUsers(query?: string): Observable { const url = this.apiUrl.buildUrl(`api/users?query=${query || ''}`); return HTTP.getVersioned(this.http, url) @@ -87,61 +39,16 @@ export class UsersService { const items: any[] = body; return items.map(item => { - return new PublicUserDto( - item.id, - item.displayName); - }); - }) - .pretifyError('Failed to load users. Please reload.'); - } - - public getUser(id: string): Observable { - const url = this.apiUrl.buildUrl(`api/users/${id}`); - - return HTTP.getVersioned(this.http, url) - .map(response => { - const body = response.payload.body; - - return new PublicUserDto( - body.id, - body.displayName); - }) - .pretifyError('Failed to load user. Please reload.'); - } -} - -@Injectable() -export class UserManagementService { - constructor( - private readonly http: HttpClient, - private readonly apiUrl: ApiUrlConfig - ) { - } - - public getUsers(take: number, skip: number, query?: string): Observable { - const url = this.apiUrl.buildUrl(`api/user-management?take=${take}&skip=${skip}&query=${query || ''}`); - - return HTTP.getVersioned(this.http, url) - .map(response => { - const body = response.payload.body; - - const items: any[] = body.items; - - const users = items.map(item => { return new UserDto( item.id, - item.email, - item.displayName, - item.isLocked); + item.displayName); }); - - return new UsersDto(body.total, users); }) .pretifyError('Failed to load users. Please reload.'); } public getUser(id: string): Observable { - const url = this.apiUrl.buildUrl(`api/user-management/${id}`); + const url = this.apiUrl.buildUrl(`api/users/${id}`); return HTTP.getVersioned(this.http, url) .map(response => { @@ -149,43 +56,8 @@ export class UserManagementService { return new UserDto( body.id, - body.email, - body.displayName, - body.isLocked); + body.displayName); }) .pretifyError('Failed to load user. Please reload.'); } - - public postUser(dto: CreateUserDto): Observable { - const url = this.apiUrl.buildUrl('api/user-management'); - - return HTTP.postVersioned(this.http, url, dto) - .map(response => { - const body = response.payload.body; - - return new UserDto(body.id, dto.email, dto.displayName, false); - }) - .pretifyError('Failed to create user. Please reload.'); - } - - public putUser(id: string, dto: UpdateUserDto): Observable { - const url = this.apiUrl.buildUrl(`api/user-management/${id}`); - - return HTTP.putVersioned(this.http, url, dto) - .pretifyError('Failed to update user. Please reload.'); - } - - public lockUser(id: string): Observable { - const url = this.apiUrl.buildUrl(`api/user-management/${id}/lock`); - - return HTTP.putVersioned(this.http, url, {}) - .pretifyError('Failed to load users. Please retry.'); - } - - public unlockUser(id: string): Observable { - const url = this.apiUrl.buildUrl(`api/user-management/${id}/unlock`); - - return HTTP.putVersioned(this.http, url, {}) - .pretifyError('Failed to load users. Please retry.'); - } } \ No newline at end of file