# frozen_string_literal: true

RSpec.describe CurrentUserSerializer do
  fab!(:current_user) { Fabricate(:user) }

  let(:serializer) do
    described_class.new(current_user, scope: Guardian.new(current_user), root: false)
  end

  before do
    SiteSetting.chat_enabled = true
    SiteSetting.chat_allowed_groups = Group::AUTO_GROUPS[:everyone]
    current_user.user_option.update(chat_enabled: true)
  end

  describe "#chat_separate_sidebar_mode" do
    it "is present" do
      expect(serializer.as_json[:user_option][:chat_separate_sidebar_mode]).to eq("default")
    end
  end

  describe "#chat_drafts" do
    context "when user can't chat" do
      before { SiteSetting.chat_allowed_groups = Group::AUTO_GROUPS[:staff] }

      it "is not present" do
        expect(serializer.as_json[:chat_drafts]).to be_blank
      end
    end

    it "is ordered by most recent drafts" do
      Fabricate(:chat_draft, user: current_user, value: "second draft")
      Fabricate(:chat_draft, user: current_user, value: "first draft")

      values =
        serializer.as_json[:chat_drafts].map { |draft| MultiJson.load(draft[:data])["value"] }
      expect(values).to eq(["first draft", "second draft"])
    end

    it "limits the numbers of drafts" do
      21.times { Fabricate(:chat_draft, user: current_user) }

      expect(serializer.as_json[:chat_drafts].length).to eq(20)
    end
  end
end