129 lines
4.4 KiB
Elixir
129 lines
4.4 KiB
Elixir
defmodule NullaWeb.NoteControllerTest do
|
|
use NullaWeb.ConnCase
|
|
alias Nulla.KeyGen
|
|
alias Nulla.Snowflake
|
|
alias Nulla.Models.Actor
|
|
alias Nulla.Models.Note
|
|
|
|
describe "GET /notes/id" do
|
|
test "returns ActivityPub JSON with note", %{conn: conn} 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(%{
|
|
id: note_id,
|
|
url: "#{actor.url}/#{note_id}",
|
|
content: "Hello World from Nulla!",
|
|
language: "en",
|
|
actor_id: actor.id
|
|
})
|
|
|
|
conn =
|
|
conn
|
|
|> put_req_header("accept", "application/activity+json")
|
|
|> get(~p"/users/#{actor.preferredUsername}/notes/#{note.id}")
|
|
|
|
assert response = json_response(conn, 200)
|
|
|
|
assert is_list(response["@context"])
|
|
assert response["id"] == "http://localhost/users/test/notes/#{note.id}"
|
|
assert response["type"] == "Note"
|
|
assert response["summary"] == nil
|
|
assert response["inReplyTo"] == nil
|
|
assert {:ok, _dt, _offset} = DateTime.from_iso8601(response["published"])
|
|
assert response["url"] == note.url
|
|
assert response["attributedTo"] == "http://localhost/users/test"
|
|
assert is_list(response["to"])
|
|
assert is_list(response["cc"])
|
|
assert response["sensitive"] == false
|
|
assert is_binary(response["content"])
|
|
assert is_map(response["contentMap"])
|
|
assert is_list(response["attachment"])
|
|
end
|
|
|
|
test "renders HTML if Accept header is regular", %{conn: conn} 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(%{
|
|
id: note_id,
|
|
url: "#{actor.url}/#{note_id}",
|
|
content: "Hello World from Nulla!",
|
|
language: "en",
|
|
actor_id: actor.id
|
|
})
|
|
|
|
conn = get(conn, ~p"/users/test/notes/#{note.id}")
|
|
|
|
assert html_response(conn, 200) =~ note.content
|
|
end
|
|
|
|
test "returns 404 if note not found", %{conn: conn} do
|
|
conn = get(conn, ~p"/users/test/notes/nonexistent")
|
|
|
|
assert json_response(conn, 404)["error"] == "Not Found"
|
|
end
|
|
end
|
|
end
|