require "rails_helper"

RSpec.describe AdminUser, type: :model do
  describe "#new" do
    it "requires a phone number" do
      expect {
        described_class.create!(
          email: "admin_test@example.com",
          password: "password123",
        )
      }.to raise_error(ActiveRecord::RecordInvalid)
    end

    it "requires a numerical phone number" do
      expect {
        described_class.create!(
          email: "admin_test@example.com",
          password: "password123",
          phone: "string",
        )
      }.to raise_error(ActiveRecord::RecordInvalid)
    end

    it "requires an email" do
      expect {
        described_class.create!(
          password: "password123",
          phone: "075752137",
        )
      }.to raise_error(ActiveRecord::RecordInvalid)
    end

    it "requires a password" do
      expect {
        described_class.create!(
          email: "admin_test@example.com",
          phone: "075752137",
        )
      }.to raise_error(ActiveRecord::RecordInvalid)
    end

    it "can be created" do
      expect {
        described_class.create!(
          email: "admin_test@example.com",
          password: "password123",
          phone: "075752137",
        )
      }.to change(described_class, :count).by(1)
    end
  end

  describe "paper trail" do
    let(:admin_user) { FactoryBot.create(:admin_user) }

    it "creates a record of changes to a log" do
      expect { admin_user.update!(phone: "09673867853") }.to change(admin_user.versions, :count).by(1)
    end

    it "allows case logs to be restored to a previous version" do
      admin_user.update!(phone: "09673867853")
      expect(admin_user.paper_trail.previous_version.phone).to eq("07563867654")
    end

    it "signing in does not create a new version" do
      expect {
        admin_user.update!(
          last_sign_in_at: Time.zone.now,
          current_sign_in_at: Time.zone.now,
          current_sign_in_ip: "127.0.0.1",
          last_sign_in_ip: "127.0.0.1",
          failed_attempts: 3,
          unlock_token: "dummy",
          locked_at: Time.zone.now,
          reset_password_token: "dummy",
          reset_password_sent_at: Time.zone.now,
          remember_created_at: Time.zone.now,
          sign_in_count: 5,
          updated_at: Time.zone.now,
        )
      }.not_to change(admin_user.versions, :count)
    end
  end
end