Handle client submitted activitypub like activity
This commit is contained in:
		
							parent
							
								
									1eb7318831
								
							
						
					
					
						commit
						36711e1c83
					
				
					 2 changed files with 34 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -204,6 +204,15 @@ def handle_user_activity(user, %{"type" => "Delete"} = params) do
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def handle_user_activity(user, %{"type" => "Like"} = params) do
 | 
			
		||||
    with %Object{} = object <- Object.normalize(params["object"]),
 | 
			
		||||
         {:ok, activity, _object} <- ActivityPub.like(user, object) do
 | 
			
		||||
      {:ok, activity}
 | 
			
		||||
    else
 | 
			
		||||
      _ -> {:error, "Can't like object"}
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def handle_user_activity(_, _) do
 | 
			
		||||
    {:error, "Unhandled activity type"}
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -292,6 +292,31 @@ test "it rejects delete activity of object from other actor", %{conn: conn} do
 | 
			
		|||
 | 
			
		||||
      assert json_response(conn, 400)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test "it increases like count when receiving a like action", %{conn: conn} do
 | 
			
		||||
      note_activity = insert(:note_activity)
 | 
			
		||||
      user = User.get_cached_by_ap_id(note_activity.data["actor"])
 | 
			
		||||
 | 
			
		||||
      data = %{
 | 
			
		||||
        type: "Like",
 | 
			
		||||
        object: %{
 | 
			
		||||
          id: note_activity.data["object"]["id"]
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      conn =
 | 
			
		||||
        conn
 | 
			
		||||
        |> assign(:user, user)
 | 
			
		||||
        |> put_req_header("content-type", "application/activity+json")
 | 
			
		||||
        |> post("/users/#{user.nickname}/outbox", data)
 | 
			
		||||
 | 
			
		||||
      result = json_response(conn, 201)
 | 
			
		||||
      assert Activity.get_by_ap_id(result["id"])
 | 
			
		||||
 | 
			
		||||
      object = Object.get_by_ap_id(note_activity.data["object"]["id"])
 | 
			
		||||
      assert object
 | 
			
		||||
      assert object.data["like_count"] == 1
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "/users/:nickname/followers" do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue