require "rails_helper"

# Specs in this file have access to a helper object that includes
# the CommentsHelper. For example:
#
# describe CommentsHelper do
#   describe "string concat" do
#     it "concats two strings with spaces" do
#       expect(helper.concat_strings("this","that")).to eq("this that")
#     end
#   end
# end
RSpec.describe CommentsHelper do
  describe "#user_level_class" do
    def comment_double(**attributes)
      defaults = { as_administrator?: false, as_moderator?: false, user: double(official?: false) }

      double(defaults.merge(attributes))
    end

    it "returns is-admin for comment done as administrator" do
      comment = comment_double(as_administrator?: true)

      expect(helper.user_level_class(comment)).to eq("is-admin")
    end

    it "returns is-moderator for comment done as moderator" do
      comment = comment_double(as_moderator?: true)

      expect(helper.user_level_class(comment)).to eq("is-moderator")
    end

    it "returns level followed by official level if user is official" do
      comment = comment_double(user: double(official?: true, official_level: "Y"))

      expect(helper.user_level_class(comment)).to eq("level-Y")
    end

    it "returns an empty class otherwise" do
      comment = comment_double

      expect(helper.user_level_class(comment)).to eq("")
    end
  end

  describe "#comment_author_class" do
    it "returns is-author if author is the commenting user" do
      author_id = 42
      comment = double(user_id: author_id)

      expect(helper.comment_author_class(comment, author_id)).to eq("is-author")
    end

    it "returns an empty string if commenter is not the author" do
      author_id = 42
      comment = double(user_id: author_id - 1)

      expect(helper.comment_author_class(comment, author_id)).to eq("")
    end
  end
end
