From 52750429b0e2b12452c3128dc465c0aa365cbf80 Mon Sep 17 00:00:00 2001
From: Marius Friess <34072851+mariusfriess@users.noreply.github.com>
Date: Wed, 16 Aug 2023 12:47:05 +0200
Subject: [PATCH] Add option to change room password (#54)

---
 src/room/mock/room.service.mock.ts | 8 +++++++-
 src/room/room.controller.spec.ts   | 2 ++
 src/room/room.controller.ts        | 2 +-
 src/room/room.entity.ts            | 2 +-
 src/room/room.service.spec.ts      | 9 ++++++++-
 src/room/room.service.ts           | 3 +++
 6 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/src/room/mock/room.service.mock.ts b/src/room/mock/room.service.mock.ts
index 27918e4..a104e70 100644
--- a/src/room/mock/room.service.mock.ts
+++ b/src/room/mock/room.service.mock.ts
@@ -20,11 +20,17 @@ export class MockRoomService {
     });
   }
 
-  public async update(id: number, category: Category, name: string) {
+  public async update(
+    id: number,
+    category: Category,
+    name: string,
+    password?: string,
+  ) {
     if (id === 1 && category === this.testCategory) {
       return Promise.resolve({
         ...this.testRoom,
         name,
+        password,
       });
     }
     throw new Error('Room not found');
diff --git a/src/room/room.controller.spec.ts b/src/room/room.controller.spec.ts
index e39ac51..63a2c41 100644
--- a/src/room/room.controller.spec.ts
+++ b/src/room/room.controller.spec.ts
@@ -127,6 +127,7 @@ describe('RoomController', () => {
   describe('update', () => {
     const updateRoomDto = {
       name: 'Updated Room',
+      password: 'new-password',
     };
 
     it('should update the room and return the updated room', async () => {
@@ -139,6 +140,7 @@ describe('RoomController', () => {
       expect(result).toEqual(
         expect.objectContaining({
           name: updateRoomDto.name,
+          password: updateRoomDto.password,
         }),
       );
     });
diff --git a/src/room/room.controller.ts b/src/room/room.controller.ts
index c98aa65..b6a84f1 100644
--- a/src/room/room.controller.ts
+++ b/src/room/room.controller.ts
@@ -60,7 +60,7 @@ export class RoomController {
   ) {
     const user = await this.auth.user();
     const category = await this.categories.get(categoryId, user);
-    return this.rooms.update(roomId, category, data.name);
+    return this.rooms.update(roomId, category, data.name, data.password);
   }
 
   /**
diff --git a/src/room/room.entity.ts b/src/room/room.entity.ts
index 928cf9a..ba494d8 100644
--- a/src/room/room.entity.ts
+++ b/src/room/room.entity.ts
@@ -21,7 +21,7 @@ export class Room {
   @Property()
   name: string;
 
-  @Property({ hidden: true })
+  @Property()
   password?: string;
 
   @ManyToOne({ onDelete: 'cascade' })
diff --git a/src/room/room.service.spec.ts b/src/room/room.service.spec.ts
index e4fc300..22e348a 100644
--- a/src/room/room.service.spec.ts
+++ b/src/room/room.service.spec.ts
@@ -125,10 +125,17 @@ describe('RoomService', () => {
   describe('update', () => {
     it('should successfully update the room name and return the updated room', async () => {
       const updatedName = 'Updated Room';
-      const result = await service.update(1, TEST_CATEGORY, updatedName);
+      const updatedPassword = 'new-password';
+      const result = await service.update(
+        1,
+        TEST_CATEGORY,
+        updatedName,
+        updatedPassword,
+      );
 
       expect(result).toEqual(TEST_ROOM);
       expect(TEST_ROOM.name).toBe(updatedName);
+      expect(TEST_ROOM.password).toBe(updatedPassword);
       expect(entityManager.persistAndFlush).toHaveBeenCalledWith(TEST_ROOM);
     });
 
diff --git a/src/room/room.service.ts b/src/room/room.service.ts
index ddba596..6220922 100644
--- a/src/room/room.service.ts
+++ b/src/room/room.service.ts
@@ -61,16 +61,19 @@ export class RoomService {
    * @param id - The ID of the room.
    * @param category - The category of the room.
    * @param name - The new name for the room.
+   * @param password - The optional password for the room.
    * @returns The updated room.
    */
   public async update(
     id: number,
     category: Category,
     name: string,
+    password?: string,
   ): Promise<Room> {
     const room = await this.get(id, category);
 
     room.name = name;
+    room.password = password;
 
     await this.em.persistAndFlush(room);
 
-- 
GitLab