summaryrefslogtreecommitdiff
path: root/tests/spotify-cover/test_spotify_cover.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/spotify-cover/test_spotify_cover.c')
-rw-r--r--tests/spotify-cover/test_spotify_cover.c290
1 files changed, 290 insertions, 0 deletions
diff --git a/tests/spotify-cover/test_spotify_cover.c b/tests/spotify-cover/test_spotify_cover.c
new file mode 100644
index 0000000..f907543
--- /dev/null
+++ b/tests/spotify-cover/test_spotify_cover.c
@@ -0,0 +1,290 @@
+/*
+ * Copyright (C) 2014 Igalia S.L.
+ *
+ * Author: Juan A. Suarez Romero <jasuarez@igalia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#include <grilo.h>
+
+#define LASTFM_ALBUMART_ID "grl-spotify-cover"
+
+static GrlMedia *
+build_media_audio (const gchar *artist,
+ const gchar *album)
+{
+ GrlMedia *media;
+
+ media = grl_media_audio_new ();
+ grl_media_audio_set_artist (GRL_MEDIA_AUDIO (media), artist);
+ grl_media_audio_set_album (GRL_MEDIA_AUDIO (media), album);
+
+ return media;
+}
+
+static void
+test_setup (void)
+{
+ GError *error = NULL;
+ GrlRegistry *registry;
+
+ registry = grl_registry_get_default ();
+ grl_registry_load_all_plugins (registry, &error);
+ g_assert_no_error (error);
+}
+
+static void
+test_may_resolve_good (void)
+{
+ GList *missing_keys = NULL;
+ GrlMedia *media;
+ GrlRegistry *registry;
+ GrlSource *source;
+ gboolean can_resolve;
+
+ registry = grl_registry_get_default ();
+ source = grl_registry_lookup_source (registry, LASTFM_ALBUMART_ID);
+ g_assert (source);
+
+ media = build_media_audio ("My Artist", "My Album");
+
+ can_resolve = grl_source_may_resolve (source, media, GRL_METADATA_KEY_THUMBNAIL, &missing_keys);
+
+ g_assert (can_resolve);
+ g_assert (!missing_keys);
+
+ g_object_unref (media);
+}
+
+static void
+test_may_resolve_wrong_key (void)
+{
+ GList *missing_keys = NULL;
+ GrlMedia *media;
+ GrlRegistry *registry;
+ GrlSource *source;
+ gboolean can_resolve;
+
+ registry = grl_registry_get_default ();
+ source = grl_registry_lookup_source (registry, LASTFM_ALBUMART_ID);
+ g_assert (source);
+
+ media = build_media_audio ("My Artist", "My Album");
+
+ can_resolve = grl_source_may_resolve (source, media, GRL_METADATA_KEY_TITLE, &missing_keys);
+
+ g_assert (!can_resolve);
+ g_assert (!missing_keys);
+
+ g_object_unref (media);
+}
+
+static void
+test_may_resolve_missing_key (void)
+{
+ GList *missing_keys = NULL;
+ GrlMedia *media;
+ GrlRegistry *registry;
+ GrlSource *source;
+ gboolean can_resolve;
+
+ registry = grl_registry_get_default ();
+ source = grl_registry_lookup_source (registry, LASTFM_ALBUMART_ID);
+ g_assert (source);
+
+ media = build_media_audio ("My Artist", NULL);
+
+ can_resolve = grl_source_may_resolve (source, media, GRL_METADATA_KEY_THUMBNAIL, &missing_keys);
+
+ g_assert (!can_resolve);
+ g_assert_cmpint (g_list_length (missing_keys), ==, 1);
+ g_assert (GRLPOINTER_TO_KEYID (missing_keys->data) == GRL_METADATA_KEY_ALBUM);
+
+ g_object_unref (media);
+}
+
+static void
+test_may_resolve_missing_media (void)
+{
+ GList *missing_keys = NULL;
+ GrlRegistry *registry;
+ GrlSource *source;
+ gboolean can_resolve;
+
+ registry = grl_registry_get_default ();
+ source = grl_registry_lookup_source (registry, LASTFM_ALBUMART_ID);
+ g_assert (source);
+
+ can_resolve = grl_source_may_resolve (source, NULL, GRL_METADATA_KEY_THUMBNAIL, &missing_keys);
+
+ g_assert (!can_resolve);
+ g_assert_cmpint (g_list_length (missing_keys), ==, 2);
+ g_assert (GRLPOINTER_TO_KEYID (missing_keys->data) == GRL_METADATA_KEY_ARTIST ||
+ GRLPOINTER_TO_KEYID (missing_keys->data) == GRL_METADATA_KEY_ALBUM);
+ g_assert (GRLPOINTER_TO_KEYID (missing_keys->next->data) == GRL_METADATA_KEY_ARTIST ||
+ GRLPOINTER_TO_KEYID (missing_keys->next->data) == GRL_METADATA_KEY_ALBUM);
+ g_assert (GRLPOINTER_TO_KEYID (missing_keys->data) != GRLPOINTER_TO_KEYID (missing_keys->next->data));
+}
+
+static void
+test_resolve_good_found (void)
+{
+ GError *error = NULL;
+ GList *keys;
+ GrlMedia *media;
+ GrlOperationOptions *options;
+ GrlRegistry *registry;
+ GrlSource *source;
+ guint expected_n_thumbnails;
+
+ registry = grl_registry_get_default ();
+ source = grl_registry_lookup_source (registry, LASTFM_ALBUMART_ID);
+ g_assert (source);
+
+ media = build_media_audio ("madonna", "ray of light");
+
+ keys = grl_metadata_key_list_new (GRL_METADATA_KEY_THUMBNAIL, NULL);
+
+ options = grl_operation_options_new (NULL);
+ grl_operation_options_set_resolution_flags (options, GRL_RESOLVE_FULL);
+
+ grl_source_resolve_sync (source, media, keys, options, &error);
+
+ g_assert_no_error (error);
+
+ /* We should get 5 thumbnails */
+ expected_n_thumbnails = grl_data_length (GRL_DATA (media), GRL_METADATA_KEY_THUMBNAIL);
+ g_assert_cmpuint (expected_n_thumbnails, ==, 3);
+ g_assert_cmpstr (grl_media_get_thumbnail_nth (media, 0),
+ ==,
+ "https://i.scdn.co/image/246565c45ea4085d5b3889619fa1112ec6d42eed");
+ g_assert_cmpstr (grl_media_get_thumbnail_nth (media, 1),
+ ==,
+ "https://i.scdn.co/image/f89849d36862a9dd2807be1d6d07eb0159c26673");
+ g_assert_cmpstr (grl_media_get_thumbnail_nth (media, 2),
+ ==,
+ "https://i.scdn.co/image/cfa2d86696ff7cd8ea862f50ed05d086f1d66521");
+
+ g_list_free (keys);
+ g_object_unref (options);
+ g_object_unref (media);
+}
+
+static void
+test_resolve_good_not_found (void)
+{
+ GError *error = NULL;
+ GList *keys;
+ GrlMedia *media;
+ GrlOperationOptions *options;
+ GrlRegistry *registry;
+ GrlSource *source;
+ guint expected_n_thumbnails;
+
+ registry = grl_registry_get_default ();
+ source = grl_registry_lookup_source (registry, LASTFM_ALBUMART_ID);
+ g_assert (source);
+
+ media = build_media_audio ("madonna", "ray of darkness");
+
+ keys = grl_metadata_key_list_new (GRL_METADATA_KEY_THUMBNAIL, NULL);
+
+ options = grl_operation_options_new (NULL);
+ grl_operation_options_set_resolution_flags (options, GRL_RESOLVE_NORMAL);
+
+ grl_source_resolve_sync (source, media, keys, options, &error);
+
+ g_assert_no_error (error);
+
+ /* We should get 0 thumbnails */
+ expected_n_thumbnails = grl_data_length (GRL_DATA (media), GRL_METADATA_KEY_THUMBNAIL);
+ g_assert_cmpuint (expected_n_thumbnails, ==, 0);
+ g_assert (!grl_media_get_thumbnail (media));
+
+ g_list_free (keys);
+ g_object_unref (options);
+ g_object_unref (media);
+}
+
+static void
+test_resolve_missing_key (void)
+{
+ GError *error = NULL;
+ GList *keys;
+ GrlMedia *media;
+ GrlOperationOptions *options;
+ GrlRegistry *registry;
+ GrlSource *source;
+ guint expected_n_thumbnails;
+
+ registry = grl_registry_get_default ();
+ source = grl_registry_lookup_source (registry, LASTFM_ALBUMART_ID);
+ g_assert (source);
+
+ media = build_media_audio ("madonna", NULL);
+
+ keys = grl_metadata_key_list_new (GRL_METADATA_KEY_THUMBNAIL, NULL);
+
+ options = grl_operation_options_new (NULL);
+ grl_operation_options_set_resolution_flags (options, GRL_RESOLVE_NORMAL);
+
+ grl_source_resolve_sync (source, media, keys, options, &error);
+
+ g_assert_no_error (error);
+
+ /* We should get 0 thumbnails */
+ expected_n_thumbnails = grl_data_length (GRL_DATA (media), GRL_METADATA_KEY_THUMBNAIL);
+ g_assert_cmpuint (expected_n_thumbnails, ==, 0);
+ g_assert (!grl_media_get_thumbnail (media));
+
+ g_list_free (keys);
+ g_object_unref (options);
+ g_object_unref (media);
+}
+
+int
+main(int argc, char **argv)
+{
+ g_setenv ("GRL_PLUGIN_PATH", LUA_FACTORY_PLUGIN_PATH, TRUE);
+ g_setenv ("GRL_LUA_SOURCES_PATH", LUA_SOURCES_PATH, TRUE);
+ g_setenv ("GRL_PLUGIN_LIST", "grl-lua-factory", TRUE);
+ g_setenv ("GRL_NET_MOCKED", SPOTIFY_COVER_DATA_PATH "network-data.ini", TRUE);
+
+ grl_init (&argc, &argv);
+ g_test_init (&argc, &argv, NULL);
+
+#if !GLIB_CHECK_VERSION(2,32,0)
+ g_thread_init (NULL);
+#endif
+
+ test_setup ();
+
+ g_test_add_func ("/spotify-cover/may-resolve/good", test_may_resolve_good);
+ g_test_add_func ("/spotify-cover/may-resolve/wrong-key", test_may_resolve_wrong_key);
+ g_test_add_func ("/spotify-cover/may-resolve/missing-key", test_may_resolve_missing_key);
+ g_test_add_func ("/spotify-cover/may-resolve/missing-media", test_may_resolve_missing_media);
+ g_test_add_func ("/spotify-cover/resolve/good-found", test_resolve_good_found);
+ g_test_add_func ("/spotify-cover/resolve/good-not-found", test_resolve_good_not_found);
+ g_test_add_func ("/spotify-cover/resolve/missing-key", test_resolve_missing_key);
+
+ gint result = g_test_run ();
+
+ grl_deinit ();
+
+ return result;
+}