require "rails_helper"

RSpec.describe "CommentsDestroy", type: :request do
  let(:user) { create(:user) }
  let(:article) { create(:article, user_id: user.id) }

  before do
    sign_in user
  end

  describe "GET /:username/comment/:id_code/delete_confirm" do
    it "renders the confirmation message" do
      comment = create(:comment, user_id: user.id, commentable: article)
      get comment.path + "/delete_confirm"
      expect(response.body).to include("Are you sure you want to delete this comment")
    end
  end

  describe "DELETE /comments/:id" do
    context "when comment has no children" do
      it "destroys the comment" do
        comment = create(:comment, user_id: user.id, commentable: article)
        delete "/comments/#{comment.id}"
        expect(Comment.all.size).to eq(0)
      end
    end

    context "when comment has children" do
      let(:parent_comment) { create(:comment, user_id: user.id, commentable: article) }
      let(:child_comment) do
        create(
          :comment,
          user_id: user.id,
          commentable: article,
          parent_id: parent_comment.id,
        )
      end

      before do
        parent_comment
        child_comment
        delete "/comments/#{parent_comment.id}"
      end

      it "marks the comment as deleted" do
        expect(Comment.first.deleted).to eq(true)
      end

      it "renders [deleted]" do
        get parent_comment.path
        expect(response.body).to include "[deleted]"
      end
    end
  end
end
