From c288831bb26108f27d3766e1faae7c9bcec96d80 Mon Sep 17 00:00:00 2001 From: miraikumiko Date: Fri, 20 Jun 2025 09:20:57 +0200 Subject: [PATCH] Add outbox_controller_test.exs --- .../controllers/outbox_controller_test.exs | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 test/nulla_web/controllers/outbox_controller_test.exs diff --git a/test/nulla_web/controllers/outbox_controller_test.exs b/test/nulla_web/controllers/outbox_controller_test.exs new file mode 100644 index 0000000..cd5512c --- /dev/null +++ b/test/nulla_web/controllers/outbox_controller_test.exs @@ -0,0 +1,85 @@ +defmodule NullaWeb.OutboxControllerTest do + use NullaWeb.ConnCase + alias Nulla.KeyGen + alias Nulla.Snowflake + alias Nulla.Models.Actor + alias Nulla.Models.Note + + setup do + {publicKeyPem, _privateKeyPem} = KeyGen.gen() + + {:ok, actor} = + Actor.create_actor(%{ + domain: "localhost", + ap_id: "http://localhost/users/test", + type: "Person", + following: "http://localhost/users/test/following", + followers: "http://localhost/users/test/followers", + inbox: "http://localhost/users/test/inbox", + outbox: "http://localhost/users/test/outbox", + featured: "http://localhost/users/test/collections/featured", + featuredTags: "http://localhost/users/test/collections/tags", + preferredUsername: "test", + name: "Test", + summary: "Test User", + url: "http://localhost/@test", + manuallyApprovesFollowers: false, + discoverable: true, + indexable: true, + published: DateTime.utc_now(), + memorial: false, + publicKey: + Jason.OrderedObject.new( + id: "http://localhost/users/test#main-key", + owner: "http://localhost/users/test", + publicKeyPem: publicKeyPem + ), + endpoints: Jason.OrderedObject.new(sharedInbox: "http://localhost/inbox") + }) + + note_id = Snowflake.next_id() + + {:ok, _note} = + Note.create_note(%{ + url: "#{actor.url}/#{note_id}", + content: "Hello World from Nulla!", + language: "en", + actor_id: actor.id + }) + + :ok + end + + describe "GET /users/username/outbox" do + test "returns ActivityPub JSON of outbox", %{conn: conn} do + conn = + conn + |> get(~p"/users/test/outbox") + + assert response = json_response(conn, 200) + + assert is_binary(response["@context"]) + assert response["id"] == "http://localhost/users/test/outbox" + assert response["type"] == "OrderedCollection" + assert response["totalItems"] == 1 + assert response["first"] == "http://localhost/users/test/outbox?page=true" + assert response["last"] == "http://localhost/users/test/outbox?min_id=0&page=true" + end + + test "returns ActivityPub JSON of outbox with params", %{conn: conn} do + conn = + conn + |> get(~p"/users/test/outbox?page=true") + + assert response = json_response(conn, 200) + + assert is_list(response["@context"]) + assert response["id"] == "http://localhost/users/test/outbox?page=true" + assert response["type"] == "OrderedCollectionPage" + assert is_binary(response["next"]) + assert is_binary(response["prev"]) + assert response["partOf"] == "http://localhost/users/test/outbox" + assert Enum.any?(response["orderedItems"]) + end + end +end