[grilo-plugins/wip/jfelder/lua-grl-related-keys: 2/2] tests: Add a test for lua-factory GrlRelatedKeys support



commit ac12caad66c24154c6e44a86f975836325c12334
Author: Jean Felder <jfelder src gnome org>
Date:   Fri May 1 22:26:55 2020 +0200

    tests: Add a test for lua-factory GrlRelatedKeys support
    
    json test data are loaded from the file
    grl-media-test-related-keys.json. It contains a key named
    "related-keys" which is an array of related keys.
    
    On the lua side, these "related-keys" are converted into indexed
    arrays in order to create a GrlMedia with related keys.
    
    On the other side, when the data are read from `json-glib.h`, the
    related keys are retrieved by looping through "related-keys" array.

 tests/lua-factory/data/config.ini                  |  2 +
 .../data/grl-media-test-related-keys.json          | 18 ++++++
 tests/lua-factory/data/test-source-grl-media.lua   |  9 +++
 tests/lua-factory/test_lua_factory_grl_media.c     | 73 +++++++++++++++++++---
 .../test_lua_factory_tests.gresource.xml           |  1 +
 5 files changed, 96 insertions(+), 7 deletions(-)
---
diff --git a/tests/lua-factory/data/config.ini b/tests/lua-factory/data/config.ini
index 1f60ea50..2f079a9f 100644
--- a/tests/lua-factory/data/config.ini
+++ b/tests/lua-factory/data/config.ini
@@ -4,6 +4,8 @@ version=1
 # test_lua_factory_grl_media
 [http://grl.media.test/lua-factory/all-metadata.json]
 data = grl-media-test-all-metadata.json
+[http://grl.media.test/lua-factory/related-keys.json]
+data = grl-media-test-related-keys.json
 
 # test_lua_factory_xml_parser
 [http://xml.parser.test/lua-factory/simple.xml]
diff --git a/tests/lua-factory/data/grl-media-test-related-keys.json 
b/tests/lua-factory/data/grl-media-test-related-keys.json
new file mode 100644
index 00000000..bb3fc188
--- /dev/null
+++ b/tests/lua-factory/data/grl-media-test-related-keys.json
@@ -0,0 +1,18 @@
+{
+  "title": "this is a song",
+  "related-keys": [
+    {
+      "artist": "first artist",
+      "mb-artist-id": "bf24ca37-25f4-4e34-9aec-460b94364cfc"
+    },
+    {
+      "artist": "second artist",
+      "mb-artist-id": "6b28ecf0-94e6-48bb-aa2a-5ede325b675b"
+    },
+    {
+      "artist": "third artist",
+      "mb-artist-id": "84a87594-8c48-4865-9ac2-5d8aa29c800a"
+    }
+  ],
+  "mb-release-id": "f14638e1-fb36-358c-aba2-39b084864b13"
+}
diff --git a/tests/lua-factory/data/test-source-grl-media.lua 
b/tests/lua-factory/data/test-source-grl-media.lua
index 644387a5..8761efff 100644
--- a/tests/lua-factory/data/test-source-grl-media.lua
+++ b/tests/lua-factory/data/test-source-grl-media.lua
@@ -66,5 +66,14 @@ function fetch_url_cb(feed)
     grl.callback()
     return
   end
+
+  -- related keys need to have an index
+  if media["related-keys"] then
+    for _, rel_key in pairs(media["related-keys"]) do
+      media[#media + 1] = rel_key
+    end
+    media["related-keys"] = nil
+  end
+
   grl.callback(media, 0)
 end
diff --git a/tests/lua-factory/test_lua_factory_grl_media.c b/tests/lua-factory/test_lua_factory_grl_media.c
index 77244418..5c531538 100644
--- a/tests/lua-factory/test_lua_factory_grl_media.c
+++ b/tests/lua-factory/test_lua_factory_grl_media.c
@@ -76,7 +76,8 @@ test_lua_factory_shutdown (void)
 static void
 check_metadata (GrlMedia *media,
                 GrlKeyID key_id,
-                JsonReader *reader)
+                JsonReader *reader,
+                gint64 index)
 {
   GrlRegistry *registry = grl_registry_get_default ();
   GType type = grl_registry_lookup_metadata_key_type (registry, key_id);
@@ -120,8 +121,14 @@ check_metadata (GrlMedia *media,
       g_assert_null (list);
 
     } else {
-      const gchar *from_json = json_reader_get_string_value (reader);
-      const gchar *from_media = grl_data_get_string (GRL_DATA (media), key_id);
+      GrlRelatedKeys *relkeys;
+      const gchar *from_media;
+      const gchar *from_json;
+
+      from_json = json_reader_get_string_value (reader);
+      relkeys = grl_data_get_related_keys (GRL_DATA (media), key_id, index);
+      g_assert (relkeys);
+      from_media = grl_related_keys_get_string (relkeys, key_id);
       g_assert_cmpstr (from_json, ==, from_media);
     }
   break;
@@ -188,10 +195,31 @@ test_metadata_from_media (GrlMedia *media,
 
       json_reader_read_element (reader, i);
       key_name = json_reader_get_member_name (reader);
-      if (g_strcmp0 (key_name, "type") != 0) {
+      if (g_strcmp0 (key_name, "related-keys") == 0) {
+        gint rel_key_index;
+        gint rel_keys_nr = json_reader_count_elements (reader);
+
+        for (rel_key_index = 0; rel_key_index < rel_keys_nr; rel_key_index++) {
+          const gchar *rel_key_name;
+          guint key_index;
+          guint len_rel_key;
+
+          json_reader_read_element (reader, rel_key_index);
+          len_rel_key = json_reader_count_members (reader);
+          for (key_index = 0; key_index < len_rel_key; key_index++) {
+            json_reader_read_element (reader, key_index);
+            rel_key_name = json_reader_get_member_name (reader);
+            key_id = grl_registry_lookup_metadata_key (registry, rel_key_name);
+            g_assert (key_id != GRL_METADATA_KEY_INVALID);
+            check_metadata (media, key_id, reader, rel_key_index);
+            json_reader_end_element (reader);
+          }
+          json_reader_end_element (reader);
+        }
+      } else if (g_strcmp0 (key_name, "type") != 0) {
         key_id = grl_registry_lookup_metadata_key (registry, key_name);
         g_assert (key_id != GRL_METADATA_KEY_INVALID);
-        check_metadata (media, key_id, reader);
+        check_metadata (media, key_id, reader, 0);
       }
       json_reader_end_element (reader);
     }
@@ -268,6 +296,34 @@ test_build_media (void)
   }
 }
 
+static void
+test_related_keys (void)
+{
+  gint i;
+
+  struct {
+    gchar *uri;
+    gchar *url;
+  } media_tests[] = {
+    /* This is a basic test to check that related keys are correctly set. */
+    { GRESOURCE_PREFIX "grl-media-test-related-keys.json",
+      TEST_GRL_MEDIA_URL "related-keys.json" }
+  };
+
+  for (i = 0; i < G_N_ELEMENTS (media_tests); i++) {
+    GFile *file;
+    gchar *input;
+    GError *error = NULL;
+
+    file = g_file_new_for_uri (media_tests[i].uri);
+    g_file_load_contents (file, NULL, &input, NULL, NULL, &error);
+    g_assert_no_error (error);
+    g_object_unref (file);
+    resolve_fake_src (input, media_tests[i].url);
+    g_free (input);
+  }
+}
+
 gint
 main (gint argc, gchar **argv)
 {
@@ -285,9 +341,12 @@ main (gint argc, gchar **argv)
 
   /* Check if metadata-keys are created with value we expect with no errors */
   g_test_add_func ("/lua-factory/lua-library/metadata-keys", test_build_media);
+
+  /* test GrlRelatedKeys */
+  g_test_add_func ("/lua-factory/lua-library/related-keys", test_related_keys);
+
   /* TODO:
-   * 1-) keys with array of all provided by grl_data_add_* (binary, boxed, float,..)
-   * 2-) test for GrlRelatedKeys after: https://bugzilla.gnome.org/show_bug.cgi?id=756203
+   * keys with array of all provided by grl_data_add_* (binary, boxed, float,..)
    */
 
   gint result = g_test_run ();
diff --git a/tests/lua-factory/test_lua_factory_tests.gresource.xml 
b/tests/lua-factory/test_lua_factory_tests.gresource.xml
index f936db66..76e729d3 100644
--- a/tests/lua-factory/test_lua_factory_tests.gresource.xml
+++ b/tests/lua-factory/test_lua_factory_tests.gresource.xml
@@ -2,5 +2,6 @@
 <gresources>
   <gresource prefix="/org/gnome/grilo/plugins/test/lua-factory/">
     <file compressed="false">data/grl-media-test-all-metadata.json</file>
+    <file compressed="false">data/grl-media-test-related-keys.json</file>
   </gresource>
 </gresources>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]