From 9c65ad01701eebad084cbf33e1614009dfefe425 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Tue, 13 Nov 2018 12:23:37 +0100 Subject: [PATCH] Use ex_vcr for tests Which are now offline-only ! Signed-off-by: Thomas Citharel --- config/test.exs | 3 + mix.exs | 9 ++- mix.lock | 3 + .../fetch_framapiaf.org_users_tcit.json | 40 ++++++++++ .../fetch_social_tcit_fr_status.json | 78 +++++++++++++++++++ .../fetch_tcit@framapiaf.org.json | 77 ++++++++++++++++++ .../mastodon-post-activity_actor_call.json | 40 ++++++++++ .../actors/remote_actor_mastodon_tcit.json | 39 ++++++++++ .../vcr_cassettes/webfinger/friendica.json | 35 +++++++++ .../vcr_cassettes/webfinger/mastodon.json | 38 +++++++++ .../vcr_cassettes/webfinger/peertube.json | 38 +++++++++ .../vcr_cassettes/webfinger/pleroma.json | 43 ++++++++++ test/mobilizon/actors/actors_test.exs | 62 +++++++++------ .../service/activitypub/activitypub_test.exs | 37 +++++---- .../service/web_finger/web_finger_test.exs | 59 +++++++++----- .../activity_pub_controller_test.exs | 21 ++--- 16 files changed, 553 insertions(+), 69 deletions(-) create mode 100644 test/fixtures/vcr_cassettes/activity_pub/fetch_framapiaf.org_users_tcit.json create mode 100644 test/fixtures/vcr_cassettes/activity_pub/fetch_social_tcit_fr_status.json create mode 100644 test/fixtures/vcr_cassettes/activity_pub/fetch_tcit@framapiaf.org.json create mode 100644 test/fixtures/vcr_cassettes/activity_pub_controller/mastodon-post-activity_actor_call.json create mode 100644 test/fixtures/vcr_cassettes/actors/remote_actor_mastodon_tcit.json create mode 100644 test/fixtures/vcr_cassettes/webfinger/friendica.json create mode 100644 test/fixtures/vcr_cassettes/webfinger/mastodon.json create mode 100644 test/fixtures/vcr_cassettes/webfinger/peertube.json create mode 100644 test/fixtures/vcr_cassettes/webfinger/pleroma.json diff --git a/config/test.exs b/config/test.exs index 6c9c1f8d5..363d9728c 100644 --- a/config/test.exs +++ b/config/test.exs @@ -23,3 +23,6 @@ config :mobilizon, Mobilizon.Repo, types: Mobilizon.PostgresTypes config :mobilizon, Mobilizon.Mailer, adapter: Bamboo.TestAdapter + +config :exvcr, + vcr_cassette_library_dir: "test/fixtures/vcr_cassettes" diff --git a/mix.exs b/mix.exs index 611c26cde..c5ecf3db7 100644 --- a/mix.exs +++ b/mix.exs @@ -16,7 +16,11 @@ defmodule Mobilizon.Mixfile do coveralls: :test, "coveralls.detail": :test, "coveralls.post": :test, - "coveralls.html": :test + "coveralls.html": :test, + vcr: :test, + "vcr.delete": :test, + "vcr.check": :test, + "vcr.show": :test ], name: "Mobilizon", source_url: "https://framagit.org/tcit/mobilizon", @@ -92,7 +96,8 @@ defmodule Mobilizon.Mixfile do {:ex_doc, "~> 0.16", only: :dev, runtime: false}, {:mix_test_watch, "~> 0.5", only: :dev, runtime: false}, {:ex_unit_notifier, "~> 0.1", only: :test}, - {:dialyxir, "~> 1.0.0-rc.4", only: [:dev], runtime: false} + {:dialyxir, "~> 1.0.0-rc.4", only: [:dev], runtime: false}, + {:exvcr, "~> 0.10", only: :test} ] end diff --git a/mix.lock b/mix.lock index 7c5bb92e5..26eca7d46 100644 --- a/mix.lock +++ b/mix.lock @@ -34,9 +34,11 @@ "ex_ical": {:hex, :ex_ical, "0.2.0", "4b928b554614704016cc0c9ee226eb854da9327a1cc460457621ceacb1ac29a6", [:mix], [{:timex, "~> 3.1", [hex: :timex, repo: "hexpm", optional: false]}], "hexpm"}, "ex_machina": {:hex, :ex_machina, "2.2.2", "d84217a6fb7840ff771d2561b8aa6d74a0d8968e4b10ecc0d7e9890dc8fb1c6a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm"}, "ex_unit_notifier": {:hex, :ex_unit_notifier, "0.1.4", "36a2dcab829f506e01bf17816590680dd1474407926d43e64c1263e627c364b8", [:mix], [], "hexpm"}, + "exactor": {:hex, :exactor, "2.2.4", "5efb4ddeb2c48d9a1d7c9b465a6fffdd82300eb9618ece5d34c3334d5d7245b1", [:mix], [], "hexpm"}, "excoveralls": {:hex, :excoveralls, "0.9.2", "299ea4903be7cb2959af0f919d258af116736ca8d507f86c12ef2184698e21a0", [:mix], [{:hackney, ">= 0.12.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"}, "exgravatar": {:hex, :exgravatar, "2.0.1", "66d595c7d63dd6bbac442c5542a724375ae29144059c6fe093e61553850aace4", [:mix], [], "hexpm"}, "exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, repo: "hexpm", optional: false]}], "hexpm"}, + "exvcr": {:hex, :exvcr, "0.10.3", "1ae3b97560430acfa88ebc737c85b2b7a9dbacd8a2b26789a19718b51ae3522c", [:mix], [{:exactor, "~> 2.2", [hex: :exactor, repo: "hexpm", optional: false]}, {:exjsx, "~> 4.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: true]}, {:httpotion, "~> 3.1", [hex: :httpotion, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:meck, "~> 0.8", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm"}, "file_system": {:hex, :file_system, "0.2.6", "fd4dc3af89b9ab1dc8ccbcc214a0e60c41f34be251d9307920748a14bf41f1d3", [:mix], [], "hexpm"}, "gen_smtp": {:hex, :gen_smtp, "0.12.0", "97d44903f5ca18ca85cb39aee7d9c77e98d79804bbdef56078adcf905cb2ef00", [:rebar3], [], "hexpm"}, "geo": {:hex, :geo, "3.0.0", "bb1e9baac6031c5bbddcde4937af1c1ab1cbfbbe2f7870038fdfc93a9cad4359", [:mix], [], "hexpm"}, @@ -58,6 +60,7 @@ "littlefinger": {:hex, :littlefinger, "0.1.0", "5d3720bebd65d6a2051c31ca45f28b2d452d25aeeb8adb0a8f87013868bb0e7e", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:poison, "~> 3.1", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm"}, "makeup": {:hex, :makeup, "0.5.5", "9e08dfc45280c5684d771ad58159f718a7b5788596099bdfb0284597d368a882", [:mix], [{:nimble_parsec, "~> 0.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"}, "makeup_elixir": {:hex, :makeup_elixir, "0.10.0", "0f09c2ddf352887a956d84f8f7e702111122ca32fbbc84c2f0569b8b65cbf7fa", [:mix], [{:makeup, "~> 0.5.5", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm"}, + "meck": {:hex, :meck, "0.8.12", "1f7b1a9f5d12c511848fec26bbefd09a21e1432eadb8982d9a8aceb9891a3cf2", [:rebar3], [], "hexpm"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"}, "mime": {:hex, :mime, "1.3.0", "5e8d45a39e95c650900d03f897fbf99ae04f60ab1daa4a34c7a20a5151b7a5fe", [:mix], [], "hexpm"}, "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm"}, diff --git a/test/fixtures/vcr_cassettes/activity_pub/fetch_framapiaf.org_users_tcit.json b/test/fixtures/vcr_cassettes/activity_pub/fetch_framapiaf.org_users_tcit.json new file mode 100644 index 000000000..da2de3051 --- /dev/null +++ b/test/fixtures/vcr_cassettes/activity_pub/fetch_framapiaf.org_users_tcit.json @@ -0,0 +1,40 @@ +[ + { + "request": { + "body": "", + "headers": { + "Accept": "application/activity+json" + }, + "method": "get", + "options": { + "follow_redirect": "true" + }, + "request_body": "", + "url": "https://framapiaf.org/users/tcit" + }, + "response": { + "binary": false, + "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",{\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"sensitive\":\"as:sensitive\",\"movedTo\":{\"@id\":\"as:movedTo\",\"@type\":\"@id\"},\"Hashtag\":\"as:Hashtag\",\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"toot\":\"http://joinmastodon.org/ns#\",\"Emoji\":\"toot:Emoji\",\"focalPoint\":{\"@container\":\"@list\",\"@id\":\"toot:focalPoint\"},\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"schema\":\"http://schema.org#\",\"PropertyValue\":\"schema:PropertyValue\",\"value\":\"schema:value\"}],\"id\":\"https://framapiaf.org/users/tcit\",\"type\":\"Person\",\"following\":\"https://framapiaf.org/users/tcit/following\",\"followers\":\"https://framapiaf.org/users/tcit/followers\",\"inbox\":\"https://framapiaf.org/users/tcit/inbox\",\"outbox\":\"https://framapiaf.org/users/tcit/outbox\",\"featured\":\"https://framapiaf.org/users/tcit/collections/featured\",\"preferredUsername\":\"tcit\",\"name\":\"💼 Thomas Citharel\",\"summary\":\"\\u003cp\\u003e[Professionnal account] See \\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://social.tcit.fr/@tcit\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003etcit\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e for personnal stuff. At frama doing framathings.\\u003c/p\\u003e\",\"url\":\"https://framapiaf.org/@tcit\",\"manuallyApprovesFollowers\":false,\"publicKey\":{\"id\":\"https://framapiaf.org/users/tcit#main-key\",\"owner\":\"https://framapiaf.org/users/tcit\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApscVCt06lrIiB5jT6Kqk\\nZZwPVoPkhR7HzoTGb8rnklZuOyP4goHIuBDnurklztkmDCaM7DbsUWAPgRVtwWFE\\nWuQrOenb7BPRe/m99pJfUTkBQU3IeuRMD/5Fc3OTIhHQOltTSiB900srCUxjysfw\\nnV5JFciCz8YAXTNJZD34qyv8DbtC/pCJM7wMd9Hl3ohxSPETa6CJUaTdlNwlYJa2\\nMOMCj6/7Iv5oAg14FT9lwqS5lF7jPHk9Z7PNc2wPmNVgIYA2n9d5k7JY8TdM8iu4\\nHLnIbJuqDd1uitlYgy1qsdsxjv4U2Y7Nytc+3ZKHtGsCzUltYL5kC7uWrFpGoWo1\\n0QIDAQAB\\n-----END PUBLIC KEY-----\\n\"},\"tag\":[],\"attachment\":[{\"type\":\"PropertyValue\",\"name\":\"Personnal account\",\"value\":\"\\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://social.tcit.fr/@tcit\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003etcit\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e\"},{\"type\":\"PropertyValue\",\"name\":\"Work\",\"value\":\"\\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://framapiaf.org/@Framasoft\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003eFramasoft\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e\"},{\"type\":\"PropertyValue\",\"name\":\"Location\",\"value\":\"Nantes, France\"}],\"endpoints\":{\"sharedInbox\":\"https://framapiaf.org/inbox\"},\"icon\":{\"type\":\"Image\",\"mediaType\":\"image/jpeg\",\"url\":\"https://framapiaf.org/system/accounts/avatars/000/000/001/original/da0cad7ffd20eb61.jpg?1491844231\"},\"image\":{\"type\":\"Image\",\"mediaType\":\"image/jpeg\",\"url\":\"https://framapiaf.org/system/accounts/headers/000/000/001/original/198d058b3086d82d.jpg?1491844231\"}}", + "headers": { + "Date": "Tue, 13 Nov 2018 11:00:23 GMT", + "Content-Type": "application/activity+json; charset=utf-8", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "Server": "Mastodon", + "X-Frame-Options": "DENY", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Link": "; rel=\"lrdd\"; type=\"application/xrd+xml\", ; rel=\"alternate\"; type=\"application/atom+xml\", ; rel=\"alternate\"; type=\"application/activity+json\"", + "Vary": "Accept,Accept-Encoding", + "Cache-Control": "max-age=180, public", + "ETag": "W/\"473bf1a80cea53496b5f1e968123a01b\"", + "X-Request-Id": "e5d89c8d-2052-4f72-8e2b-0192456a0c67", + "X-Runtime": "0.004232", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", + "Referrer-Policy": "same-origin" + }, + "status_code": 200, + "type": "ok" + } + } +] \ No newline at end of file diff --git a/test/fixtures/vcr_cassettes/activity_pub/fetch_social_tcit_fr_status.json b/test/fixtures/vcr_cassettes/activity_pub/fetch_social_tcit_fr_status.json new file mode 100644 index 000000000..8256ddb51 --- /dev/null +++ b/test/fixtures/vcr_cassettes/activity_pub/fetch_social_tcit_fr_status.json @@ -0,0 +1,78 @@ +[ + { + "request": { + "body": "", + "headers": { + "Accept": "application/activity+json" + }, + "method": "get", + "options": { + "follow_redirect": "true", + "recv_timeout": 20000, + "connect_timeout": 10000 + }, + "request_body": "", + "url": "https://social.tcit.fr/users/tcit/statuses/99908779444618462" + }, + "response": { + "binary": false, + "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",{\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"sensitive\":\"as:sensitive\",\"movedTo\":{\"@id\":\"as:movedTo\",\"@type\":\"@id\"},\"Hashtag\":\"as:Hashtag\",\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"toot\":\"http://joinmastodon.org/ns#\",\"Emoji\":\"toot:Emoji\",\"focalPoint\":{\"@container\":\"@list\",\"@id\":\"toot:focalPoint\"},\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"schema\":\"http://schema.org#\",\"PropertyValue\":\"schema:PropertyValue\",\"value\":\"schema:value\"}],\"id\":\"https://social.tcit.fr/users/tcit/statuses/99908779444618462\",\"type\":\"Note\",\"summary\":null,\"inReplyTo\":null,\"published\":\"2018-04-23T12:36:31Z\",\"url\":\"https://social.tcit.fr/@tcit/99908779444618462\",\"attributedTo\":\"https://social.tcit.fr/users/tcit\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"cc\":[\"https://social.tcit.fr/users/tcit/followers\"],\"sensitive\":false,\"atomUri\":\"https://social.tcit.fr/users/tcit/statuses/99908779444618462\",\"inReplyToAtomUri\":null,\"conversation\":\"tag:social.tcit.fr,2018-04-23:objectId=1769180:objectType=Conversation\",\"content\":\"\\u003cp\\u003eRimini - Les Wampas\\u003cbr /\\u003e\\u003ca href=\\\"https://combine.fm/spotify/track/5xo1GjsebrOd1iUVoJ6SEK\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"\\u003e\\u003cspan class=\\\"invisible\\\"\\u003ehttps://\\u003c/span\\u003e\\u003cspan class=\\\"ellipsis\\\"\\u003ecombine.fm/spotify/track/5xo1G\\u003c/span\\u003e\\u003cspan class=\\\"invisible\\\"\\u003ejsebrOd1iUVoJ6SEK\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/p\\u003e\",\"contentMap\":{\"fr\":\"\\u003cp\\u003eRimini - Les Wampas\\u003cbr /\\u003e\\u003ca href=\\\"https://combine.fm/spotify/track/5xo1GjsebrOd1iUVoJ6SEK\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"\\u003e\\u003cspan class=\\\"invisible\\\"\\u003ehttps://\\u003c/span\\u003e\\u003cspan class=\\\"ellipsis\\\"\\u003ecombine.fm/spotify/track/5xo1G\\u003c/span\\u003e\\u003cspan class=\\\"invisible\\\"\\u003ejsebrOd1iUVoJ6SEK\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/p\\u003e\"},\"attachment\":[],\"tag\":[]}", + "headers": { + "Date": "Tue, 13 Nov 2018 11:02:32 GMT", + "Content-Type": "application/activity+json; charset=utf-8", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "Server": "Mastodon", + "X-Frame-Options": "DENY", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Link": "; rel=\"alternate\"; type=\"application/atom+xml\", ; rel=\"alternate\"; type=\"application/activity+json\"", + "Vary": "Accept,Accept-Encoding", + "Cache-Control": "max-age=180, public", + "ETag": "W/\"4f1620f67825ded8c3ebde01dc48e44f\"", + "X-Request-Id": "6e8e4d12-8396-445e-909c-81dab9797449", + "X-Runtime": "0.057592", + "X-Cached": "MISS" + }, + "status_code": 200, + "type": "ok" + } + }, + { + "request": { + "body": "", + "headers": { + "Accept": "application/activity+json" + }, + "method": "get", + "options": { + "follow_redirect": "true" + }, + "request_body": "", + "url": "https://social.tcit.fr/users/tcit" + }, + "response": { + "binary": false, + "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",{\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"sensitive\":\"as:sensitive\",\"movedTo\":{\"@id\":\"as:movedTo\",\"@type\":\"@id\"},\"Hashtag\":\"as:Hashtag\",\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"toot\":\"http://joinmastodon.org/ns#\",\"Emoji\":\"toot:Emoji\",\"focalPoint\":{\"@container\":\"@list\",\"@id\":\"toot:focalPoint\"},\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"schema\":\"http://schema.org#\",\"PropertyValue\":\"schema:PropertyValue\",\"value\":\"schema:value\"}],\"id\":\"https://social.tcit.fr/users/tcit\",\"type\":\"Person\",\"following\":\"https://social.tcit.fr/users/tcit/following\",\"followers\":\"https://social.tcit.fr/users/tcit/followers\",\"inbox\":\"https://social.tcit.fr/users/tcit/inbox\",\"outbox\":\"https://social.tcit.fr/users/tcit/outbox\",\"featured\":\"https://social.tcit.fr/users/tcit/collections/featured\",\"preferredUsername\":\"tcit\",\"name\":\"🦄 Thomas Citharel\",\"summary\":\"\\u003cp\\u003eHoping to make people\\u0026apos;s life better with free software at \\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://framapiaf.org/@Framasoft\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003eFramasoft\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e.\\u003c/p\\u003e\",\"url\":\"https://social.tcit.fr/@tcit\",\"manuallyApprovesFollowers\":false,\"publicKey\":{\"id\":\"https://social.tcit.fr/users/tcit#main-key\",\"owner\":\"https://social.tcit.fr/users/tcit\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApXwYMUdFg3XUd+bGsh8C\\nyiMRGpRGAWuCdM5pDWx5uM4pW2pM3xbHbcI21j9h8BmlAiPg6hbZD73KGly2N8Rt\\n5iIS0I+l6i8kA1JCCdlAaDTRd41RKMggZDoQvjVZQtsyE1VzMeU2kbqqTFN6ew7H\\nvbd6O0NhixoKoZ5f3jwuBDZoT0p1TAcaMdmG8oqHD97isizkDnRn8cOBA6wtI+xb\\n5xP2zxZMsLpTDZLiKU8XcPKZCw4OfQfmDmKkHtrFb77jCAQj/s/FxjVnvxRwmfhN\\nnWy0D+LUV/g63nHh/b5zXIeV92QZLvDYbgbezmzUzv9UeA1s70GGbaDqCIy85gw9\\n+wIDAQAB\\n-----END PUBLIC KEY-----\\n\"},\"tag\":[],\"attachment\":[{\"type\":\"PropertyValue\",\"name\":\"Works at\",\"value\":\"\\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://framapiaf.org/@Framasoft\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003eFramasoft\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e\"},{\"type\":\"PropertyValue\",\"name\":\"Pronouns\",\"value\":\"He/Him\"},{\"type\":\"PropertyValue\",\"name\":\"Work Account\",\"value\":\"\\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://framapiaf.org/@tcit\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003etcit\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e\"},{\"type\":\"PropertyValue\",\"name\":\"Pixelfed Account\",\"value\":\"@tcit@pix.tcit.fr\"}],\"endpoints\":{\"sharedInbox\":\"https://social.tcit.fr/inbox\"},\"icon\":{\"type\":\"Image\",\"mediaType\":\"image/jpeg\",\"url\":\"https://media.social.tcit.fr/mastodontcit/accounts/avatars/000/000/001/original/a28c50ce5f2b13fd.jpg\"},\"image\":{\"type\":\"Image\",\"mediaType\":\"image/jpeg\",\"url\":\"https://media.social.tcit.fr/mastodontcit/accounts/headers/000/000/001/original/4d1ab77c20265ee9.jpg\"}}", + "headers": { + "Date": "Tue, 13 Nov 2018 11:02:32 GMT", + "Content-Type": "application/activity+json; charset=utf-8", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "Server": "Mastodon", + "X-Frame-Options": "DENY", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Link": "; rel=\"lrdd\"; type=\"application/xrd+xml\", ; rel=\"alternate\"; type=\"application/atom+xml\", ; rel=\"alternate\"; type=\"application/activity+json\"", + "Vary": "Accept,Accept-Encoding", + "Cache-Control": "max-age=180, public", + "ETag": "W/\"928f8a090d8c180ccc82fc1699f6c2a5\"", + "X-Request-Id": "9520c2ef-0089-4fb8-a6b4-95f3e217487c", + "X-Runtime": "0.043715", + "X-Cached": "MISS" + }, + "status_code": 200, + "type": "ok" + } + } +] \ No newline at end of file diff --git a/test/fixtures/vcr_cassettes/activity_pub/fetch_tcit@framapiaf.org.json b/test/fixtures/vcr_cassettes/activity_pub/fetch_tcit@framapiaf.org.json new file mode 100644 index 000000000..84820b4ea --- /dev/null +++ b/test/fixtures/vcr_cassettes/activity_pub/fetch_tcit@framapiaf.org.json @@ -0,0 +1,77 @@ +[ + { + "request": { + "body": "", + "headers": { + "Accept": "application/json, application/activity+json, application/jrd+json" + }, + "method": "get", + "options": { + "follow_redirect": "true" + }, + "request_body": "", + "url": "http://framapiaf.org/.well-known/webfinger?resource=acct:tcit@framapiaf.org" + }, + "response": { + "binary": false, + "body": "{\"subject\":\"acct:tcit@framapiaf.org\",\"aliases\":[\"https://framapiaf.org/@tcit\",\"https://framapiaf.org/users/tcit\"],\"links\":[{\"rel\":\"http://webfinger.net/rel/profile-page\",\"type\":\"text/html\",\"href\":\"https://framapiaf.org/@tcit\"},{\"rel\":\"http://schemas.google.com/g/2010#updates-from\",\"type\":\"application/atom+xml\",\"href\":\"https://framapiaf.org/users/tcit.atom\"},{\"rel\":\"self\",\"type\":\"application/activity+json\",\"href\":\"https://framapiaf.org/users/tcit\"},{\"rel\":\"salmon\",\"href\":\"https://framapiaf.org/api/salmon/1\"},{\"rel\":\"magic-public-key\",\"href\":\"data:application/magic-public-key,RSA.pscVCt06lrIiB5jT6KqkZZwPVoPkhR7HzoTGb8rnklZuOyP4goHIuBDnurklztkmDCaM7DbsUWAPgRVtwWFEWuQrOenb7BPRe_m99pJfUTkBQU3IeuRMD_5Fc3OTIhHQOltTSiB900srCUxjysfwnV5JFciCz8YAXTNJZD34qyv8DbtC_pCJM7wMd9Hl3ohxSPETa6CJUaTdlNwlYJa2MOMCj6_7Iv5oAg14FT9lwqS5lF7jPHk9Z7PNc2wPmNVgIYA2n9d5k7JY8TdM8iu4HLnIbJuqDd1uitlYgy1qsdsxjv4U2Y7Nytc-3ZKHtGsCzUltYL5kC7uWrFpGoWo10Q==.AQAB\"},{\"rel\":\"http://ostatus.org/schema/1.0/subscribe\",\"template\":\"https://framapiaf.org/authorize_interaction?uri={uri}\"}]}", + "headers": { + "Date": "Tue, 13 Nov 2018 11:00:24 GMT", + "Content-Type": "application/jrd+json; charset=utf-8", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "Server": "Mastodon", + "X-Frame-Options": "DENY", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Vary": "Accept, Accept-Encoding, Origin", + "Cache-Control": "max-age=259200, public", + "ETag": "W/\"a699e76c8a4a88095aa2f31146a04969\"", + "X-Request-Id": "dfd7b0bd-7757-4d16-9a9c-db40f973df9b", + "X-Runtime": "0.003948", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", + "Referrer-Policy": "same-origin" + }, + "status_code": 200, + "type": "ok" + } + }, + { + "request": { + "body": "", + "headers": { + "Accept": "application/activity+json" + }, + "method": "get", + "options": { + "follow_redirect": "true" + }, + "request_body": "", + "url": "https://framapiaf.org/users/tcit" + }, + "response": { + "binary": false, + "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",{\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"sensitive\":\"as:sensitive\",\"movedTo\":{\"@id\":\"as:movedTo\",\"@type\":\"@id\"},\"Hashtag\":\"as:Hashtag\",\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"toot\":\"http://joinmastodon.org/ns#\",\"Emoji\":\"toot:Emoji\",\"focalPoint\":{\"@container\":\"@list\",\"@id\":\"toot:focalPoint\"},\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"schema\":\"http://schema.org#\",\"PropertyValue\":\"schema:PropertyValue\",\"value\":\"schema:value\"}],\"id\":\"https://framapiaf.org/users/tcit\",\"type\":\"Person\",\"following\":\"https://framapiaf.org/users/tcit/following\",\"followers\":\"https://framapiaf.org/users/tcit/followers\",\"inbox\":\"https://framapiaf.org/users/tcit/inbox\",\"outbox\":\"https://framapiaf.org/users/tcit/outbox\",\"featured\":\"https://framapiaf.org/users/tcit/collections/featured\",\"preferredUsername\":\"tcit\",\"name\":\"💼 Thomas Citharel\",\"summary\":\"\\u003cp\\u003e[Professionnal account] See \\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://social.tcit.fr/@tcit\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003etcit\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e for personnal stuff. At frama doing framathings.\\u003c/p\\u003e\",\"url\":\"https://framapiaf.org/@tcit\",\"manuallyApprovesFollowers\":false,\"publicKey\":{\"id\":\"https://framapiaf.org/users/tcit#main-key\",\"owner\":\"https://framapiaf.org/users/tcit\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApscVCt06lrIiB5jT6Kqk\\nZZwPVoPkhR7HzoTGb8rnklZuOyP4goHIuBDnurklztkmDCaM7DbsUWAPgRVtwWFE\\nWuQrOenb7BPRe/m99pJfUTkBQU3IeuRMD/5Fc3OTIhHQOltTSiB900srCUxjysfw\\nnV5JFciCz8YAXTNJZD34qyv8DbtC/pCJM7wMd9Hl3ohxSPETa6CJUaTdlNwlYJa2\\nMOMCj6/7Iv5oAg14FT9lwqS5lF7jPHk9Z7PNc2wPmNVgIYA2n9d5k7JY8TdM8iu4\\nHLnIbJuqDd1uitlYgy1qsdsxjv4U2Y7Nytc+3ZKHtGsCzUltYL5kC7uWrFpGoWo1\\n0QIDAQAB\\n-----END PUBLIC KEY-----\\n\"},\"tag\":[],\"attachment\":[{\"type\":\"PropertyValue\",\"name\":\"Personnal account\",\"value\":\"\\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://social.tcit.fr/@tcit\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003etcit\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e\"},{\"type\":\"PropertyValue\",\"name\":\"Work\",\"value\":\"\\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://framapiaf.org/@Framasoft\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003eFramasoft\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e\"},{\"type\":\"PropertyValue\",\"name\":\"Location\",\"value\":\"Nantes, France\"}],\"endpoints\":{\"sharedInbox\":\"https://framapiaf.org/inbox\"},\"icon\":{\"type\":\"Image\",\"mediaType\":\"image/jpeg\",\"url\":\"https://framapiaf.org/system/accounts/avatars/000/000/001/original/da0cad7ffd20eb61.jpg?1491844231\"},\"image\":{\"type\":\"Image\",\"mediaType\":\"image/jpeg\",\"url\":\"https://framapiaf.org/system/accounts/headers/000/000/001/original/198d058b3086d82d.jpg?1491844231\"}}", + "headers": { + "Date": "Tue, 13 Nov 2018 11:00:24 GMT", + "Content-Type": "application/activity+json; charset=utf-8", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "Server": "Mastodon", + "X-Frame-Options": "DENY", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Link": "; rel=\"lrdd\"; type=\"application/xrd+xml\", ; rel=\"alternate\"; type=\"application/atom+xml\", ; rel=\"alternate\"; type=\"application/activity+json\"", + "Vary": "Accept,Accept-Encoding", + "Cache-Control": "max-age=180, public", + "ETag": "W/\"473bf1a80cea53496b5f1e968123a01b\"", + "X-Request-Id": "6a828fd7-ac43-4a9f-b1f9-dd1a61420ea1", + "X-Runtime": "0.003956", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", + "Referrer-Policy": "same-origin" + }, + "status_code": 200, + "type": "ok" + } + } +] \ No newline at end of file diff --git a/test/fixtures/vcr_cassettes/activity_pub_controller/mastodon-post-activity_actor_call.json b/test/fixtures/vcr_cassettes/activity_pub_controller/mastodon-post-activity_actor_call.json new file mode 100644 index 000000000..f0effc71e --- /dev/null +++ b/test/fixtures/vcr_cassettes/activity_pub_controller/mastodon-post-activity_actor_call.json @@ -0,0 +1,40 @@ +[ + { + "request": { + "body": "", + "headers": { + "Accept": "application/activity+json" + }, + "method": "get", + "options": { + "follow_redirect": "true" + }, + "request_body": "", + "url": "http://framapiaf.org/users/admin" + }, + "response": { + "binary": false, + "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",{\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"sensitive\":\"as:sensitive\",\"movedTo\":{\"@id\":\"as:movedTo\",\"@type\":\"@id\"},\"Hashtag\":\"as:Hashtag\",\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"toot\":\"http://joinmastodon.org/ns#\",\"Emoji\":\"toot:Emoji\",\"focalPoint\":{\"@container\":\"@list\",\"@id\":\"toot:focalPoint\"},\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"schema\":\"http://schema.org#\",\"PropertyValue\":\"schema:PropertyValue\",\"value\":\"schema:value\"}],\"id\":\"https://framapiaf.org/users/admin\",\"type\":\"Person\",\"following\":\"https://framapiaf.org/users/admin/following\",\"followers\":\"https://framapiaf.org/users/admin/followers\",\"inbox\":\"https://framapiaf.org/users/admin/inbox\",\"outbox\":\"https://framapiaf.org/users/admin/outbox\",\"featured\":\"https://framapiaf.org/users/admin/collections/featured\",\"preferredUsername\":\"admin\",\"name\":\"\",\"summary\":\"\\u003cp\\u003e\\u003c/p\\u003e\",\"url\":\"https://framapiaf.org/@admin\",\"manuallyApprovesFollowers\":false,\"publicKey\":{\"id\":\"https://framapiaf.org/users/admin#main-key\",\"owner\":\"https://framapiaf.org/users/admin\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHaU/AZ5dWtSxZXkPa89\\nDUQ4z+JQHGGUG/xkGuq0v8P6qJfQqtHPBO5vH0IQJqluXWQS96gqTwjZnYevcpNA\\nveYv0K25DWszx5Ehz6JX2/sSvu2rNUcQ3YZvSjdo/Yy1u5Fuc5lLmvw8uFzXYekD\\nWovTMOnp4mIKpVEm/G/v4w8jvFEKw88h743vwaEIim88GEQItMxzGAV6zSqV1DWO\\nLxtoRsinslJYfAG46ex4YUATFveWvOUeWk5W1sEa5f3c0moaTmBM/PAAo8vLxhlw\\nJhsHihsCH+BcXKVMjW8OCqYYqISMxEifUBX63HcJt78ELHpOuc1c2eG59PomtTjQ\\nywIDAQAB\\n-----END PUBLIC KEY-----\\n\"},\"tag\":[],\"attachment\":[],\"endpoints\":{\"sharedInbox\":\"https://framapiaf.org/inbox\"}}", + "headers": { + "Date": "Tue, 13 Nov 2018 11:22:02 GMT", + "Content-Type": "application/activity+json; charset=utf-8", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "Server": "Mastodon", + "X-Frame-Options": "DENY", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Link": "; rel=\"lrdd\"; type=\"application/xrd+xml\", ; rel=\"alternate\"; type=\"application/atom+xml\", ; rel=\"alternate\"; type=\"application/activity+json\"", + "Vary": "Accept,Accept-Encoding", + "Cache-Control": "max-age=180, public", + "ETag": "W/\"82f88eaea909e6c3f20f908ad16e4b54\"", + "X-Request-Id": "cef423e2-d143-422f-94b0-03450f70a32d", + "X-Runtime": "0.005097", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", + "Referrer-Policy": "same-origin" + }, + "status_code": 200, + "type": "ok" + } + } +] \ No newline at end of file diff --git a/test/fixtures/vcr_cassettes/actors/remote_actor_mastodon_tcit.json b/test/fixtures/vcr_cassettes/actors/remote_actor_mastodon_tcit.json new file mode 100644 index 000000000..3e0ff3069 --- /dev/null +++ b/test/fixtures/vcr_cassettes/actors/remote_actor_mastodon_tcit.json @@ -0,0 +1,39 @@ +[ + { + "request": { + "body": "", + "headers": { + "Accept": "application/activity+json" + }, + "method": "get", + "options": { + "follow_redirect": "true" + }, + "request_body": "", + "url": "https://social.tcit.fr/users/tcit" + }, + "response": { + "binary": false, + "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",{\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"sensitive\":\"as:sensitive\",\"movedTo\":{\"@id\":\"as:movedTo\",\"@type\":\"@id\"},\"Hashtag\":\"as:Hashtag\",\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"toot\":\"http://joinmastodon.org/ns#\",\"Emoji\":\"toot:Emoji\",\"focalPoint\":{\"@container\":\"@list\",\"@id\":\"toot:focalPoint\"},\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"schema\":\"http://schema.org#\",\"PropertyValue\":\"schema:PropertyValue\",\"value\":\"schema:value\"}],\"id\":\"https://social.tcit.fr/users/tcit\",\"type\":\"Person\",\"following\":\"https://social.tcit.fr/users/tcit/following\",\"followers\":\"https://social.tcit.fr/users/tcit/followers\",\"inbox\":\"https://social.tcit.fr/users/tcit/inbox\",\"outbox\":\"https://social.tcit.fr/users/tcit/outbox\",\"featured\":\"https://social.tcit.fr/users/tcit/collections/featured\",\"preferredUsername\":\"tcit\",\"name\":\"🦄 Thomas Citharel\",\"summary\":\"\\u003cp\\u003eHoping to make people\\u0026apos;s life better with free software at \\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://framapiaf.org/@Framasoft\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003eFramasoft\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e.\\u003c/p\\u003e\",\"url\":\"https://social.tcit.fr/@tcit\",\"manuallyApprovesFollowers\":false,\"publicKey\":{\"id\":\"https://social.tcit.fr/users/tcit#main-key\",\"owner\":\"https://social.tcit.fr/users/tcit\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApXwYMUdFg3XUd+bGsh8C\\nyiMRGpRGAWuCdM5pDWx5uM4pW2pM3xbHbcI21j9h8BmlAiPg6hbZD73KGly2N8Rt\\n5iIS0I+l6i8kA1JCCdlAaDTRd41RKMggZDoQvjVZQtsyE1VzMeU2kbqqTFN6ew7H\\nvbd6O0NhixoKoZ5f3jwuBDZoT0p1TAcaMdmG8oqHD97isizkDnRn8cOBA6wtI+xb\\n5xP2zxZMsLpTDZLiKU8XcPKZCw4OfQfmDmKkHtrFb77jCAQj/s/FxjVnvxRwmfhN\\nnWy0D+LUV/g63nHh/b5zXIeV92QZLvDYbgbezmzUzv9UeA1s70GGbaDqCIy85gw9\\n+wIDAQAB\\n-----END PUBLIC KEY-----\\n\"},\"tag\":[],\"attachment\":[{\"type\":\"PropertyValue\",\"name\":\"Works at\",\"value\":\"\\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://framapiaf.org/@Framasoft\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003eFramasoft\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e\"},{\"type\":\"PropertyValue\",\"name\":\"Pronouns\",\"value\":\"He/Him\"},{\"type\":\"PropertyValue\",\"name\":\"Work Account\",\"value\":\"\\u003cspan class=\\\"h-card\\\"\\u003e\\u003ca href=\\\"https://framapiaf.org/@tcit\\\" class=\\\"u-url mention\\\"\\u003e@\\u003cspan\\u003etcit\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/span\\u003e\"},{\"type\":\"PropertyValue\",\"name\":\"Pixelfed Account\",\"value\":\"@tcit@pix.tcit.fr\"}],\"endpoints\":{\"sharedInbox\":\"https://social.tcit.fr/inbox\"},\"icon\":{\"type\":\"Image\",\"mediaType\":\"image/jpeg\",\"url\":\"https://media.social.tcit.fr/mastodontcit/accounts/avatars/000/000/001/original/a28c50ce5f2b13fd.jpg\"},\"image\":{\"type\":\"Image\",\"mediaType\":\"image/jpeg\",\"url\":\"https://media.social.tcit.fr/mastodontcit/accounts/headers/000/000/001/original/4d1ab77c20265ee9.jpg\"}}", + "headers": { + "Date": "Tue, 13 Nov 2018 11:21:24 GMT", + "Content-Type": "application/activity+json; charset=utf-8", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "Server": "Mastodon", + "X-Frame-Options": "DENY", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Link": "; rel=\"lrdd\"; type=\"application/xrd+xml\", ; rel=\"alternate\"; type=\"application/atom+xml\", ; rel=\"alternate\"; type=\"application/activity+json\"", + "Vary": "Accept,Accept-Encoding", + "Cache-Control": "max-age=180, public", + "ETag": "W/\"928f8a090d8c180ccc82fc1699f6c2a5\"", + "X-Request-Id": "ed9c4b9e-b29c-4f79-b704-3092a5d951a6", + "X-Runtime": "0.041257", + "X-Cached": "MISS" + }, + "status_code": 200, + "type": "ok" + } + } +] \ No newline at end of file diff --git a/test/fixtures/vcr_cassettes/webfinger/friendica.json b/test/fixtures/vcr_cassettes/webfinger/friendica.json new file mode 100644 index 000000000..470269a07 --- /dev/null +++ b/test/fixtures/vcr_cassettes/webfinger/friendica.json @@ -0,0 +1,35 @@ +[ + { + "request": { + "body": "", + "headers": { + "Accept": "application/json, application/activity+json, application/jrd+json" + }, + "method": "get", + "options": { + "follow_redirect": "true" + }, + "request_body": "", + "url": "http://squeet.me/.well-known/webfinger?resource=acct:lain@squeet.me" + }, + "response": { + "binary": false, + "body": "{\"subject\":\"acct:lain@squeet.me\",\"aliases\":[\"https:\\/\\/squeet.me\\/~lain\",\"https:\\/\\/squeet.me\\/profile\\/lain\"],\"links\":[{\"rel\":\"http:\\/\\/purl.org\\/macgirvin\\/dfrn\\/1.0\",\"href\":\"https:\\/\\/squeet.me\\/profile\\/lain\"},{\"rel\":\"http:\\/\\/schemas.google.com\\/g\\/2010#updates-from\",\"type\":\"application\\/atom+xml\",\"href\":\"https:\\/\\/squeet.me\\/dfrn_poll\\/lain\"},{\"rel\":\"http:\\/\\/webfinger.net\\/rel\\/profile-page\",\"type\":\"text\\/html\",\"href\":\"https:\\/\\/squeet.me\\/profile\\/lain\"},{\"rel\":\"self\",\"type\":\"application\\/activity+json\",\"href\":\"https:\\/\\/squeet.me\\/profile\\/lain\"},{\"rel\":\"http:\\/\\/microformats.org\\/profile\\/hcard\",\"type\":\"text\\/html\",\"href\":\"https:\\/\\/squeet.me\\/hcard\\/lain\"},{\"rel\":\"http:\\/\\/portablecontacts.net\\/spec\\/1.0\",\"href\":\"https:\\/\\/squeet.me\\/poco\\/lain\"},{\"rel\":\"http:\\/\\/webfinger.net\\/rel\\/avatar\",\"type\":\"image\\/jpeg\",\"href\":\"https:\\/\\/squeet.me\\/photo\\/profile\\/301.jpg\"},{\"rel\":\"http:\\/\\/joindiaspora.com\\/seed_location\",\"type\":\"text\\/html\",\"href\":\"https:\\/\\/squeet.me\"},{\"rel\":\"salmon\",\"href\":\"https:\\/\\/squeet.me\\/salmon\\/lain\"},{\"rel\":\"http:\\/\\/salmon-protocol.org\\/ns\\/salmon-replies\",\"href\":\"https:\\/\\/squeet.me\\/salmon\\/lain\"},{\"rel\":\"http:\\/\\/salmon-protocol.org\\/ns\\/salmon-mention\",\"href\":\"https:\\/\\/squeet.me\\/salmon\\/lain\\/mention\"},{\"rel\":\"http:\\/\\/ostatus.org\\/schema\\/1.0\\/subscribe\",\"template\":\"https:\\/\\/squeet.me\\/follow?url={uri}\"},{\"rel\":\"magic-public-key\",\"href\":\"data:application\\/magic-public-key,RSA.AMwa8FUs2fWEjX0xN7yRQgegQffhBpuKNC6fa5VNSVorFjGZhRrlPMn7TQOeihlc9lBz2OsHlIedbYn2uJ7yCs0.AQAB\"},{\"rel\":\"http:\\/\\/purl.org\\/openwebauth\\/v1\",\"type\":\"application\\/x-dfrn+json\",\"href\":\"https:\\/\\/squeet.me\\/owa\"}]}", + "headers": { + "Date": "Tue, 13 Nov 2018 11:11:09 GMT", + "Server": "Apache", + "Expires": "Thu, 19 Nov 1981 08:52:00 GMT", + "Cache-Control": "no-store, no-cache, must-revalidate", + "Pragma": "no-cache", + "X-Account-Management-Status": "none", + "Access-Control-Allow-Origin": "*", + "Set-Cookie": "PHPSESSID=330arcps63iok272c5hqdsfhp3; path=/; secure; HttpOnly", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "Content-Type": "application/json; charset=utf-8" + }, + "status_code": 200, + "type": "ok" + } + } +] \ No newline at end of file diff --git a/test/fixtures/vcr_cassettes/webfinger/mastodon.json b/test/fixtures/vcr_cassettes/webfinger/mastodon.json new file mode 100644 index 000000000..8f15f85d8 --- /dev/null +++ b/test/fixtures/vcr_cassettes/webfinger/mastodon.json @@ -0,0 +1,38 @@ +[ + { + "request": { + "body": "", + "headers": { + "Accept": "application/json, application/activity+json, application/jrd+json" + }, + "method": "get", + "options": { + "follow_redirect": "true" + }, + "request_body": "", + "url": "http://social.tcit.fr/.well-known/webfinger?resource=acct:tcit@social.tcit.fr" + }, + "response": { + "binary": false, + "body": "{\"subject\":\"acct:tcit@social.tcit.fr\",\"aliases\":[\"https://social.tcit.fr/@tcit\",\"https://social.tcit.fr/users/tcit\"],\"links\":[{\"rel\":\"http://webfinger.net/rel/profile-page\",\"type\":\"text/html\",\"href\":\"https://social.tcit.fr/@tcit\"},{\"rel\":\"http://schemas.google.com/g/2010#updates-from\",\"type\":\"application/atom+xml\",\"href\":\"https://social.tcit.fr/users/tcit.atom\"},{\"rel\":\"self\",\"type\":\"application/activity+json\",\"href\":\"https://social.tcit.fr/users/tcit\"},{\"rel\":\"salmon\",\"href\":\"https://social.tcit.fr/api/salmon/1\"},{\"rel\":\"magic-public-key\",\"href\":\"data:application/magic-public-key,RSA.pXwYMUdFg3XUd-bGsh8CyiMRGpRGAWuCdM5pDWx5uM4pW2pM3xbHbcI21j9h8BmlAiPg6hbZD73KGly2N8Rt5iIS0I-l6i8kA1JCCdlAaDTRd41RKMggZDoQvjVZQtsyE1VzMeU2kbqqTFN6ew7Hvbd6O0NhixoKoZ5f3jwuBDZoT0p1TAcaMdmG8oqHD97isizkDnRn8cOBA6wtI-xb5xP2zxZMsLpTDZLiKU8XcPKZCw4OfQfmDmKkHtrFb77jCAQj_s_FxjVnvxRwmfhNnWy0D-LUV_g63nHh_b5zXIeV92QZLvDYbgbezmzUzv9UeA1s70GGbaDqCIy85gw9-w==.AQAB\"},{\"rel\":\"http://ostatus.org/schema/1.0/subscribe\",\"template\":\"https://social.tcit.fr/authorize_interaction?uri={uri}\"}]}", + "headers": { + "Date": "Tue, 13 Nov 2018 11:11:10 GMT", + "Content-Type": "application/jrd+json; charset=utf-8", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "Server": "Mastodon", + "X-Frame-Options": "DENY", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Vary": "Accept, Accept-Encoding, Origin", + "Cache-Control": "max-age=259200, public", + "ETag": "W/\"33f6cc86f8f97d0ca930761c04e0db58\"", + "X-Request-Id": "b7f5ad84-5120-4275-aacf-dbb9654be181", + "X-Runtime": "0.015609", + "X-Cached": "MISS" + }, + "status_code": 200, + "type": "ok" + } + } +] \ No newline at end of file diff --git a/test/fixtures/vcr_cassettes/webfinger/peertube.json b/test/fixtures/vcr_cassettes/webfinger/peertube.json new file mode 100644 index 000000000..bc97f4a06 --- /dev/null +++ b/test/fixtures/vcr_cassettes/webfinger/peertube.json @@ -0,0 +1,38 @@ +[ + { + "request": { + "body": "", + "headers": { + "Accept": "application/json, application/activity+json, application/jrd+json" + }, + "method": "get", + "options": { + "follow_redirect": "true" + }, + "request_body": "", + "url": "http://framatube.org/.well-known/webfinger?resource=acct:framasoft@framatube.org" + }, + "response": { + "binary": false, + "body": "{\"subject\":\"acct:framasoft@framatube.org\",\"aliases\":[\"https://framatube.org/accounts/framasoft\"],\"links\":[{\"rel\":\"self\",\"type\":\"application/activity+json\",\"href\":\"https://framatube.org/accounts/framasoft\"}]}", + "headers": { + "Server": "nginx/1.10.3", + "Date": "Tue, 13 Nov 2018 11:11:11 GMT", + "Content-Type": "application/json; charset=utf-8", + "Content-Length": "207", + "Connection": "keep-alive", + "X-DNS-Prefetch-Control": "off", + "X-Frame-Options": "DENY", + "X-Download-Options": "noopen", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Tk": "N", + "ETag": "W/\"cf-VoWlsif7OQ4xxqki7jRAnOPKRes\"", + "Strict-Transport-Security": "max-age=63072000; includeSubDomains; preload", + "X-Robots-Tag": "none" + }, + "status_code": 200, + "type": "ok" + } + } +] \ No newline at end of file diff --git a/test/fixtures/vcr_cassettes/webfinger/pleroma.json b/test/fixtures/vcr_cassettes/webfinger/pleroma.json new file mode 100644 index 000000000..bf129a2be --- /dev/null +++ b/test/fixtures/vcr_cassettes/webfinger/pleroma.json @@ -0,0 +1,43 @@ +[ + { + "request": { + "body": "", + "headers": { + "Accept": "application/json, application/activity+json, application/jrd+json" + }, + "method": "get", + "options": { + "follow_redirect": "true" + }, + "request_body": "", + "url": "http://pleroma.soykaf.com/.well-known/webfinger?resource=acct:lain@pleroma.soykaf.com" + }, + "response": { + "binary": false, + "body": "{\"aliases\":[\"https://pleroma.soykaf.com/users/lain\"],\"links\":[{\"href\":\"https://pleroma.soykaf.com/users/lain/feed.atom\",\"rel\":\"http://schemas.google.com/g/2010#updates-from\",\"type\":\"application/atom+xml\"},{\"href\":\"https://pleroma.soykaf.com/users/lain\",\"rel\":\"http://webfinger.net/rel/profile-page\",\"type\":\"text/html\"},{\"href\":\"https://pleroma.soykaf.com/users/lain/salmon\",\"rel\":\"salmon\"},{\"href\":\"data:application/magic-public-key,RSA.u39dKLin8N4PywPvasEGXstOMsgg9m1OEKnpfHnSHqc6UOtIPs5-aI_LcLbhIEH2EVl6jstvtqMIloPch1FizZ3OBiKz81dXTiEZ3NfKgj_GJfIlipChAadxrmUyWT_Pr0qPaF1vhPrkSTwR8iDNUiQ-OEggRPpJVkJ619MXNdsJE59yklZiD1WY0vC9aG9m-dh0BANKNwSjwfZ3uFjDh0UosMATKjPTSO_I59nK_lArex_jAwTnVm6Dryk2qR2XXZyzTzZAHuYqSM77RlsNTJUCOaSadl816eZAvU3TF-ibIou0D-0sN-M-QehRh93sVJ95U40GQz8jOGc_5wK8xw==.AQAB\",\"rel\":\"magic-public-key\"},{\"href\":\"https://pleroma.soykaf.com/users/lain\",\"rel\":\"self\",\"type\":\"application/activity+json\"},{\"href\":\"https://pleroma.soykaf.com/users/lain\",\"rel\":\"self\",\"type\":\"application/ld+json; profile=\\\"https://www.w3.org/ns/activitystreams\\\"\"},{\"rel\":\"http://ostatus.org/schema/1.0/subscribe\",\"template\":\"https://pleroma.soykaf.com/ostatus_subscribe?acct={uri}\"}],\"subject\":\"acct:lain@pleroma.soykaf.com\"}", + "headers": { + "Server": "nginx/1.10.3", + "Date": "Tue, 13 Nov 2018 11:11:11 GMT", + "Content-Type": "application/json; charset=utf-8", + "Content-Length": "1214", + "Connection": "keep-alive", + "Vary": "Accept-Encoding", + "cache-control": "max-age=0, private, must-revalidate", + "x-request-id": "2ljal4oljell0gfni41am571", + "access-control-allow-origin": "*", + "access-control-expose-headers": "", + "access-control-allow-credentials": "true", + "Access-Control-Allow-Methods": "POST, GET, OPTIONS", + "Access-Control-Allow-Headers": "Authorization, Content-Type", + "X-XSS-Protection": "1; mode=block", + "X-Permitted-Cross-Domain-Policies": "none", + "X-Frame-Options": "DENY", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "X-Download-Options": "noopen" + }, + "status_code": 200, + "type": "ok" + } + } +] \ No newline at end of file diff --git a/test/mobilizon/actors/actors_test.exs b/test/mobilizon/actors/actors_test.exs index 1a3e6fc5b..d093e5642 100644 --- a/test/mobilizon/actors/actors_test.exs +++ b/test/mobilizon/actors/actors_test.exs @@ -4,6 +4,7 @@ defmodule Mobilizon.ActorsTest do alias Mobilizon.Actors alias Mobilizon.Actors.{Actor, Member, Follower, User, Bot} import Mobilizon.Factory + use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney describe "actors" do @valid_attrs %{ @@ -88,12 +89,14 @@ defmodule Mobilizon.ActorsTest do end test "get_actor_by_name/1 returns a remote actor" do - with {:ok, - %Actor{id: actor_id, preferred_username: preferred_username, domain: domain} = _actor} <- - Actors.get_or_fetch_by_url(@remote_account_url), - %Actor{id: actor_found_id} <- - Actors.get_actor_by_name("#{preferred_username}@#{domain}").id do - assert actor_found_id == actor_id + use_cassette "actors/remote_actor_mastodon_tcit" do + with {:ok, + %Actor{id: actor_id, preferred_username: preferred_username, domain: domain} = _actor} <- + Actors.get_or_fetch_by_url(@remote_account_url), + %Actor{id: actor_found_id} <- + Actors.get_actor_by_name("#{preferred_username}@#{domain}").id do + assert actor_found_id == actor_id + end end end @@ -132,20 +135,22 @@ defmodule Mobilizon.ActorsTest do end test "get_actor_by_name_with_everything!/1 returns the remote actor with it's organized events" do - assert {:ok, %Actor{} = actor} = Actors.get_or_fetch_by_url(@remote_account_url) + use_cassette "actors/remote_actor_mastodon_tcit" do + with {:ok, %Actor{} = actor} <- Actors.get_or_fetch_by_url(@remote_account_url) do + assert Actors.get_actor_by_name_with_everything( + "#{actor.preferred_username}@#{actor.domain}" + ).organized_events == [] - assert Actors.get_actor_by_name_with_everything( - "#{actor.preferred_username}@#{actor.domain}" - ).organized_events == [] + event = insert(:event, organizer_actor: actor) - event = insert(:event, organizer_actor: actor) + event_found_id = + Actors.get_actor_by_name_with_everything("#{actor.preferred_username}@#{actor.domain}").organized_events + |> hd + |> Map.get(:id) - event_found_id = - Actors.get_actor_by_name_with_everything("#{actor.preferred_username}@#{actor.domain}").organized_events - |> hd - |> Map.get(:id) - - assert event_found_id == event.id + assert event_found_id == event.id + end + end end test "get_or_fetch_by_url/1 returns the local actor for the url", %{ @@ -158,10 +163,12 @@ defmodule Mobilizon.ActorsTest do end test "get_or_fetch_by_url/1 returns the remote actor for the url" do - with {:ok, %Actor{preferred_username: preferred_username, domain: domain}} <- - Actors.get_or_fetch_by_url!(@remote_account_url) do - assert preferred_username == @remote_account_username - assert domain == @remote_account_domain + use_cassette "actors/remote_actor_mastodon_tcit" do + with {:ok, %Actor{preferred_username: preferred_username, domain: domain}} <- + Actors.get_or_fetch_by_url!(@remote_account_url) do + assert preferred_username == @remote_account_username + assert domain == @remote_account_domain + end end end @@ -178,9 +185,12 @@ defmodule Mobilizon.ActorsTest do test "test find_actors_by_username_or_name/1 returns actors with similar usernames", %{ actor: %Actor{id: actor_id} } do - {:ok, %Actor{id: actor2_id}} = Actors.get_or_fetch_by_url(@remote_account_url) - actors_ids = Actors.find_actors_by_username_or_name("t") |> Enum.map(& &1.id) - assert MapSet.new(actors_ids) == MapSet.new([actor2_id, actor_id]) + use_cassette "actors/remote_actor_mastodon_tcit" do + with {:ok, %Actor{id: actor2_id}} <- Actors.get_or_fetch_by_url(@remote_account_url) do + actors_ids = Actors.find_actors_by_username_or_name("t") |> Enum.map(& &1.id) + assert MapSet.new(actors_ids) == MapSet.new([actor2_id, actor_id]) + end + end end test "test find_actors_by_username_or_name/1 returns actors with similar names" do @@ -218,7 +228,9 @@ defmodule Mobilizon.ActorsTest do 20_890_513_599_005_517_665_557_846_902_571_022_168_782_075_040_010_449_365_706_450_877_170_130_373_892_202_874_869_873_999_284_399_697_282_332_064_948_148_602_583_340_776_692_090_472_558_740_998_357_203_838_580_321_412_679_020_304_645_826_371_196_718_081_108_049_114_160_630_664_514_340_729_769_453_281_682_773_898_619_827_376_232_969_899_348_462_205_389_310_883_299_183_817_817_999_273_916_446_620_095_414_233_374_619_948_098_516_821_650_069_821_783_810_210_582_035_456_563_335_930_330_252_551_528_035_801_173_640_288_329_718_719_895_926_309_416_142_129_926_226_047_930_429_802_084_560_488_897_717_417_403_272_782_469_039_131_379_953_278_833_320_195_233_761_955_815_307_522_871_787_339_192_744_439_894_317_730_207_141_881_699_363_391_788_150_650_217_284_777_541_358_381_165_360_697_136_307_663_640_904_621_178_632_289_787, 65537}} test "test get_public_key_for_url/1 with remote actor" do - assert Actor.get_public_key_for_url(@remote_account_url) == @remote_actor_key + use_cassette "actors/remote_actor_mastodon_tcit" do + assert Actor.get_public_key_for_url(@remote_account_url) == @remote_actor_key + end end test "create_actor/1 with valid data creates a actor" do diff --git a/test/mobilizon/service/activitypub/activitypub_test.exs b/test/mobilizon/service/activitypub/activitypub_test.exs index 601b0895b..714bed538 100644 --- a/test/mobilizon/service/activitypub/activitypub_test.exs +++ b/test/mobilizon/service/activitypub/activitypub_test.exs @@ -7,16 +7,25 @@ defmodule Mobilizon.Service.Activitypub.ActivitypubTest do alias Mobilizon.Actors.Actor alias Mobilizon.Actors alias Mobilizon.Service.ActivityPub + use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney + + setup_all do + HTTPoison.start() + end describe "fetching actor from it's url" do test "returns an actor from nickname" do - assert {:ok, %Actor{preferred_username: "tcit", domain: "framapiaf.org"} = actor} = - ActivityPub.make_actor_from_nickname("tcit@framapiaf.org") + use_cassette "activity_pub/fetch_tcit@framapiaf.org" do + assert {:ok, %Actor{preferred_username: "tcit", domain: "framapiaf.org"} = actor} = + ActivityPub.make_actor_from_nickname("tcit@framapiaf.org") + end end test "returns an actor from url" do - assert {:ok, %Actor{preferred_username: "tcit", domain: "framapiaf.org"}} = - Actors.get_or_fetch_by_url("https://framapiaf.org/users/tcit") + use_cassette "activity_pub/fetch_framapiaf.org_users_tcit" do + assert {:ok, %Actor{preferred_username: "tcit", domain: "framapiaf.org"}} = + Actors.get_or_fetch_by_url("https://framapiaf.org/users/tcit") + end end end @@ -40,17 +49,19 @@ defmodule Mobilizon.Service.Activitypub.ActivitypubTest do describe "fetching an" do test "object by url" do - {:ok, object} = - ActivityPub.fetch_object_from_url( - "https://social.tcit.fr/users/tcit/statuses/99908779444618462" - ) + use_cassette "activity_pub/fetch_social_tcit_fr_status" do + {:ok, object} = + ActivityPub.fetch_object_from_url( + "https://social.tcit.fr/users/tcit/statuses/99908779444618462" + ) - {:ok, object_again} = - ActivityPub.fetch_object_from_url( - "https://social.tcit.fr/users/tcit/statuses/99908779444618462" - ) + {:ok, object_again} = + ActivityPub.fetch_object_from_url( + "https://social.tcit.fr/users/tcit/statuses/99908779444618462" + ) - assert object == object_again + assert object == object_again + end end end diff --git a/test/mobilizon/service/web_finger/web_finger_test.exs b/test/mobilizon/service/web_finger/web_finger_test.exs index 954db8a4e..06fa4d1f2 100644 --- a/test/mobilizon/service/web_finger/web_finger_test.exs +++ b/test/mobilizon/service/web_finger/web_finger_test.exs @@ -3,6 +3,17 @@ defmodule Mobilizon.Service.WebFingerTest do alias Mobilizon.Service.WebFinger import Mobilizon.Factory + use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney + + @mastodon_account "tcit@social.tcit.fr" + @mastodon_account_username "tcit" + @pleroma_account "lain@pleroma.soykaf.com" + @pleroma_account_username "lain" + @peertube_account "framasoft@framatube.org" + @peertube_account_username "framasoft" + @friendica_account "lain@squeet.me" + @friendica_account_username "lain" + describe "host meta" do test "returns a link to the xml lrdd" do host_info = WebFinger.host_meta() @@ -31,39 +42,47 @@ defmodule Mobilizon.Service.WebFingerTest do describe "fingering" do test "a mastodon actor" do - actor = "tcit@social.tcit.fr" + use_cassette "webfinger/mastodon" do + res = %{ + "subject" => "acct:" <> @mastodon_account, + "url" => "https://social.tcit.fr/users/#{@mastodon_account_username}" + } - assert {:ok, %{"subject" => "acct:" <> actor, "url" => "https://social.tcit.fr/users/tcit"}} = - WebFinger.finger(actor) + assert {:ok, res} == WebFinger.finger(@mastodon_account) + end end test "a pleroma actor" do - actor = "@lain@pleroma.soykaf.com" + use_cassette "webfinger/pleroma" do + res = %{ + "subject" => "acct:" <> @pleroma_account, + "url" => "https://pleroma.soykaf.com/users/#{@pleroma_account_username}" + } - assert {:ok, - %{"subject" => "acct:" <> actor, "url" => "https://pleroma.soykaf.com/users/lain"}} = - WebFinger.finger(actor) + assert {:ok, res} == WebFinger.finger(@pleroma_account) + end end test "a peertube actor" do - actor = "framasoft@framatube.org" + use_cassette "webfinger/peertube" do + res = %{ + "subject" => "acct:" <> @peertube_account, + "url" => "https://framatube.org/accounts/#{@peertube_account_username}" + } - assert {:ok, - %{ - "subject" => "acct:" <> actor, - "url" => "https://framatube.org/accounts/framasoft" - }} = WebFinger.finger(actor) + assert {:ok, res} == WebFinger.finger(@peertube_account) + end end test "a friendica actor" do - # Now with ActivityPub ! - actor = "lain@squeet.me" + use_cassette "webfinger/friendica" do + res = %{ + "subject" => "acct:" <> @friendica_account, + "url" => "https://squeet.me/profile/#{@friendica_account_username}" + } - assert {:ok, - %{ - "subject" => "acct:" <> actor, - "url" => "https://squeet.me/profile/lain" - }} = WebFinger.finger(actor) + assert {:ok, res} == WebFinger.finger(@friendica_account) + end end end end diff --git a/test/mobilizon_web/controllers/activity_pub_controller_test.exs b/test/mobilizon_web/controllers/activity_pub_controller_test.exs index 4cd5e75ba..19036c521 100644 --- a/test/mobilizon_web/controllers/activity_pub_controller_test.exs +++ b/test/mobilizon_web/controllers/activity_pub_controller_test.exs @@ -5,6 +5,7 @@ defmodule MobilizonWeb.ActivityPubControllerTest do alias Mobilizon.Actors alias Mobilizon.Service.ActivityPub alias Mobilizon.Service.ActivityPub.Utils + use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney describe "/@:preferred_username" do test "it returns a json representation of the actor", %{conn: conn} do @@ -48,17 +49,19 @@ defmodule MobilizonWeb.ActivityPubControllerTest do describe "/@:preferred_username/inbox" do test "it inserts an incoming event into the database", %{conn: conn} do - data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() + use_cassette "activity_pub_controller/mastodon-post-activity_actor_call" do + data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() - conn = - conn - |> assign(:valid_signature, true) - |> put_req_header("content-type", "application/activity+json") - |> post("/inbox", data) + conn = + conn + |> assign(:valid_signature, true) + |> put_req_header("content-type", "application/activity+json") + |> post("/inbox", data) - assert "ok" == json_response(conn, 200) - :timer.sleep(500) - assert ActivityPub.fetch_object_from_url(data["object"]["id"]) + assert "ok" == json_response(conn, 200) + :timer.sleep(500) + assert ActivityPub.fetch_object_from_url(data["object"]["id"]) + end end end