Merge pull request #1987 from hedgedoc/fix/embedded_objects

This commit is contained in:
David Mehren 2022-01-23 10:45:27 +01:00 committed by GitHub
commit f8c1177ac6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 50 additions and 59 deletions

View file

@ -77,10 +77,10 @@ export class NoteMetadataDto {
/** /**
* User that last edited the note * User that last edited the note
*/ */
@ValidateNested() @IsString()
@ApiPropertyOptional({ type: UserInfoDto }) @ApiPropertyOptional()
@IsOptional() @IsOptional()
updateUser: UserInfoDto | null; updateUsername: string | null;
/** /**
* Counts how many times the published note has been viewed * Counts how many times the published note has been viewed

View file

@ -12,16 +12,13 @@ import {
ValidateNested, ValidateNested,
} from 'class-validator'; } from 'class-validator';
import { GroupInfoDto } from '../groups/group-info.dto';
import { UserInfoDto } from '../users/user-info.dto';
export class NoteUserPermissionEntryDto { export class NoteUserPermissionEntryDto {
/** /**
* User this permission applies to * Username of the User this permission applies to
*/ */
@ValidateNested() @IsString()
@ApiProperty({ type: UserInfoDto }) @ApiProperty()
user: UserInfoDto; username: string;
/** /**
* True if the user is allowed to edit the note * True if the user is allowed to edit the note
@ -52,11 +49,11 @@ export class NoteUserPermissionUpdateDto {
export class NoteGroupPermissionEntryDto { export class NoteGroupPermissionEntryDto {
/** /**
* Group this permission applies to * Name of the Group this permission applies to
*/ */
@ValidateNested() @IsString()
@ApiProperty({ type: GroupInfoDto }) @ApiProperty()
group: GroupInfoDto; groupName: string;
/** /**
* True if the group members are allowed to edit the note * True if the group members are allowed to edit the note
@ -74,7 +71,7 @@ export class NoteGroupPermissionUpdateDto {
*/ */
@IsString() @IsString()
@ApiProperty() @ApiProperty()
groupname: string; groupName: string;
/** /**
* True if the group members should be allowed to edit the note * True if the group members should be allowed to edit the note
@ -87,12 +84,12 @@ export class NoteGroupPermissionUpdateDto {
export class NotePermissionsDto { export class NotePermissionsDto {
/** /**
* User this permission applies to * Username of the User this permission applies to
*/ */
@ValidateNested() @IsString()
@ApiPropertyOptional({ type: UserInfoDto }) @ApiPropertyOptional()
@IsOptional() @IsOptional()
owner: UserInfoDto | null; owner: string | null;
/** /**
* List of users the note is shared with * List of users the note is shared with

View file

@ -359,12 +359,12 @@ describe('NotesService', () => {
userPermissionUpdate.username = 'hardcoded'; userPermissionUpdate.username = 'hardcoded';
userPermissionUpdate.canEdit = true; userPermissionUpdate.canEdit = true;
const groupPermissionUpate = new NoteGroupPermissionUpdateDto(); const groupPermissionUpate = new NoteGroupPermissionUpdateDto();
groupPermissionUpate.groupname = 'testGroup'; groupPermissionUpate.groupName = 'testGroup';
groupPermissionUpate.canEdit = false; groupPermissionUpate.canEdit = false;
const user = User.create(userPermissionUpdate.username, 'Testy') as User; const user = User.create(userPermissionUpdate.username, 'Testy') as User;
const group = Group.create( const group = Group.create(
groupPermissionUpate.groupname, groupPermissionUpate.groupName,
groupPermissionUpate.groupname, groupPermissionUpate.groupName,
false, false,
) as Group; ) as Group;
const note = Note.create(user) as Note; const note = Note.create(user) as Note;
@ -443,7 +443,7 @@ describe('NotesService', () => {
}); });
expect(await savedNote.userPermissions).toHaveLength(0); expect(await savedNote.userPermissions).toHaveLength(0);
expect((await savedNote.groupPermissions)[0].group.name).toEqual( expect((await savedNote.groupPermissions)[0].group.name).toEqual(
groupPermissionUpate.groupname, groupPermissionUpate.groupName,
); );
expect((await savedNote.groupPermissions)[0].canEdit).toEqual( expect((await savedNote.groupPermissions)[0].canEdit).toEqual(
groupPermissionUpate.canEdit, groupPermissionUpate.canEdit,
@ -468,7 +468,7 @@ describe('NotesService', () => {
userPermissionUpdate.canEdit, userPermissionUpdate.canEdit,
); );
expect((await savedNote.groupPermissions)[0].group.name).toEqual( expect((await savedNote.groupPermissions)[0].group.name).toEqual(
groupPermissionUpate.groupname, groupPermissionUpate.groupName,
); );
expect((await savedNote.groupPermissions)[0].canEdit).toEqual( expect((await savedNote.groupPermissions)[0].canEdit).toEqual(
groupPermissionUpate.canEdit, groupPermissionUpate.canEdit,
@ -504,7 +504,7 @@ describe('NotesService', () => {
userPermissionUpdate.canEdit, userPermissionUpdate.canEdit,
); );
expect((await savedNote.groupPermissions)[0].group.name).toEqual( expect((await savedNote.groupPermissions)[0].group.name).toEqual(
groupPermissionUpate.groupname, groupPermissionUpate.groupName,
); );
expect((await savedNote.groupPermissions)[0].canEdit).toEqual( expect((await savedNote.groupPermissions)[0].canEdit).toEqual(
groupPermissionUpate.canEdit, groupPermissionUpate.canEdit,
@ -534,7 +534,7 @@ describe('NotesService', () => {
); );
expect(await savedNote.userPermissions).toHaveLength(0); expect(await savedNote.userPermissions).toHaveLength(0);
expect((await savedNote.groupPermissions)[0].group.name).toEqual( expect((await savedNote.groupPermissions)[0].group.name).toEqual(
groupPermissionUpate.groupname, groupPermissionUpate.groupName,
); );
expect((await savedNote.groupPermissions)[0].canEdit).toEqual( expect((await savedNote.groupPermissions)[0].canEdit).toEqual(
groupPermissionUpate.canEdit, groupPermissionUpate.canEdit,
@ -570,7 +570,7 @@ describe('NotesService', () => {
userPermissionUpdate.canEdit, userPermissionUpdate.canEdit,
); );
expect((await savedNote.groupPermissions)[0].group.name).toEqual( expect((await savedNote.groupPermissions)[0].group.name).toEqual(
groupPermissionUpate.groupname, groupPermissionUpate.groupName,
); );
expect((await savedNote.groupPermissions)[0].canEdit).toEqual( expect((await savedNote.groupPermissions)[0].canEdit).toEqual(
groupPermissionUpate.canEdit, groupPermissionUpate.canEdit,
@ -613,7 +613,7 @@ describe('NotesService', () => {
userPermissionUpdate.canEdit, userPermissionUpdate.canEdit,
); );
expect((await savedNote.groupPermissions)[0].group.name).toEqual( expect((await savedNote.groupPermissions)[0].group.name).toEqual(
groupPermissionUpate.groupname, groupPermissionUpate.groupName,
); );
expect((await savedNote.groupPermissions)[0].canEdit).toEqual( expect((await savedNote.groupPermissions)[0].canEdit).toEqual(
groupPermissionUpate.canEdit, groupPermissionUpate.canEdit,
@ -686,13 +686,12 @@ describe('NotesService', () => {
}, },
]); ]);
const permissions = await service.toNotePermissionsDto(note); const permissions = await service.toNotePermissionsDto(note);
expect(permissions.owner).not.toEqual(null); expect(permissions.owner).toEqual(user.username);
expect(permissions.owner?.username).toEqual(user.username);
expect(permissions.sharedToUsers).toHaveLength(1); expect(permissions.sharedToUsers).toHaveLength(1);
expect(permissions.sharedToUsers[0].user.username).toEqual(user.username); expect(permissions.sharedToUsers[0].username).toEqual(user.username);
expect(permissions.sharedToUsers[0].canEdit).toEqual(true); expect(permissions.sharedToUsers[0].canEdit).toEqual(true);
expect(permissions.sharedToGroups).toHaveLength(1); expect(permissions.sharedToGroups).toHaveLength(1);
expect(permissions.sharedToGroups[0].group.displayName).toEqual( expect(permissions.sharedToGroups[0].groupName).toEqual(
group.displayName, group.displayName,
); );
expect(permissions.sharedToGroups[0].canEdit).toEqual(true); expect(permissions.sharedToGroups[0].canEdit).toEqual(true);
@ -777,21 +776,21 @@ describe('NotesService', () => {
expect(metadataDto.description).toEqual(note.description); expect(metadataDto.description).toEqual(note.description);
expect(metadataDto.editedBy).toHaveLength(1); expect(metadataDto.editedBy).toHaveLength(1);
expect(metadataDto.editedBy[0]).toEqual(user.username); expect(metadataDto.editedBy[0]).toEqual(user.username);
expect(metadataDto.permissions.owner.username).toEqual(user.username); expect(metadataDto.permissions.owner).toEqual(user.username);
expect(metadataDto.permissions.sharedToUsers).toHaveLength(1); expect(metadataDto.permissions.sharedToUsers).toHaveLength(1);
expect(metadataDto.permissions.sharedToUsers[0].user.username).toEqual( expect(metadataDto.permissions.sharedToUsers[0].username).toEqual(
user.username, user.username,
); );
expect(metadataDto.permissions.sharedToUsers[0].canEdit).toEqual(true); expect(metadataDto.permissions.sharedToUsers[0].canEdit).toEqual(true);
expect(metadataDto.permissions.sharedToGroups).toHaveLength(1); expect(metadataDto.permissions.sharedToGroups).toHaveLength(1);
expect( expect(metadataDto.permissions.sharedToGroups[0].groupName).toEqual(
metadataDto.permissions.sharedToGroups[0].group.displayName, group.displayName,
).toEqual(group.displayName); );
expect(metadataDto.permissions.sharedToGroups[0].canEdit).toEqual(true); expect(metadataDto.permissions.sharedToGroups[0].canEdit).toEqual(true);
expect(metadataDto.tags).toHaveLength(1); expect(metadataDto.tags).toHaveLength(1);
expect(metadataDto.tags[0]).toEqual((await note.tags)[0].name); expect(metadataDto.tags[0]).toEqual((await note.tags)[0].name);
expect(metadataDto.updatedAt).toEqual(revisions[0].createdAt); expect(metadataDto.updatedAt).toEqual(revisions[0].createdAt);
expect(metadataDto.updateUser.username).toEqual(user.username); expect(metadataDto.updateUsername).toEqual(user.username);
expect(metadataDto.viewCount).toEqual(note.viewCount); expect(metadataDto.viewCount).toEqual(note.viewCount);
}); });
}); });
@ -879,27 +878,25 @@ describe('NotesService', () => {
expect(noteDto.metadata.description).toEqual(note.description); expect(noteDto.metadata.description).toEqual(note.description);
expect(noteDto.metadata.editedBy).toHaveLength(1); expect(noteDto.metadata.editedBy).toHaveLength(1);
expect(noteDto.metadata.editedBy[0]).toEqual(user.username); expect(noteDto.metadata.editedBy[0]).toEqual(user.username);
expect(noteDto.metadata.permissions.owner.username).toEqual( expect(noteDto.metadata.permissions.owner).toEqual(user.username);
expect(noteDto.metadata.permissions.sharedToUsers).toHaveLength(1);
expect(noteDto.metadata.permissions.sharedToUsers[0].username).toEqual(
user.username, user.username,
); );
expect(noteDto.metadata.permissions.sharedToUsers).toHaveLength(1);
expect(
noteDto.metadata.permissions.sharedToUsers[0].user.username,
).toEqual(user.username);
expect(noteDto.metadata.permissions.sharedToUsers[0].canEdit).toEqual( expect(noteDto.metadata.permissions.sharedToUsers[0].canEdit).toEqual(
true, true,
); );
expect(noteDto.metadata.permissions.sharedToGroups).toHaveLength(1); expect(noteDto.metadata.permissions.sharedToGroups).toHaveLength(1);
expect( expect(noteDto.metadata.permissions.sharedToGroups[0].groupName).toEqual(
noteDto.metadata.permissions.sharedToGroups[0].group.displayName, group.displayName,
).toEqual(group.displayName); );
expect(noteDto.metadata.permissions.sharedToGroups[0].canEdit).toEqual( expect(noteDto.metadata.permissions.sharedToGroups[0].canEdit).toEqual(
true, true,
); );
expect(noteDto.metadata.tags).toHaveLength(1); expect(noteDto.metadata.tags).toHaveLength(1);
expect(noteDto.metadata.tags[0]).toEqual((await note.tags)[0].name); expect(noteDto.metadata.tags[0]).toEqual((await note.tags)[0].name);
expect(noteDto.metadata.updatedAt).toEqual(revisions[0].createdAt); expect(noteDto.metadata.updatedAt).toEqual(revisions[0].createdAt);
expect(noteDto.metadata.updateUser.username).toEqual(user.username); expect(noteDto.metadata.updateUsername).toEqual(user.username);
expect(noteDto.metadata.viewCount).toEqual(note.viewCount); expect(noteDto.metadata.viewCount).toEqual(note.viewCount);
expect(noteDto.content).toEqual(content); expect(noteDto.content).toEqual(content);
}); });

View file

@ -285,7 +285,7 @@ export class NotesService {
); );
const groups = newPermissions.sharedToGroups.map( const groups = newPermissions.sharedToGroups.map(
(groupPermission) => groupPermission.groupname, (groupPermission) => groupPermission.groupName,
); );
if (checkArrayForDuplicates(users) || checkArrayForDuplicates(groups)) { if (checkArrayForDuplicates(users) || checkArrayForDuplicates(groups)) {
@ -318,7 +318,7 @@ export class NotesService {
// Create groupPermissions // Create groupPermissions
for (const newGroupPermission of newPermissions.sharedToGroups) { for (const newGroupPermission of newPermissions.sharedToGroups) {
const group = await this.groupsService.getGroupByName( const group = await this.groupsService.getGroupByName(
newGroupPermission.groupname, newGroupPermission.groupName,
); );
const createdPermission = NoteGroupPermission.create( const createdPermission = NoteGroupPermission.create(
group, group,
@ -373,13 +373,13 @@ export class NotesService {
const userPermissions = await note.userPermissions; const userPermissions = await note.userPermissions;
const groupPermissions = await note.groupPermissions; const groupPermissions = await note.groupPermissions;
return { return {
owner: owner ? this.usersService.toUserDto(owner) : null, owner: owner ? owner.username : null,
sharedToUsers: userPermissions.map((noteUserPermission) => ({ sharedToUsers: userPermissions.map((noteUserPermission) => ({
user: this.usersService.toUserDto(noteUserPermission.user), username: noteUserPermission.user.username,
canEdit: noteUserPermission.canEdit, canEdit: noteUserPermission.canEdit,
})), })),
sharedToGroups: groupPermissions.map((noteGroupPermission) => ({ sharedToGroups: groupPermissions.map((noteGroupPermission) => ({
group: this.groupsService.toGroupDto(noteGroupPermission.group), groupName: noteGroupPermission.group.name,
canEdit: noteGroupPermission.canEdit, canEdit: noteGroupPermission.canEdit,
})), })),
}; };
@ -406,7 +406,7 @@ export class NotesService {
permissions: await this.toNotePermissionsDto(note), permissions: await this.toNotePermissionsDto(note),
tags: await this.toTagList(note), tags: await this.toTagList(note),
updatedAt: (await this.getLatestRevision(note)).createdAt, updatedAt: (await this.getLatestRevision(note)).createdAt,
updateUser: updateUser ? this.usersService.toUserDto(updateUser) : null, updateUsername: updateUser ? updateUser.username : null,
viewCount: note.viewCount, viewCount: note.viewCount,
}; };
} }

View file

@ -175,7 +175,7 @@ describe('Me', () => {
const noteMetaDtos = response.body as NoteMetadataDto[]; const noteMetaDtos = response.body as NoteMetadataDto[];
expect(noteMetaDtos).toHaveLength(1); expect(noteMetaDtos).toHaveLength(1);
expect(noteMetaDtos[0].primaryAlias).toEqual(noteName); expect(noteMetaDtos[0].primaryAlias).toEqual(noteName);
expect(noteMetaDtos[0].updateUser?.username).toEqual(user.username); expect(noteMetaDtos[0].updateUsername).toEqual(user.username);
}); });
it('GET /me/media', async () => { it('GET /me/media', async () => {

View file

@ -276,15 +276,12 @@ describe('Notes', () => {
expect(metadata.body.description).toEqual(''); expect(metadata.body.description).toEqual('');
expect(typeof metadata.body.createdAt).toEqual('string'); expect(typeof metadata.body.createdAt).toEqual('string');
expect(metadata.body.editedBy).toEqual([]); expect(metadata.body.editedBy).toEqual([]);
expect(metadata.body.permissions.owner.username).toEqual('hardcoded'); expect(metadata.body.permissions.owner).toEqual('hardcoded');
expect(metadata.body.permissions.sharedToUsers).toEqual([]); expect(metadata.body.permissions.sharedToUsers).toEqual([]);
expect(metadata.body.permissions.sharedToUsers).toEqual([]); expect(metadata.body.permissions.sharedToUsers).toEqual([]);
expect(metadata.body.tags).toEqual([]); expect(metadata.body.tags).toEqual([]);
expect(typeof metadata.body.updatedAt).toEqual('string'); expect(typeof metadata.body.updatedAt).toEqual('string');
expect(typeof metadata.body.updateUser.displayName).toEqual('string'); expect(typeof metadata.body.updateUsername).toEqual('string');
expect(typeof metadata.body.updateUser.username).toEqual('string');
expect(typeof metadata.body.updateUser.email).toEqual('string');
expect(typeof metadata.body.updateUser.photo).toEqual('string');
expect(typeof metadata.body.viewCount).toEqual('number'); expect(typeof metadata.body.viewCount).toEqual('number');
expect(metadata.body.editedBy).toEqual([]); expect(metadata.body.editedBy).toEqual([]);
}); });