From 56011b4996f2c343220981958c34443008fc9c9a Mon Sep 17 00:00:00 2001
From: pvachhani <priva@heliconia.in>
Date: Wed, 29 Jan 2025 18:05:06 +0530
Subject: [PATCH] [MIG] base_user_signature: Migration to 18.0

---
 base_user_signature/README.rst                |  3 +
 base_user_signature/__manifest__.py           |  2 +-
 base_user_signature/readme/CONTRIBUTORS.md    |  2 +
 .../static/description/index.html             |  4 ++
 base_user_signature/tests/__init__.py         |  1 +
 .../tests/test_base_user_signature.py         | 65 +++++++++++++++++++
 6 files changed, 76 insertions(+), 1 deletion(-)
 create mode 100644 base_user_signature/tests/__init__.py
 create mode 100644 base_user_signature/tests/test_base_user_signature.py

diff --git a/base_user_signature/README.rst b/base_user_signature/README.rst
index b37e61371f..05577f10d3 100644
--- a/base_user_signature/README.rst
+++ b/base_user_signature/README.rst
@@ -72,6 +72,9 @@ Contributors
 - Maxime Chambreuil <mchambreuil@opensourceintegrators.com>
 - Italo LOPES <contact@ilopes.me>
 - Saran Lim. <saranl@ecosoft.co.th>
+- `Heliconia Solutions Pvt. Ltd. <https://www.heliconia.io>`__
+
+  - Bhavesh Heliconia
 
 Maintainers
 -----------
diff --git a/base_user_signature/__manifest__.py b/base_user_signature/__manifest__.py
index 32ebf7de93..cd24d303d6 100644
--- a/base_user_signature/__manifest__.py
+++ b/base_user_signature/__manifest__.py
@@ -6,7 +6,7 @@
 
 {
     "name": "Base User Signature",
-    "version": "16.0.1.0.0",
+    "version": "18.0.1.0.0",
     "author": "Camptocamp, Odoo Community Association (OCA)",
     "website": "https://github.com/OCA/social",
     "license": "AGPL-3",
diff --git a/base_user_signature/readme/CONTRIBUTORS.md b/base_user_signature/readme/CONTRIBUTORS.md
index 2b74afc5c3..10c041aa91 100644
--- a/base_user_signature/readme/CONTRIBUTORS.md
+++ b/base_user_signature/readme/CONTRIBUTORS.md
@@ -6,3 +6,5 @@
 - Maxime Chambreuil \<<mchambreuil@opensourceintegrators.com>\>
 - Italo LOPES \<<contact@ilopes.me>\>
 - Saran Lim. \<<saranl@ecosoft.co.th>\>
+- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io)
+  - Bhavesh Heliconia
diff --git a/base_user_signature/static/description/index.html b/base_user_signature/static/description/index.html
index 87657299b5..a38170711e 100644
--- a/base_user_signature/static/description/index.html
+++ b/base_user_signature/static/description/index.html
@@ -420,6 +420,10 @@ <h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
 <li>Maxime Chambreuil &lt;<a class="reference external" href="mailto:mchambreuil&#64;opensourceintegrators.com">mchambreuil&#64;opensourceintegrators.com</a>&gt;</li>
 <li>Italo LOPES &lt;<a class="reference external" href="mailto:contact&#64;ilopes.me">contact&#64;ilopes.me</a>&gt;</li>
 <li>Saran Lim. &lt;<a class="reference external" href="mailto:saranl&#64;ecosoft.co.th">saranl&#64;ecosoft.co.th</a>&gt;</li>
+<li><a class="reference external" href="https://www.heliconia.io">Heliconia Solutions Pvt. Ltd.</a><ul>
+<li>Bhavesh Heliconia</li>
+</ul>
+</li>
 </ul>
 </div>
 <div class="section" id="maintainers">
diff --git a/base_user_signature/tests/__init__.py b/base_user_signature/tests/__init__.py
new file mode 100644
index 0000000000..da998a1a59
--- /dev/null
+++ b/base_user_signature/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_base_user_signature
diff --git a/base_user_signature/tests/test_base_user_signature.py b/base_user_signature/tests/test_base_user_signature.py
new file mode 100644
index 0000000000..0ece54a750
--- /dev/null
+++ b/base_user_signature/tests/test_base_user_signature.py
@@ -0,0 +1,65 @@
+from base64 import b64encode
+from io import BytesIO
+
+from PIL import Image
+
+from odoo.addons.base.tests.common import SavepointCaseWithUserDemo
+
+
+class TestResUsersDigitalSignature(SavepointCaseWithUserDemo):
+    def setUp(self):
+        super().setUp()
+        self.user_model = self.env["res.users"]
+
+        # Create a test user
+        self.user = self.user_model.create(
+            {
+                "name": "Test User",
+                "login": "test_user",
+                "email": "test_user@example.com",
+            }
+        )
+
+    def _generate_sample_image(self):
+        """Generate a small valid image and return its base64-encoded content."""
+        img = Image.new("RGB", (10, 10), color="red")  # Create a red 10x10 image
+        buffer = BytesIO()
+        img.save(buffer, format="PNG")
+        return b64encode(buffer.getvalue()).decode("ascii")
+
+    def test_digital_signature_field(self):
+        """Test assigning and clearing the digital signature field."""
+        # Generate a valid base64-encoded image
+        test_signature = self._generate_sample_image()
+
+        # Assign a digital signature to the user
+        self.user.digital_signature = test_signature
+        self.assertEqual(
+            self.user.digital_signature.decode("ascii"),
+            test_signature,
+            "Digital signature should be set correctly.",
+        )
+
+        # Clear the digital signature using the method
+        self.user.clear_digital_signature()
+        self.assertFalse(
+            self.user.digital_signature, "Digital signature should be cleared."
+        )
+
+    def test_self_readable_fields(self):
+        """Test if 'digital_signature' is included in SELF_READABLE_FIELDS."""
+        readable_fields = self.user.SELF_READABLE_FIELDS
+        self.assertIn(
+            "digital_signature",
+            readable_fields,
+            "'digital_signature' should be in SELF_READABLE_FIELDS.",
+        )
+
+    def test_self_writeable_fields(self):
+        """Test if 'digital_signature' is included in SELF_WRITEABLE_FIELDS."""
+        writeable_fields = self.user.SELF_WRITEABLE_FIELDS
+        self.assertIn(
+            "digital_signature",
+            writeable_fields,
+            "'digital_signature' should be in SELF_WRITEABLE_FIELDS.",
+        )