[libgfbgraph] Cleaned up the tests
- From: Álvaro Peña <alvaropg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgfbgraph] Cleaned up the tests
- Date: Thu, 10 Apr 2014 18:53:14 +0000 (UTC)
commit ebc61ab79d952c88b64953ab3b2f06895f68e52c
Author: Álvaro Peña <alvaropg gmail com>
Date: Thu Apr 10 20:50:31 2014 +0200
Cleaned up the tests
Now just a GTest based test, which creates a new test user
to run all the tests with this fake user and avoid to
break something with a real user.
tests/Makefile.am | 13 +---
tests/README | 8 ++
tests/credentials.h | 2 -
tests/gtestutils.c | 222 +++++++++++++++++++++++++++++++++++++++++++-------
tests/test-async.c | 119 ---------------------------
tests/test.c | 87 --------------------
6 files changed, 201 insertions(+), 250 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index e5b589e..efe441e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,19 +1,10 @@
-TESTS = gtestutils test test-async
-
-COMMON_SRC = credentials.h
+TESTS = gtestutils
AM_CPPFLAGS = -I$(top_srcdir) $(LIBGFBGRAPH_CFLAGS)
AM_LDFLAGS = $(top_builddir)/gfbgraph/libgfbgraph- API_VERSION@.la $(LIBGFBGRAPH_LIBS)
noinst_PROGRAMS = $(TESTS)
-gtestutils_SOURCES = $(COMMON_SRC) \
- gtestutils.c
-
-test_SOURCES = $(COMMON_SRC) \
- test.c
-
-test_async_SOURCES = $(COMMON_SRC) \
- test-async.c
+gtestutils_SOURCES = gtestutils.c
-include $(top_srcdir)/git.mk
diff --git a/tests/README b/tests/README
new file mode 100644
index 0000000..45db00d
--- /dev/null
+++ b/tests/README
@@ -0,0 +1,8 @@
+To run the tests it's required a file called "credentials.ini" placed in this
+folder. In that file you need to put your cliend id and your client secret
+codes. You can get both from the Facebook Developer Page.
+
+This is an example content of credentials.ini:
+[Client]
+ClientId=000000000000000
+ClientSecret=00000000000000000000000000000000
diff --git a/tests/gtestutils.c b/tests/gtestutils.c
index 7933655..e7a9e48 100644
--- a/tests/gtestutils.c
+++ b/tests/gtestutils.c
@@ -1,48 +1,193 @@
-#include "config.h"
-#include "credentials.h"
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * libgfbgraph - GObject library for Facebook Graph API
+ * Copyright (C) 2013 Álvaro Peña <alvaropg gmail com>
+ *
+ * GFBGraph 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; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * GFBGraph 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 GFBGraph. If not, see <http://www.gnu.org/licenses/>.
+ */
#include <glib.h>
+#include <json-glib/json-glib.h>
+#include <rest/rest-proxy.h>
+#include <string.h>
+
#include <gfbgraph/gfbgraph.h>
#include <gfbgraph/gfbgraph-simple-authorizer.h>
-static void
-gfbgraph_test_me_albums (GFBGraphSimpleAuthorizer *authorizer)
+/* #include "config.h" */
+
+typedef struct _GFBGraphTestFixture GFBGraphTestFixture;
+typedef struct _GFBGraphTestApp GFBGraphTestApp;
+
+struct _GFBGraphTestFixture
{
- GFBGraphUser *me;
- GList *albums = NULL;
- gint albums_count = 0;
- GFBGraphAlbum *album;
+ gchar *user_id;
+
+ GFBGraphSimpleAuthorizer *authorizer;
+};
+
+struct _GFBGraphTestApp
+{
+ gchar *client_id;
+ gchar *client_secret;
+ gchar *access_token;
+};
+
+#define FACEBOOK_ENDPOINT "https://graph.facebook.com"
+
+GFBGraphTestApp*
+gfbgraph_test_app_setup (void)
+{
+ GFBGraphTestApp *app;
+ RestProxy *proxy;
+ RestProxyCall *rest_call;
+ gchar *function_path;
+ GKeyFile *app_key_file;
+ gchar *app_key_filename;
GError *error = NULL;
- me = gfbgraph_user_get_me (GFBGRAPH_AUTHORIZER (authorizer), &error);
+ app_key_filename = g_test_build_filename (G_TEST_BUILT,
+ "credentials.ini",
+ NULL);
+ app_key_file = g_key_file_new ();
+ g_key_file_load_from_file (app_key_file,
+ app_key_filename,
+ G_KEY_FILE_NONE,
+ &error);
+ g_assert_no_error(error);
+
+ app = g_new0(GFBGraphTestApp, 1);
+
+ app->client_id = g_key_file_get_string (app_key_file,
+ "Client",
+ "ClientId",
+ &error);
+ g_assert_no_error(error);
+ app->client_secret = g_key_file_get_string (app_key_file,
+ "Client",
+ "ClientSecret",
+ &error);
+ g_assert_no_error(error);
+
+ proxy = rest_proxy_new (FACEBOOK_ENDPOINT, FALSE);
+ rest_call = rest_proxy_new_call (proxy);
+
+ rest_proxy_call_add_param (rest_call, "client_id", app->client_id);
+ rest_proxy_call_add_param (rest_call, "client_secret", app->client_secret);
+ rest_proxy_call_add_param (rest_call, "grant_type", "client_credentials");
+
+ rest_proxy_call_set_method (rest_call, "GET");
+ function_path = g_strdup ("/oauth/access_token");
+ rest_proxy_call_set_function (rest_call, function_path);
+
+ rest_proxy_call_sync (rest_call, &error);
g_assert_no_error (error);
- g_assert (GFBGRAPH_IS_USER (me));
- albums = gfbgraph_user_get_albums (GFBGRAPH_USER (me), GFBGRAPH_AUTHORIZER (authorizer), &error);
+ app->access_token = g_strdup(g_strrstr(rest_proxy_call_get_payload (rest_call), "=") + 1);
+
+ g_clear_object(&rest_call);
+ g_clear_object(&proxy);
+
+ return app;
+}
+
+void
+gfbgraph_test_fixture_setup (GFBGraphTestFixture *fixture, gconstpointer user_data)
+{
+ RestProxy *proxy;
+ RestProxyCall *rest_call;
+ gchar *function_path;
+ const gchar *payload;
+ GError *error = NULL;
+ const GFBGraphTestApp *app = user_data;
+ JsonNode *jnode;
+ JsonParser *jparser;
+ JsonReader *jreader;
+ const gchar *access_token;
+
+ /* Create a new user */
+
+ proxy = rest_proxy_new (FACEBOOK_ENDPOINT, FALSE);
+ rest_call = rest_proxy_new_call (proxy);
+
+ /* Params as documented here:
https://developers.facebook.com/docs/graph-api/reference/app/accounts/test-users#publish */
+ rest_proxy_call_add_param (rest_call, "installed", "true");
+ rest_proxy_call_add_param (rest_call, "permissions", "user_about_me,user_photos");
+ rest_proxy_call_add_param (rest_call, "access_token", app->access_token);
+
+ rest_proxy_call_set_method (rest_call, "POST");
+ function_path = g_strdup_printf ("%s/accounts/test-users", app->client_id);
+ rest_proxy_call_set_function (rest_call, function_path);
+
+ rest_proxy_call_sync (rest_call, &error);
g_assert_no_error (error);
- /* Just testing one album */
- while (albums) {
- album = GFBGRAPH_ALBUM (albums->data);
- g_assert (GFBGRAPH_IS_ALBUM (album));
- albums = g_list_next (albums);
- albums_count++;
- }
+ payload = rest_proxy_call_get_payload (rest_call);
+ jparser = json_parser_new ();
+ json_parser_load_from_data (jparser, payload, -1, &error);
+ g_assert_no_error (error);
+ jnode = json_parser_get_root (jparser);
+ jreader = json_reader_new (jnode);
- g_list_free_full (albums, g_object_unref);
- g_object_unref (me);
+ json_reader_read_element (jreader, 0);
+ fixture->user_id = g_strdup (json_reader_get_string_value (jreader));
+ json_reader_end_element (jreader);
+ json_reader_read_element (jreader, 1);
+ access_token = g_strdup (json_reader_get_string_value (jreader));
+ json_reader_end_element (jreader);
- if (albums_count == 0) {
- g_test_fail ();
- }
+ fixture->authorizer = gfbgraph_simple_authorizer_new (access_token);
+
+ if (function_path)
+ g_free (function_path);
+ g_clear_object (&rest_call);
+ g_clear_object (&proxy);
+}
+
+static void
+gfbgraph_test_fixture_teardown (GFBGraphTestFixture *fixture, gconstpointer user_data)
+{
+ SoupSession *ssession;
+ SoupMessage *smessage;
+ gchar *function_path;
+ gchar *auth_value;
+ guint status;
+ const GFBGraphTestApp *app = user_data;
+ SoupURI *uri;
+
+ /* Delete the test user and clean up memory */
+
+ ssession = soup_session_new ();
+
+ function_path = g_strdup_printf ("%s/%s", FACEBOOK_ENDPOINT, fixture->user_id);
+ smessage = soup_message_new ("DELETE", function_path);
+ gfbgraph_authorizer_process_message (GFBGRAPH_AUTHORIZER (fixture->authorizer), smessage);
+
+ status = soup_session_send_message (ssession, smessage);
+
+ g_free (function_path);
+ g_free (auth_value);
+ g_free (fixture->user_id);
+ g_object_unref (fixture->authorizer);
}
static void
-gfbgraph_test_me (GFBGraphSimpleAuthorizer *authorizer)
+gfbgraph_test_me (GFBGraphTestFixture *fixture, gconstpointer user_data)
{
GFBGraphUser *me;
GError *error = NULL;
- me = gfbgraph_user_get_me (GFBGRAPH_AUTHORIZER (authorizer), &error);
+ me = gfbgraph_user_get_me (GFBGRAPH_AUTHORIZER (fixture->authorizer), &error);
g_assert_no_error (error);
g_assert (GFBGRAPH_IS_USER (me));
@@ -52,15 +197,30 @@ gfbgraph_test_me (GFBGraphSimpleAuthorizer *authorizer)
int
main (int argc, char **argv)
{
- GFBGraphSimpleAuthorizer *authorizer;
+ GFBGraphTestApp *app = NULL;
+ int test_result;
- g_type_init ();
g_test_init (&argc, &argv, NULL);
- authorizer = gfbgraph_simple_authorizer_new (GFBGRAPH_TEST_ACCESS_TOKEN);
+ app = gfbgraph_test_app_setup ();
- g_test_add_data_func ("/GFBGraph/Me", authorizer, (GTestDataFunc) gfbgraph_test_me);
- g_test_add_data_func ("/GFBGraph/Me/Albums", authorizer, (GTestDataFunc) gfbgraph_test_me_albums);
+ g_test_add ("/GFBGraph/Me",
+ GFBGraphTestFixture,
+ app,
+ gfbgraph_test_fixture_setup,
+ gfbgraph_test_me,
+ gfbgraph_test_fixture_teardown);
+
+ test_result = g_test_run ();
+
+ if (app) {
+ if (app->client_id)
+ g_free (app->client_id);
+ if (app->client_secret)
+ g_free (app->client_secret);
+ if (app->access_token)
+ g_free (app->access_token);
+ }
- return g_test_run ();
+ return test_result;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]