Explorar o código

Message from back to native are now encoded with genericEncode

jherve hai 1 ano
pai
achega
ea9164c206
Modificáronse 3 ficheiros con 22 adicións e 23 borrados
  1. 7 6
      native/src/job_search/messages.py
  2. 13 11
      native/tests/test_read_write.py
  3. 2 6
      src/NativeMessage.purs

+ 7 - 6
native/src/job_search/messages.py

@@ -27,16 +27,17 @@ class BackgroundScriptMessage(Message):
 
         try:
             tag = message.pop("tag")
+            [values] = message.pop("values")
         except KeyError:
-            raise ValueError("message should contain a tag")
+            raise ValueError("messages from background script should contain a tag and values")
 
-        message = {to_snake_case(k): v for k, v in message.items()}
+        values = {to_snake_case(k): v for k, v in values.items()}
 
         match tag:
-            case "visited_linkedin_job_page":
-                return VisitedLinkedInJobPageMessage(**message)
-            case "initial_configuration":
-                return InitialConfigurationMessage(**message)
+            case "NativeMessageVisitedJobPage":
+                return VisitedLinkedInJobPageMessage(**values)
+            case "NativeMessageInitialConfiguration":
+                return InitialConfigurationMessage(**values)
             case _:
                 raise ValueError(f"Got message with unknown tag {tag}")
 

+ 13 - 11
native/tests/test_read_write.py

@@ -82,21 +82,23 @@ class TestReadWriter:
     @pytest.fixture(
         params=[
             (
-                {"tag": "initial_configuration", "jobsPath": "jobs_path"},
+                {"tag": "NativeMessageInitialConfiguration", "values": [{"jobsPath": "jobs_path"}]},
                 InitialConfigurationMessage(jobs_path="jobs_path"),
             ),
             (
                 {
-                    "tag": "visited_linkedin_job_page",
-                    "url": "url",
-                    "jobTitle": "job_title",
-                    "pageTitle": "page_title",
-                    "company": "company",
-                    "companyUrl": "company_url",
-                    "companyDomain": "company_domain",
-                    "location": "location",
-                    "hasSimplifiedProcess": True,
-                    "flexibility": "hybrid",
+                    "tag": "NativeMessageVisitedJobPage",
+                    "values": [{
+                        "url": "url",
+                        "jobTitle": "job_title",
+                        "pageTitle": "page_title",
+                        "company": "company",
+                        "companyUrl": "company_url",
+                        "companyDomain": "company_domain",
+                        "location": "location",
+                        "hasSimplifiedProcess": True,
+                        "flexibility": "hybrid"
+                    }]
                 },
                 VisitedLinkedInJobPageMessage(
                     url="url",

+ 2 - 6
src/NativeMessage.purs

@@ -10,7 +10,7 @@ import Browser.WebExt.Runtime (Application, connectNative)
 import Data.Argonaut.Core (Json)
 import Data.Argonaut.Decode (class DecodeJson, JsonDecodeError(..), decodeJson, printJsonDecodeError)
 import Data.Argonaut.Decode.Generic (genericDecodeJson)
-import Data.Argonaut.Encode (class EncodeJson, encodeJson)
+import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Either (Either(..))
 import Data.Generic.Rep (class Generic)
@@ -18,7 +18,6 @@ import Data.Maybe (Maybe)
 import Data.Show.Generic (genericShow)
 import Effect (Effect)
 import Effect.Class.Console (log)
-import Record (union)
 
 data NativeMessage =
   NativeMessageBackground String
@@ -55,10 +54,7 @@ type NativePythonMessageJobAdded = NativePythonMessage (job :: NativePythonJobOf
 
 derive instance Generic NativeMessage _
 instance Show NativeMessage where show = genericShow
-instance EncodeJson NativeMessage where
-  encodeJson (NativeMessageInitialConfiguration r) = encodeJson {tag: "initial_configuration", jobsPath: r.jobsPath}
-  encodeJson (NativeMessageVisitedJobPage r) = encodeJson $ union {tag: "visited_linkedin_job_page"} r
-  encodeJson a = genericEncodeJson a
+instance EncodeJson NativeMessage where encodeJson a = genericEncodeJson a
 
 -- A function used to transform some messages sent by the native application that are in the form
 -- of an object with unknown keys to an array of objects. The long-term solution is probably to