|
Packit |
87b8d1 |
/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */
|
|
Packit |
87b8d1 |
/*
|
|
Packit |
87b8d1 |
* libgfbgraph - GObject library for Facebook Graph API
|
|
Packit |
87b8d1 |
* Copyright (C) 2013-2015 Álvaro Peña <alvaropg@gmail.com>
|
|
Packit |
87b8d1 |
*
|
|
Packit |
87b8d1 |
* GFBGraph is free software; you can redistribute it and/or
|
|
Packit |
87b8d1 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
87b8d1 |
* License as published by the Free Software Foundation; either
|
|
Packit |
87b8d1 |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
87b8d1 |
*
|
|
Packit |
87b8d1 |
* GFBGraph is distributed in the hope that it will be useful,
|
|
Packit |
87b8d1 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
87b8d1 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
87b8d1 |
* Lesser General Public License for more details.
|
|
Packit |
87b8d1 |
*
|
|
Packit |
87b8d1 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
87b8d1 |
* License along with GFBGraph. If not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
87b8d1 |
*/
|
|
Packit |
87b8d1 |
#include <glib.h>
|
|
Packit |
87b8d1 |
#include <json-glib/json-glib.h>
|
|
Packit |
87b8d1 |
#include <rest/rest-proxy.h>
|
|
Packit |
87b8d1 |
#include <string.h>
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
#include <gfbgraph/gfbgraph.h>
|
|
Packit |
87b8d1 |
#include <gfbgraph/gfbgraph-simple-authorizer.h>
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
/* #include "config.h" */
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
typedef struct _GFBGraphTestFixture GFBGraphTestFixture;
|
|
Packit |
87b8d1 |
typedef struct _GFBGraphTestApp GFBGraphTestApp;
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
struct _GFBGraphTestFixture
|
|
Packit |
87b8d1 |
{
|
|
Packit |
87b8d1 |
gchar *user_id;
|
|
Packit |
87b8d1 |
gchar *user_email;
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
GFBGraphSimpleAuthorizer *authorizer;
|
|
Packit |
87b8d1 |
};
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
struct _GFBGraphTestApp
|
|
Packit |
87b8d1 |
{
|
|
Packit |
87b8d1 |
gchar *client_id;
|
|
Packit |
87b8d1 |
gchar *client_secret;
|
|
Packit |
87b8d1 |
gchar *access_token;
|
|
Packit |
87b8d1 |
};
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
#define FACEBOOK_ENDPOINT "https://graph.facebook.com/v2.3"
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
#define FACEBOOK_TEST_USER_PERMISSIONS "user_about_me,user_photos,email"
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
GFBGraphTestApp*
|
|
Packit |
87b8d1 |
gfbgraph_test_app_setup (void)
|
|
Packit |
87b8d1 |
{
|
|
Packit |
87b8d1 |
GFBGraphTestApp *app;
|
|
Packit |
87b8d1 |
RestProxy *proxy;
|
|
Packit |
87b8d1 |
RestProxyCall *rest_call;
|
|
Packit |
87b8d1 |
gchar *function_path;
|
|
Packit |
87b8d1 |
GKeyFile *app_key_file;
|
|
Packit |
87b8d1 |
gchar *app_key_filename;
|
|
Packit |
87b8d1 |
GError *error = NULL;
|
|
Packit |
87b8d1 |
const char *payload;
|
|
Packit |
87b8d1 |
JsonNode *jnode;
|
|
Packit |
87b8d1 |
JsonParser *jparser;
|
|
Packit |
87b8d1 |
JsonReader *jreader;
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
app_key_filename = g_test_build_filename (G_TEST_BUILT,
|
|
Packit |
87b8d1 |
"credentials.ini",
|
|
Packit |
87b8d1 |
NULL);
|
|
Packit |
87b8d1 |
app_key_file = g_key_file_new ();
|
|
Packit |
87b8d1 |
g_key_file_load_from_file (app_key_file,
|
|
Packit |
87b8d1 |
app_key_filename,
|
|
Packit |
87b8d1 |
G_KEY_FILE_NONE,
|
|
Packit |
87b8d1 |
&error);
|
|
Packit |
87b8d1 |
g_assert_no_error(error);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
app = g_new0(GFBGraphTestApp, 1);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
app->client_id = g_key_file_get_string (app_key_file,
|
|
Packit |
87b8d1 |
"Client",
|
|
Packit |
87b8d1 |
"ClientId",
|
|
Packit |
87b8d1 |
&error);
|
|
Packit |
87b8d1 |
g_assert_no_error(error);
|
|
Packit |
87b8d1 |
app->client_secret = g_key_file_get_string (app_key_file,
|
|
Packit |
87b8d1 |
"Client",
|
|
Packit |
87b8d1 |
"ClientSecret",
|
|
Packit |
87b8d1 |
&error);
|
|
Packit |
87b8d1 |
g_assert_no_error(error);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
proxy = rest_proxy_new (FACEBOOK_ENDPOINT, FALSE);
|
|
Packit |
87b8d1 |
rest_call = rest_proxy_new_call (proxy);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
rest_proxy_call_add_param (rest_call, "client_id", app->client_id);
|
|
Packit |
87b8d1 |
rest_proxy_call_add_param (rest_call, "client_secret", app->client_secret);
|
|
Packit |
87b8d1 |
rest_proxy_call_add_param (rest_call, "grant_type", "client_credentials");
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
rest_proxy_call_set_method (rest_call, "GET");
|
|
Packit |
87b8d1 |
function_path = g_strdup ("/oauth/access_token");
|
|
Packit |
87b8d1 |
rest_proxy_call_set_function (rest_call, function_path);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
rest_proxy_call_sync (rest_call, &error);
|
|
Packit |
87b8d1 |
g_assert_no_error (error);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
payload = rest_proxy_call_get_payload (rest_call);
|
|
Packit |
87b8d1 |
jparser = json_parser_new ();
|
|
Packit |
87b8d1 |
json_parser_load_from_data (jparser, payload, -1, &error);
|
|
Packit |
87b8d1 |
g_assert_no_error (error);
|
|
Packit |
87b8d1 |
jnode = json_parser_get_root (jparser);
|
|
Packit |
87b8d1 |
jreader = json_reader_new (jnode);
|
|
Packit |
87b8d1 |
json_reader_read_element (jreader, 0);
|
|
Packit |
87b8d1 |
app->access_token = g_strdup(json_reader_get_string_value (jreader));
|
|
Packit |
87b8d1 |
json_reader_end_element (jreader);
|
|
Packit |
87b8d1 |
g_object_unref(jparser);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
g_clear_object(&rest_call);
|
|
Packit |
87b8d1 |
g_clear_object(&proxy);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
return app;
|
|
Packit |
87b8d1 |
}
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
void
|
|
Packit |
87b8d1 |
gfbgraph_test_fixture_setup (GFBGraphTestFixture *fixture, gconstpointer user_data)
|
|
Packit |
87b8d1 |
{
|
|
Packit |
87b8d1 |
RestProxy *proxy;
|
|
Packit |
87b8d1 |
RestProxyCall *rest_call;
|
|
Packit |
87b8d1 |
gchar *function_path;
|
|
Packit |
87b8d1 |
const gchar *payload;
|
|
Packit |
87b8d1 |
GError *error = NULL;
|
|
Packit |
87b8d1 |
const GFBGraphTestApp *app = user_data;
|
|
Packit |
87b8d1 |
JsonNode *jnode;
|
|
Packit |
87b8d1 |
JsonParser *jparser;
|
|
Packit |
87b8d1 |
JsonReader *jreader;
|
|
Packit |
87b8d1 |
const gchar *access_token;
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
/* Create a new user */
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
proxy = rest_proxy_new (FACEBOOK_ENDPOINT, FALSE);
|
|
Packit |
87b8d1 |
rest_call = rest_proxy_new_call (proxy);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
/* Params as documented here: https://developers.facebook.com/docs/graph-api/reference/app/accounts/test-users#publish */
|
|
Packit |
87b8d1 |
rest_proxy_call_add_param (rest_call, "installed", "true");
|
|
Packit |
87b8d1 |
rest_proxy_call_add_param (rest_call, "permissions", FACEBOOK_TEST_USER_PERMISSIONS);
|
|
Packit |
87b8d1 |
rest_proxy_call_add_param (rest_call, "access_token", app->access_token);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
rest_proxy_call_set_method (rest_call, "POST");
|
|
Packit |
87b8d1 |
function_path = g_strdup_printf ("%s/accounts/test-users", app->client_id);
|
|
Packit |
87b8d1 |
rest_proxy_call_set_function (rest_call, function_path);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
rest_proxy_call_sync (rest_call, &error);
|
|
Packit |
87b8d1 |
g_assert_no_error (error);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
payload = rest_proxy_call_get_payload (rest_call);
|
|
Packit |
87b8d1 |
jparser = json_parser_new ();
|
|
Packit |
87b8d1 |
json_parser_load_from_data (jparser, payload, -1, &error);
|
|
Packit |
87b8d1 |
g_assert_no_error (error);
|
|
Packit |
87b8d1 |
jnode = json_parser_get_root (jparser);
|
|
Packit |
87b8d1 |
jreader = json_reader_new (jnode);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
json_reader_read_element (jreader, 0);
|
|
Packit |
87b8d1 |
fixture->user_id = g_strdup (json_reader_get_string_value (jreader));
|
|
Packit |
87b8d1 |
json_reader_end_element (jreader);
|
|
Packit |
87b8d1 |
json_reader_read_element (jreader, 1);
|
|
Packit |
87b8d1 |
access_token = g_strdup (json_reader_get_string_value (jreader));
|
|
Packit |
87b8d1 |
json_reader_end_element (jreader);
|
|
Packit |
87b8d1 |
json_reader_read_element (jreader, 3);
|
|
Packit |
87b8d1 |
fixture->user_email = g_strdup (json_reader_get_string_value (jreader));
|
|
Packit |
87b8d1 |
json_reader_end_element (jreader);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
fixture->authorizer = gfbgraph_simple_authorizer_new (access_token);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
if (function_path)
|
|
Packit |
87b8d1 |
g_free (function_path);
|
|
Packit |
87b8d1 |
g_clear_object (&rest_call);
|
|
Packit |
87b8d1 |
g_clear_object (&proxy);
|
|
Packit |
87b8d1 |
}
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
static void
|
|
Packit |
87b8d1 |
gfbgraph_test_fixture_teardown (GFBGraphTestFixture *fixture, gconstpointer user_data)
|
|
Packit |
87b8d1 |
{
|
|
Packit |
87b8d1 |
SoupSession *ssession;
|
|
Packit |
87b8d1 |
SoupMessage *smessage;
|
|
Packit |
87b8d1 |
gchar *function_path;
|
|
Packit |
87b8d1 |
gchar *auth_value;
|
|
Packit |
87b8d1 |
guint status;
|
|
Packit |
87b8d1 |
const GFBGraphTestApp *app = user_data;
|
|
Packit |
87b8d1 |
SoupURI *uri;
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
/* Delete the test user and clean up memory */
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
ssession = soup_session_new ();
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
function_path = g_strdup_printf ("%s/%s", FACEBOOK_ENDPOINT, fixture->user_id);
|
|
Packit |
87b8d1 |
smessage = soup_message_new ("DELETE", function_path);
|
|
Packit |
87b8d1 |
gfbgraph_authorizer_process_message (GFBGRAPH_AUTHORIZER (fixture->authorizer), smessage);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
status = soup_session_send_message (ssession, smessage);
|
|
Packit |
87b8d1 |
g_assert_cmpint(status, ==, 200);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
g_free (function_path);
|
|
Packit |
87b8d1 |
g_free (auth_value);
|
|
Packit |
87b8d1 |
g_free (fixture->user_id);
|
|
Packit |
87b8d1 |
g_free (fixture->user_email);
|
|
Packit |
87b8d1 |
g_object_unref (fixture->authorizer);
|
|
Packit |
87b8d1 |
}
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
static void
|
|
Packit |
87b8d1 |
gfbgraph_test_me (GFBGraphTestFixture *fixture, gconstpointer user_data)
|
|
Packit |
87b8d1 |
{
|
|
Packit |
87b8d1 |
GFBGraphUser *me;
|
|
Packit |
87b8d1 |
GError *error = NULL;
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
me = gfbgraph_user_get_me (GFBGRAPH_AUTHORIZER (fixture->authorizer), &error);
|
|
Packit |
87b8d1 |
g_assert_no_error (error);
|
|
Packit |
87b8d1 |
g_assert (GFBGRAPH_IS_USER (me));
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
g_assert_cmpstr (fixture->user_id, ==, gfbgraph_node_get_id (GFBGRAPH_NODE (me)));
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
g_assert_cmpstr (fixture->user_email, ==, gfbgraph_user_get_email (me));
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
g_object_unref (me);
|
|
Packit |
87b8d1 |
}
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
static void
|
|
Packit |
87b8d1 |
gfbgraph_test_album (GFBGraphTestFixture *fixture, gconstpointer user_data)
|
|
Packit |
87b8d1 |
{
|
|
Packit |
87b8d1 |
GFBGraphUser *me;
|
|
Packit |
87b8d1 |
GFBGraphAlbum *album;
|
|
Packit |
87b8d1 |
GError *error = NULL;
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
me = gfbgraph_user_get_me (GFBGRAPH_AUTHORIZER (fixture->authorizer), &error);
|
|
Packit |
87b8d1 |
g_assert_no_error (error);
|
|
Packit |
87b8d1 |
g_assert (GFBGRAPH_IS_USER (me));
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
/* Create a photo album */
|
|
Packit |
87b8d1 |
album = gfbgraph_album_new ();
|
|
Packit |
87b8d1 |
gfbgraph_album_set_name (album, "Vanilla Sky");
|
|
Packit |
87b8d1 |
gfbgraph_album_set_description (album, "Great sunset photos in Mars!");
|
|
Packit |
87b8d1 |
g_assert (gfbgraph_node_append_connection (GFBGRAPH_NODE (me),
|
|
Packit |
87b8d1 |
GFBGRAPH_NODE (album),
|
|
Packit |
87b8d1 |
GFBGRAPH_AUTHORIZER (fixture->authorizer),
|
|
Packit |
87b8d1 |
&error));
|
|
Packit |
87b8d1 |
g_assert_no_error (error);
|
|
Packit |
87b8d1 |
}
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
int
|
|
Packit |
87b8d1 |
main (int argc, char **argv)
|
|
Packit |
87b8d1 |
{
|
|
Packit |
87b8d1 |
GFBGraphTestApp *app = NULL;
|
|
Packit |
87b8d1 |
int test_result;
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
g_test_init (&argc, &argv, NULL);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
g_log_set_always_fatal (G_LOG_LEVEL_ERROR | G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL | G_LOG_LEVEL_CRITICAL);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
app = gfbgraph_test_app_setup ();
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
g_test_add ("/GFBGraph/Me",
|
|
Packit |
87b8d1 |
GFBGraphTestFixture,
|
|
Packit |
87b8d1 |
app,
|
|
Packit |
87b8d1 |
gfbgraph_test_fixture_setup,
|
|
Packit |
87b8d1 |
gfbgraph_test_me,
|
|
Packit |
87b8d1 |
gfbgraph_test_fixture_teardown);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
g_test_add ("/GFBGraph/Album",
|
|
Packit |
87b8d1 |
GFBGraphTestFixture,
|
|
Packit |
87b8d1 |
app,
|
|
Packit |
87b8d1 |
gfbgraph_test_fixture_setup,
|
|
Packit |
87b8d1 |
gfbgraph_test_album,
|
|
Packit |
87b8d1 |
gfbgraph_test_fixture_teardown);
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
test_result = g_test_run ();
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
if (app) {
|
|
Packit |
87b8d1 |
if (app->client_id)
|
|
Packit |
87b8d1 |
g_free (app->client_id);
|
|
Packit |
87b8d1 |
if (app->client_secret)
|
|
Packit |
87b8d1 |
g_free (app->client_secret);
|
|
Packit |
87b8d1 |
if (app->access_token)
|
|
Packit |
87b8d1 |
g_free (app->access_token);
|
|
Packit |
87b8d1 |
}
|
|
Packit |
87b8d1 |
|
|
Packit |
87b8d1 |
return test_result;
|
|
Packit |
87b8d1 |
}
|