From 4a3432e33983579c13f95fc623ddbe93d5cc7369 Mon Sep 17 00:00:00 2001 From: tastytea Date: Tue, 16 Apr 2019 18:41:09 +0200 Subject: [PATCH] Added support for /api/v1/accounts. --- README.md | 2 +- src/api/post.cpp | 254 ++++++++++++++-------- src/mastodon-cpp.hpp | 2 +- tests/test_api_v1_accounts.cpp | 74 +++++++ tests/test_api_v1_accounts_id_block.cpp | 2 +- tests/test_api_v1_accounts_id_unblock.cpp | 2 +- 6 files changed, 238 insertions(+), 98 deletions(-) create mode 100644 tests/test_api_v1_accounts.cpp diff --git a/README.md b/README.md index cb81728..8b904cf 100644 --- a/README.md +++ b/README.md @@ -234,7 +234,7 @@ Run `make package` from the build directory to generate a tar.gz archive. ~~Feature complete as of Mastodon 2.6.1~~ * [x] GET /api/v1/accounts/:id - * [ ] POST /api/v1/accounts + * [x] POST /api/v1/accounts * [x] GET /api/v1/accounts/verify_credentials * [x] PATCH /api/v1/accounts/update_credentials * [x] GET /api/v1/accounts/:id/followers diff --git a/src/api/post.cpp b/src/api/post.cpp index c821377..90a1acc 100644 --- a/src/api/post.cpp +++ b/src/api/post.cpp @@ -35,100 +35,166 @@ return_call API::post(const Mastodon::API::v1 &call, switch (call) { - case v1::apps: - strcall = "/api/v1/apps"; - break; - case v1::domain_blocks: - strcall = "/api/v1/domain_blocks"; - break; - case v1::lists: - strcall = "/api/v1/lists"; - break; - case v1::media: - strcall = "/api/v1/media"; - break; - case v1::notifications_clear: - strcall = "/api/v1/notifications/clear"; - break; - case v1::notifications_dismiss: - strcall = "/api/v1/notifications/dismiss"; - break; - case v1::reports: - strcall = "/api/v1/reports"; - break; - case v1::statuses: - strcall = "/api/v1/statuses"; - break; - case v1::accounts_id_follow: - strcall = "/api/v1/accounts/" + strid + "/follow"; - break; - case v1::accounts_id_unfollow: - strcall = "/api/v1/accounts/" + strid + "/unfollow"; - break; - case v1::accounts_id_block: - strcall = "/api/v1/accounts/" + strid + "/block"; - break; - case v1::accounts_id_unblock: - strcall = "/api/v1/accounts/" + strid + "/unblock"; - break; - case v1::accounts_id_mute: - strcall = "/api/v1/accounts/" + strid + "/mute"; - break; - case v1::accounts_id_unmute: - strcall = "/api/v1/accounts/" + strid + "/unmute"; - break; - case v1::follow_requests_id_authorize: - strcall = "/api/v1/folow_requests/" + strid + "/authorize"; - break; - case v1::follow_requests_id_reject: - strcall = "/api/v1/folow_requests/" + strid + "/reject"; - break; - case v1::lists_id_accounts: - strcall = "/api/v1/lists/" + strid + "/accounts"; - break; - case v1::statuses_id_reblog: - strcall = "/api/v1/statuses/" + strid + "/reblog"; - break; - case v1::statuses_id_unreblog: - strcall = "/api/v1/statuses/" + strid + "/unreblog"; - break; - case v1::statuses_id_favourite: - strcall = "/api/v1/statuses/" + strid + "/favourite"; - break; - case v1::statuses_id_unfavourite: - strcall = "/api/v1/statuses/" + strid + "/unfavourite"; - break; - case v1::statuses_id_pin: - strcall = "/api/v1/statuses/" + strid + "/pin"; - break; - case v1::statuses_id_unpin: - strcall = "/api/v1/statuses/" + strid + "/unpin"; - break; - case v1::statuses_id_mute: - strcall = "/api/v1/statuses/" + strid + "/mute"; - break; - case v1::statuses_id_unmute: - strcall = "/api/v1/statuses/" + strid + "/unmute"; - break; - case v1::push_subscription: - strcall = "/api/v1/push/subscription"; - break; - case v1::accounts_id_pin: - strcall = "/api/v1/accounts/" + strid + "/pin"; - break; - case v1::accounts_id_unpin: - strcall = "/api/v1/accounts/" + strid + "/unpin"; - break; - case v1::statuses_id_bookmark: - strcall = "/api/v1/statuses/" + strid + "/bookmark"; - break; - case v1::statuses_id_unbookmark: - strcall = "/api/v1/statuses/" + strid + "/unbookmark"; - break; - default: - ttdebug << "ERROR: Invalid argument.\n"; - return { 22, "Invalid argument", 0, ""}; - break; + case v1::apps: + { + strcall = "/api/v1/apps"; + break; + } + case v1::domain_blocks: + { + strcall = "/api/v1/domain_blocks"; + break; + } + case v1::lists: + { + strcall = "/api/v1/lists"; + break; + } + case v1::media: + { + strcall = "/api/v1/media"; + break; + } + case v1::notifications_clear: + { + strcall = "/api/v1/notifications/clear"; + break; + } + case v1::notifications_dismiss: + { + strcall = "/api/v1/notifications/dismiss"; + break; + } + case v1::reports: + { + strcall = "/api/v1/reports"; + break; + } + case v1::statuses: + { + strcall = "/api/v1/statuses"; + break; + } + case v1::accounts: + { + strcall = "/api/v1/accounts"; + break; + } + case v1::accounts_id_follow: + { + strcall = "/api/v1/accounts/" + strid + "/follow"; + break; + } + case v1::accounts_id_unfollow: + { + strcall = "/api/v1/accounts/" + strid + "/unfollow"; + break; + } + case v1::accounts_id_block: + { + strcall = "/api/v1/accounts/" + strid + "/block"; + break; + } + case v1::accounts_id_unblock: + { + strcall = "/api/v1/accounts/" + strid + "/unblock"; + break; + } + case v1::accounts_id_mute: + { + strcall = "/api/v1/accounts/" + strid + "/mute"; + break; + } + case v1::accounts_id_unmute: + { + strcall = "/api/v1/accounts/" + strid + "/unmute"; + break; + } + case v1::follow_requests_id_authorize: + { + strcall = "/api/v1/folow_requests/" + strid + "/authorize"; + break; + } + case v1::follow_requests_id_reject: + { + strcall = "/api/v1/folow_requests/" + strid + "/reject"; + break; + } + case v1::lists_id_accounts: + { + strcall = "/api/v1/lists/" + strid + "/accounts"; + break; + } + case v1::statuses_id_reblog: + { + strcall = "/api/v1/statuses/" + strid + "/reblog"; + break; + } + case v1::statuses_id_unreblog: + { + strcall = "/api/v1/statuses/" + strid + "/unreblog"; + break; + } + case v1::statuses_id_favourite: + { + strcall = "/api/v1/statuses/" + strid + "/favourite"; + break; + } + case v1::statuses_id_unfavourite: + { + strcall = "/api/v1/statuses/" + strid + "/unfavourite"; + break; + } + case v1::statuses_id_pin: + { + strcall = "/api/v1/statuses/" + strid + "/pin"; + break; + } + case v1::statuses_id_unpin: + { + strcall = "/api/v1/statuses/" + strid + "/unpin"; + break; + } + case v1::statuses_id_mute: + { + strcall = "/api/v1/statuses/" + strid + "/mute"; + break; + } + case v1::statuses_id_unmute: + { + strcall = "/api/v1/statuses/" + strid + "/unmute"; + break; + } + case v1::push_subscription: + { + strcall = "/api/v1/push/subscription"; + break; + } + case v1::accounts_id_pin: + { + strcall = "/api/v1/accounts/" + strid + "/pin"; + break; + } + case v1::accounts_id_unpin: + { + strcall = "/api/v1/accounts/" + strid + "/unpin"; + break; + } + case v1::statuses_id_bookmark: + { + strcall = "/api/v1/statuses/" + strid + "/bookmark"; + break; + } + case v1::statuses_id_unbookmark: + { + strcall = "/api/v1/statuses/" + strid + "/unbookmark"; + break; + } + default: + { + ttdebug << "ERROR: Invalid argument.\n"; + return { 22, "Invalid argument", 0, ""}; + } } return post(strcall, params); diff --git a/src/mastodon-cpp.hpp b/src/mastodon-cpp.hpp index 31c2b2d..f37a417 100644 --- a/src/mastodon-cpp.hpp +++ b/src/mastodon-cpp.hpp @@ -179,7 +179,7 @@ namespace Mastodon { // Mastodon accounts_id, - // accounts, + accounts, accounts_verify_credentials, accounts_update_credentials, accounts_id_followers, diff --git a/tests/test_api_v1_accounts.cpp b/tests/test_api_v1_accounts.cpp new file mode 100644 index 0000000..e154206 --- /dev/null +++ b/tests/test_api_v1_accounts.cpp @@ -0,0 +1,74 @@ +/* This file is part of mastodon-cpp. + * Copyright © 2019 tastytea + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include "mastodon-cpp.hpp" +#include "easy/easy.hpp" +#include "easy/entities/token.hpp" +#include "environment_variables.hpp" + +using namespace Mastodon; + +SCENARIO ("/api/v1/accounts can be called successfully", + "[api][mastodon][glitch-soc]") +{ + GIVEN ("instance = " + instance) + { + Mastodon::Easy::API masto(instance, ""); + return_call ret; + Easy::Token token; + bool exception = false; + + WHEN ("/api/v1/accounts is called") + { + try + { + ret = masto.post(API::v1::accounts, + { + { "username", { "testaccount" }}, + { "email", { "user@example.com" }}, + { "password", { "..,-fidm" }}, + { "agreement", { "true" }}, + { "locale", { "en" }}, + }); + token.from_string(ret.answer); + } + catch (const std::exception &e) + { + exception = true; + WARN(e.what()); + } + + THEN("No exception is thrown") + AND_THEN ("No errors are returned") + AND_THEN ("The answer makes sense") + { + REQUIRE_FALSE(exception); + + // The account probably exists already, so we look for errors too. + REQUIRE((ret.error_code == 0 + || ret.error_code == 111)); + REQUIRE((ret.http_error_code == 200 + || ret.http_error_code == 500)); + + REQUIRE((token.access_token() != "" + || token.error() != "")); + } + } + } +} diff --git a/tests/test_api_v1_accounts_id_block.cpp b/tests/test_api_v1_accounts_id_block.cpp index 36e293b..c3a5a49 100644 --- a/tests/test_api_v1_accounts_id_block.cpp +++ b/tests/test_api_v1_accounts_id_block.cpp @@ -52,7 +52,7 @@ SCENARIO ("/api/v1/accounts/:id/block can be called successfully", } THEN ("No exception is thrown") - AND_THEN ("No errors are returned") + AND_THEN ("No unexpected errors are returned") AND_THEN ("The answer makes sense") { REQUIRE_FALSE(exception); diff --git a/tests/test_api_v1_accounts_id_unblock.cpp b/tests/test_api_v1_accounts_id_unblock.cpp index 6ae6f6d..b843231 100644 --- a/tests/test_api_v1_accounts_id_unblock.cpp +++ b/tests/test_api_v1_accounts_id_unblock.cpp @@ -52,7 +52,7 @@ SCENARIO ("/api/v1/accounts/:id/unblock can be called successfully", } THEN ("No exception is thrown") - AND_THEN ("No errors are returned") + AND_THEN ("No unexpected errors are returned") AND_THEN ("The answer makes sense") { REQUIRE_FALSE(exception);