# frozen_string_literal: true

require 'rails_helper'

RSpec.describe Webhook do
  let(:webhook) { Fabricate(:webhook) }

  describe 'Validations' do
    it 'requires presence of events' do
      record = described_class.new(events: nil)
      record.valid?

      expect(record).to model_have_error_on_field(:events)
    end

    it 'requires non-empty events value' do
      record = described_class.new(events: [])
      record.valid?

      expect(record).to model_have_error_on_field(:events)
    end

    it 'requires valid events value from EVENTS' do
      record = described_class.new(events: ['account.invalid'])
      record.valid?

      expect(record).to model_have_error_on_field(:events)
    end
  end

  describe 'Normalizations' do
    it 'cleans up events values' do
      record = described_class.new(events: ['account.approved', 'account.created     ', ''])

      expect(record.events).to eq(%w(account.approved account.created))
    end
  end

  describe '#rotate_secret!' do
    it 'changes the secret' do
      previous_value = webhook.secret
      webhook.rotate_secret!
      expect(webhook.secret).to_not be_blank
      expect(webhook.secret).to_not eq previous_value
    end
  end

  describe '#enable!' do
    before do
      webhook.disable!
    end

    it 'enables the webhook' do
      webhook.enable!
      expect(webhook.enabled?).to be true
    end
  end

  describe '#disable!' do
    it 'disables the webhook' do
      webhook.disable!
      expect(webhook.enabled?).to be false
    end
  end
end