[libgdata] tests: Add tests for Freebase search API



commit 8400bc61775511ed7b4fbdeb4922f13824b2b65a
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Oct 5 18:38:24 2014 +0200

    tests: Add tests for Freebase search API
    
    https://bugzilla.gnome.org/show_bug.cgi?id=737541

 gdata/tests/freebase.c                     |  139 ++++++++++++++++++++++++++++
 gdata/tests/traces/freebase/search         |   28 ++++++
 gdata/tests/traces/freebase/search-complex |   28 ++++++
 3 files changed, 195 insertions(+), 0 deletions(-)
---
diff --git a/gdata/tests/freebase.c b/gdata/tests/freebase.c
index fd99bdb..86f9b2a 100644
--- a/gdata/tests/freebase.c
+++ b/gdata/tests/freebase.c
@@ -61,6 +61,135 @@ async_ready_callback (GObject      *object,
        g_main_loop_quit (closure->main_loop);
 }
 
+/* Search */
+static GDataFreebaseSearchResult *
+freebase_search (GDataFreebaseSearchQuery *query, const gchar *trace)
+{
+       GDataFreebaseSearchResult *result;
+       GError *error = NULL;
+
+       gdata_test_mock_server_start_trace (mock_server, trace);
+       result = gdata_freebase_service_search (GDATA_FREEBASE_SERVICE (service), query, NULL, &error);
+       g_assert_no_error (error);
+       g_assert (result != NULL);
+       uhm_server_end_trace (mock_server);
+
+       return result;
+}
+
+static GDataFreebaseSearchResult *
+freebase_search_async (GDataFreebaseSearchQuery *query, const gchar *trace)
+{
+       AsyncClosure closure = { 0 };
+
+       gdata_test_mock_server_start_trace (mock_server, trace);
+       closure.main_loop = g_main_loop_new (NULL, TRUE);
+
+       gdata_freebase_service_search_async (GDATA_FREEBASE_SERVICE (service), query, NULL,
+                                            async_ready_callback, &closure);
+
+       g_main_loop_run (closure.main_loop);
+       g_assert_no_error (closure.error);
+       g_assert (closure.data != NULL);
+       g_assert (GDATA_IS_FREEBASE_SEARCH_RESULT (closure.data));
+
+       g_main_loop_unref (closure.main_loop);
+       uhm_server_end_trace (mock_server);
+
+       return closure.data;
+}
+
+static void
+test_freebase_search_query_sync (void)
+{
+       GDataFreebaseSearchQuery *query; /* owned */
+       GDataFreebaseSearchResult *result;  /* owned */
+
+       query = gdata_freebase_search_query_new ("prado museum");
+       gdata_freebase_search_query_set_language (query, "en");
+
+       result = freebase_search (query, "search");
+       g_object_unref (query);
+
+       g_assert_cmpint (gdata_freebase_search_result_get_num_items (result), ==, 20);
+       g_assert_cmpint (gdata_freebase_search_result_get_total_hits (result), ==, 235);
+
+       g_object_unref (result);
+}
+
+static void
+test_freebase_search_query_async (void)
+{
+       GDataFreebaseSearchQuery *query; /* owned */
+       GDataFreebaseSearchResult *result;  /* owned */
+
+       query = gdata_freebase_search_query_new ("prado museum");
+       gdata_freebase_search_query_set_language (query, "en");
+
+       result = freebase_search_async (query, "search");
+       g_object_unref (query);
+
+       g_assert_cmpint (gdata_freebase_search_result_get_num_items (result), ==, 20);
+       g_assert_cmpint (gdata_freebase_search_result_get_total_hits (result), ==, 235);
+
+       g_object_unref (result);
+}
+
+static void
+test_freebase_search_query_complex (void)
+{
+       GDataFreebaseSearchQuery *query; /* owned */
+       GDataFreebaseSearchResult *result;  /* owned */
+
+       query = gdata_freebase_search_query_new ("prado");
+       gdata_freebase_search_query_set_language (query, "en");
+       gdata_query_set_max_results (GDATA_QUERY (query), 1);
+
+       gdata_freebase_search_query_open_filter (query, GDATA_FREEBASE_SEARCH_FILTER_ALL);
+       gdata_freebase_search_query_add_location (query, 10000, 40.413889, -3.6925);
+
+       gdata_freebase_search_query_open_filter (query, GDATA_FREEBASE_SEARCH_FILTER_ANY);
+       gdata_freebase_search_query_add_filter (query, "type", "/travel/tourist_attraction");
+       gdata_freebase_search_query_add_filter (query, "type", "/architecture/museum");
+
+       gdata_freebase_search_query_open_filter (query, GDATA_FREEBASE_SEARCH_FILTER_NOT);
+       gdata_freebase_search_query_add_filter (query, "type", "/protected_sites/protected_site");
+
+       gdata_freebase_search_query_close_filter (query);
+       gdata_freebase_search_query_close_filter (query);
+       gdata_freebase_search_query_close_filter (query);
+
+       result = freebase_search (query, "search-complex");
+       g_object_unref (query);
+
+       g_assert_cmpint (gdata_freebase_search_result_get_num_items (result), ==, 1);
+       g_assert_cmpint (gdata_freebase_search_result_get_total_hits (result), ==, 27);
+
+       g_object_unref (result);
+}
+
+static void
+test_freebase_search_reply_items (void)
+{
+       GDataFreebaseSearchQuery *query; /* owned */
+       GDataFreebaseSearchResult *result;  /* owned */
+       const GDataFreebaseSearchResultItem *item;
+
+       query = gdata_freebase_search_query_new ("prado museum");
+       gdata_freebase_search_query_set_language (query, "en");
+
+       result = freebase_search (query, "search");
+       g_object_unref (query);
+
+       item = gdata_freebase_search_result_get_item (result, 19);
+       g_assert_cmpstr (gdata_freebase_search_result_item_get_mid (item), ==, "/m/05h1sls");
+       g_assert_cmpstr (gdata_freebase_search_result_item_get_name (item), ==, "Visitation");
+       g_assert_cmpstr (gdata_freebase_search_result_item_get_notable_name (item), ==, "History Painting");
+       g_assert_cmpfloat (gdata_freebase_search_result_item_get_score (item), ==, 19.286610);
+
+       g_object_unref (result);
+}
+
 /* Topic */
 static GDataFreebaseTopicResult *
 freebase_topic (GDataFreebaseTopicQuery *query, const gchar *trace)
@@ -279,6 +408,16 @@ main (int argc, char *argv[])
 
        service = GDATA_SERVICE (gdata_freebase_service_new (NULL, NULL));
 
+       /* Search */
+       g_test_add_func ("/freebase/search/query/sync",
+                        test_freebase_search_query_sync);
+       g_test_add_func ("/freebase/search/query/async",
+                        test_freebase_search_query_async);
+       g_test_add_func ("/freebase/search/query/complex",
+                        test_freebase_search_query_complex);
+       g_test_add_func ("/freebase/search/reply/items",
+                        test_freebase_search_reply_items);
+
        /* Topic */
        g_test_add_func ("/freebase/topic/query/sync",
                         test_freebase_topic_query_sync);
diff --git a/gdata/tests/traces/freebase/search b/gdata/tests/traces/freebase/search
new file mode 100644
index 0000000..2979be6
--- /dev/null
+++ b/gdata/tests/traces/freebase/search
@@ -0,0 +1,28 @@
+> GET /freebase/v1/search?query=prado%20museum&lang=en HTTP/1.1
+> Soup-Debug-Timestamp: 1412519720
+> Soup-Debug: SoupSession 1 (0x21c0110), SoupMessage 1 (0x25d00c0), SoupSocket 1 (0x23cd910)
+> Host: www.googleapis.com
+> GData-Version: 2
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+  
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1412519720
+< Soup-Debug: SoupMessage 1 (0x25d00c0)
+< Expires: Sun, 05 Oct 2014 14:35:20 GMT
+< Date: Sun, 05 Oct 2014 14:35:20 GMT
+< Cache-Control: private, max-age=0, must-revalidate, no-transform
+< Content-Disposition: attachment
+< ETag: "VaUFyVE5DtoMHwqA6ftX69x4w8Y/tuBTotVarxUvPdnjjBoc370krE0"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.01
+< Transfer-Encoding: chunked
+< 
+< {"status":"200 OK","result":[{"mid":"/m/01hlq3","id":"/en/prado_museum","name":"Museo Nacional Del 
Prado","notable":{"name":"Art 
Gallery","id":"/m/0hhbr"},"lang":"en","score":603.212463},{"mid":"/m/0jzpgw_","name":"Prado Museum 
Guard","notable":{"name":"Film 
character","id":"/film/film_character"},"lang":"en","score":75.608864},{"mid":"/m/04pz69t","name":"Prado 
Museum, Velazquez entrance.","lang":"en","score":65.479202},{"mid":"/m/0jzpgj1","name":"Antonio, Prado Museum 
Guard","notable":{"name":"Film 
character","id":"/film/film_character"},"lang":"en","score":65.479202},{"mid":"/m/0d9p6vc","id":"/authority/stanford/control/48509","name":"Velazquez
 in the Prado museum","notable":{"name":"Book 
Edition","id":"/book/book_edition"},"lang":"en","score":58.566372},{"mid":"/m/0br6qr2","id":"/en/a_guide_book_to_the_prado_museum","name":"A
 guide-book to the Prado 
Museum","notable":{"name":"Book","id":"/book/book"},"lang":"en","score":55.680264},{"mid":"/m/0cryg0p","id":"/authority/ne
 tflix/tiny/BVPnR","name":"The Glory of Spain: Music & Masterpieces from Madrid's El Prado 
Museum","notable":{"name":"Music 
Film","id":"/m/04rlf"},"lang":"en","score":50.219574},{"mid":"/m/03tmb3c","name":"Madonna and Child, by Luis 
de Morales. Prado 
Museum.","lang":"en","score":44.560253},{"mid":"/m/0c70lx2","id":"/authority/stanford/control/2262848","name":"A
 guide-book of the Prado Museum; a critical and historical study","notable":{"name":"Book 
Edition","id":"/book/book_edition"},"lang":"en","score":43.854767},{"mid":"/m/0brtkm1","id":"/authority/stanford/control/194915","name":"A
 guide-book to the Prado Museum : including a commentary and general historical 
information","notable":{"name":"Book 
Edition","id":"/book/book_edition"},"lang":"en","score":41.805313},{"mid":"/m/03rsy9z","name":"Paul de Vos, 
Dear Hunt, mid-17th century, 212 \u00d7 347 cm, Oil on canvas, Prado Museum, 
Madrid","lang":"en","score":31.762075},{"mid":"/m/02z5_vj","id":"/en/prado_montevideo","name":"Pr
 ado, 
Montevideo","notable":{"name":"Location","id":"/location/location"},"lang":"en","score":25.294312},{"mid":"/m/0c0tclx","name":"Those
 paintings, which have survived a number of fires over the centuries, form the core of the collection of the 
Prado Museum in 
Madrid.","lang":"en","score":24.764435},{"mid":"/m/03frxr","id":"/en/luis_de_morales","name":"Luis de 
Morales","notable":{"name":"Painting 
Artist","id":"/m/05qdh"},"lang":"en","score":22.030073},{"mid":"/m/0kjg2","id":"/en/thalia","name":"Thalia","notable":{"name":"Fictional
 
Character","id":"/fictional_universe/fictional_character"},"lang":"en","score":21.522394},{"mid":"/m/0fcj0d","id":"/en/la_maja_vestida","name":"La
 maja vestida","notable":{"name":"Painting 
Artwork","id":"/m/05qdh"},"lang":"en","score":21.183151},{"mid":"/m/04rq60","id":"/en/rafael_moneo","name":"Rafael
 
Moneo","notable":{"name":"Architect","id":"/architecture/architect"},"lang":"en","score":20.858194},{"mid":"/m/05f56h3","id":"/en/the_jester_calaba
 cillas","name":"The Jester 
Calabacillas","notable":{"name":"Artwork","id":"/visual_art/artwork"},"lang":"en","score":20.233606},{"mid":"/m/0fr_0v","id":"/en/meadows_museum","name":"Meadows
 Museum","notable":{"name":"Art 
Museum","id":"/m/0hhbr"},"lang":"en","score":20.220625},{"mid":"/m/05h1sls","name":"Visitation","notable":{"name":"History
 Painting","id":"/m/03n77"},"lang":"en","score":19.286610}],"cursor":20,"cost":7,"hits":235}
+  
diff --git a/gdata/tests/traces/freebase/search-complex b/gdata/tests/traces/freebase/search-complex
new file mode 100644
index 0000000..a1cc74c
--- /dev/null
+++ b/gdata/tests/traces/freebase/search-complex
@@ -0,0 +1,28 @@
+> GET 
/freebase/v1/search?query=prado&filter=(all(within%20radius:10000m%20lon:-3.6925%20lat:40.4139)(any%20type:"/travel/tourist_attraction"%20type:"/architecture/museum"(not%20type:"/protected_sites/protected_site")))&lang=en&limit=1
 HTTP/1.1
+> Soup-Debug-Timestamp: 1412526407
+> Soup-Debug: SoupSession 1 (0x1d71110), SoupMessage 1 (0x1ece0c0), SoupSocket 1 (0x20a0110)
+> Host: www.googleapis.com
+> GData-Version: 2
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+  
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1412526407
+< Soup-Debug: SoupMessage 1 (0x1ece0c0)
+< Expires: Sun, 05 Oct 2014 16:26:47 GMT
+< Date: Sun, 05 Oct 2014 16:26:47 GMT
+< Cache-Control: private, max-age=0, must-revalidate, no-transform
+< Content-Disposition: attachment
+< ETag: "VaUFyVE5DtoMHwqA6ftX69x4w8Y/rT7viZeDX9VUq0YVZUaAOg0U9xc"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.01
+< Transfer-Encoding: chunked
+< 
+< {"status":"200 OK","result":[{"mid":"/m/01hlq3","id":"/en/prado_museum","name":"Museo Nacional Del 
Prado","notable":{"name":"Art 
Gallery","id":"/m/0hhbr"},"lang":"en","score":70.377022}],"cursor":1,"cost":6,"hits":27}
+  


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