mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-21 02:35:23 -04:00
Merge pull request #1987 from hedgedoc/fix/embedded_objects
This commit is contained in:
commit
f8c1177ac6
6 changed files with 50 additions and 59 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
});
|
});
|
||||||
|
|
|
@ -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,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 () => {
|
||||||
|
|
|
@ -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([]);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue