diff --git a/development.md b/development.md index d46e7d3..e50b761 100644 --- a/development.md +++ b/development.md @@ -25,6 +25,11 @@ potentially misleading. 1. Make more jobs 2. Make more wrappers 3. Write more documentation +4. Wrappers should also accept actual keys for when you know them +5. Add utility to manage the token easily to encourage reuse over +new tokens every time + + Trust Follow diff --git a/src/trustcafeapiwrapper/wrappers/post/update_post.py b/src/trustcafeapiwrapper/wrappers/post/update_post.py index d302aab..f289124 100644 --- a/src/trustcafeapiwrapper/wrappers/post/update_post.py +++ b/src/trustcafeapiwrapper/wrappers/post/update_post.py @@ -1,6 +1,6 @@ from trustcafeapiwrapper.utils import get_post_pksk, get_parent_pksk_from_path -def update_post(parent_path, post_path, post_text, blur_label=None, card_url=None, collaborative=False): +def update_post( post_text, post_path=None, parent_path='/', post_key=None, blur_label=None, card_url=None, collaborative=False): """ Updates an existing post. @@ -15,21 +15,38 @@ def update_post(parent_path, post_path, post_text, blur_label=None, card_url=Non Returns: dict: The updated post data. """ - parent_pksk = get_parent_pksk_from_path(parent_path) - post_pksk = get_post_pksk(parent_pksk, post_path) + if post_key is not None: + post_pksk = { + 'pk': post_key.get('pk', None), + 'sk': post_key.get('sk', None) + } + elif post_path is not None and parent_path is not None: + parent_pksk = get_parent_pksk_from_path(parent_path) + post_pksk = get_post_pksk(parent_pksk, post_path) + else: + raise ValueError("Either post_path and parent_path or post_key must be provided.") + + + if post_text is None: + raise ValueError("post_text is required.") + payload = { "key": { "pk": post_pksk.get('pk', None), "sk": post_pksk.get('sk', None) }, - "postSlug": post_path.strip('/post/'), - "blurLabel": blur_label, - "cardUrl": card_url, - "postText": post_text, - "collaborative": collaborative, - + "postSlug": post_pksk.get('sk', '').replace('post#', ''), + "postText": post_text } + if collaborative is not None: + payload["collaborative"] = collaborative + + if blur_label is not None: + payload["blurLabel"] = blur_label + + if card_url is not None: + payload["cardUrl"] = card_url return { "job_function": "post.update", diff --git a/tests/wrappers/update_post.py b/tests/wrappers/update_post.py index 03c0d36..f8cd43d 100644 --- a/tests/wrappers/update_post.py +++ b/tests/wrappers/update_post.py @@ -21,10 +21,73 @@ class TestUpdatePost(unittest.TestCase): self.assertIn("payload", result) self.assertEqual(result["job_function"], "post.update") self.assertEqual(result["payload"]["postText"], self.post_text) - self.assertEqual(result["payload"]["blurLabel"], self.blur_label) - self.assertEqual(result["payload"]["cardUrl"], self.card_url) - self.assertEqual(result["payload"]["collaborative"], self.collaborative) self.assertEqual(result["payload"]["postSlug"], "1235-abcv") self.assertEqual(result["payload"]["key"]["pk"], "maintrunk#maintrunk") self.assertEqual(result["payload"]["key"]["sk"], "post#1235-abcv") - self.assertNotIn("slug", result["payload"]["key"]) \ No newline at end of file + self.assertNotIn("slug", result["payload"]["key"]) + + def test_update_post_with_post_key(self): + post_key = { + "pk": "maintrunk#maintrunk", + "sk": "post#1235-abcv" + } + result = update_post( + post_key=post_key, + post_text=self.post_text, + blur_label=self.blur_label, + card_url=self.card_url, + collaborative=self.collaborative, + ) + self.assertIsInstance(result, dict) + self.assertIn("job_function", result) + self.assertIn("payload", result) + self.assertEqual(result["job_function"], "post.update") + self.assertEqual(result["payload"]["postText"], self.post_text) + self.assertEqual(result["payload"]["postSlug"], "1235-abcv") + self.assertEqual(result["payload"]["key"]["pk"], post_key["pk"]) + self.assertEqual(result["payload"]["key"]["sk"], post_key["sk"]) + self.assertNotIn("slug", result["payload"]["key"]) + + def test_update_collaborative_post(self): + collaborative = True + result = update_post( + parent_path='/', + post_path='/post/1235-abcv', + post_text=self.post_text, + blur_label=self.blur_label, + card_url=self.card_url, + collaborative=collaborative + ) + self.assertIsInstance(result, dict) + self.assertIn("job_function", result) + self.assertIn("payload", result) + self.assertEqual(result["job_function"], "post.update") + self.assertEqual(result["payload"]["postText"], self.post_text) + self.assertEqual(result["payload"]["postSlug"], "1235-abcv") + self.assertEqual(result["payload"]["key"]["pk"], "maintrunk#maintrunk") + self.assertEqual(result["payload"]["key"]["sk"], "post#1235-abcv") + self.assertNotIn("slug", result["payload"]["key"]) + self.assertTrue(result["payload"]["collaborative"]) + + def test_update_blur_label_and_card_url(self): + blur_label = "Sensitive Content" + card_url = "https://example.com/card" + result = update_post( + parent_path='/', + post_path='/post/1235-abcv', + post_text=self.post_text, + blur_label=blur_label, + card_url=card_url, + collaborative=self.collaborative + ) + self.assertIsInstance(result, dict) + self.assertIn("job_function", result) + self.assertIn("payload", result) + self.assertEqual(result["job_function"], "post.update") + self.assertEqual(result["payload"]["postText"], self.post_text) + self.assertEqual(result["payload"]["postSlug"], "1235-abcv") + self.assertEqual(result["payload"]["key"]["pk"], "maintrunk#maintrunk") + self.assertEqual(result["payload"]["key"]["sk"], "post#1235-abcv") + self.assertNotIn("slug", result["payload"]["key"]) + self.assertEqual(result["payload"]["blurLabel"], blur_label) + self.assertEqual(result["payload"]["cardUrl"], card_url) \ No newline at end of file