From 7a5af6af99453056afc2dceffb8cbc9695ad8250 Mon Sep 17 00:00:00 2001
From: Houkime <>
Date: Wed, 19 Apr 2023 11:34:14 +0000
Subject: [PATCH] test(services): test that we indeed return correct folders
 and owned folders from real services

---
 .../services/bitwarden/__init__.py            |  4 ++++
 selfprivacy_api/services/pleroma/__init__.py  | 20 +++++++++++++++--
 tests/test_services.py                        | 22 +++++++++++++++++++
 3 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/selfprivacy_api/services/bitwarden/__init__.py b/selfprivacy_api/services/bitwarden/__init__.py
index 8d2a903..56eb0fd 100644
--- a/selfprivacy_api/services/bitwarden/__init__.py
+++ b/selfprivacy_api/services/bitwarden/__init__.py
@@ -37,6 +37,10 @@ class Bitwarden(Service):
         """Read SVG icon from file and return it as base64 encoded string."""
         return base64.b64encode(BITWARDEN_ICON.encode("utf-8")).decode("utf-8")
 
+    @staticmethod
+    def get_user() -> str:
+        return "vaultwarden"
+
     @staticmethod
     def get_url() -> typing.Optional[str]:
         """Return service url."""
diff --git a/selfprivacy_api/services/pleroma/__init__.py b/selfprivacy_api/services/pleroma/__init__.py
index 0191c18..f7e185b 100644
--- a/selfprivacy_api/services/pleroma/__init__.py
+++ b/selfprivacy_api/services/pleroma/__init__.py
@@ -6,6 +6,7 @@ from selfprivacy_api.jobs import Job, Jobs
 from selfprivacy_api.services.generic_service_mover import FolderMoveNames, move_service
 from selfprivacy_api.services.generic_status_getter import get_service_status
 from selfprivacy_api.services.service import Service, ServiceDnsRecord, ServiceStatus
+from selfprivacy_api.services.owned_path import OwnedPath
 from selfprivacy_api.utils import ReadUserData, WriteUserData, get_domain
 from selfprivacy_api.utils.block_devices import BlockDevice
 import selfprivacy_api.utils.network as network_utils
@@ -96,8 +97,23 @@ class Pleroma(Service):
         return ""
 
     @staticmethod
-    def get_folders() -> typing.List[str]:
-        return ["/var/lib/pleroma", "/var/lib/postgresql"]
+    def get_owned_folders() -> typing.List[OwnedPath]:
+        """
+        Get a list of occupied directories with ownership info
+        pleroma has folders that are owned by different users
+        """
+        return [
+            OwnedPath(
+                path="/var/lib/pleroma",
+                owner="pleroma",
+                group="pleroma",
+            ),
+            OwnedPath(
+                path="/var/lib/postgresql",
+                owner="postgres",
+                group="postgres",
+            ),
+        ]
 
     @staticmethod
     def get_drive() -> str:
diff --git a/tests/test_services.py b/tests/test_services.py
index 52164a9..fbbae09 100644
--- a/tests/test_services.py
+++ b/tests/test_services.py
@@ -3,6 +3,10 @@
 """
 from pytest import raises
 
+from selfprivacy_api.services.bitwarden import Bitwarden
+from selfprivacy_api.services.pleroma import Pleroma
+from selfprivacy_api.services.owned_path import OwnedPath
+
 from selfprivacy_api.services.test_service import DummyService
 from selfprivacy_api.services.service import Service
 
@@ -18,3 +22,21 @@ def test_unimplemented_folders_raises():
 
     owned_folders = OurDummy.get_owned_folders()
     assert owned_folders is not None
+
+
+def test_owned_folders_from_not_owned():
+    assert Bitwarden.get_owned_folders() == [
+        OwnedPath(
+            path=folder,
+            group="vaultwarden",
+            owner="vaultwarden",
+        )
+        for folder in Bitwarden.get_folders()
+    ]
+
+
+def test_paths_from_owned_paths():
+    assert len(Pleroma.get_folders()) == 2
+    assert Pleroma.get_folders() == [
+        ownedpath.path for ownedpath in Pleroma.get_owned_folders()
+    ]