Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
getfitter-core / spec / models / core / booking_spec.rb
Size: Mime:
require 'rails_helper'

RSpec.describe Core::Booking, type: :model do
  it 'has a valid factory' do
    expect(create(:core_booking)).to be_valid
  end

  it 'has an associated event' do
    booking = create(:core_booking)

    expect(booking.event).to be_an_instance_of(Core::Event)
  end

  it 'is invalid with a missing event' do
    expect(build(:core_booking, event: nil)).to be_invalid
  end

  it 'has an associated user' do
    booking = create(:core_booking)

    expect(booking.user).to be_an_instance_of(Core::User)
  end

  it 'is invalid with a missing user' do
    expect(build(:core_booking, user: nil)).to be_invalid
  end

  it 'has a list of possible states' do
    expect(described_class.states).to eq %w(open completed cancelled)
  end

  it 'can have a state of completed' do
    expect(build(:core_booking, state: 'completed')).to be_valid
  end

  it 'refuses invalid states' do
    expect(build(:core_booking, state: 'something')).to be_invalid
  end

  it 'has a list of possible payment types' do
    expect(described_class.payment_types).to eq %w(unknown none card pass trial)
  end

  it 'refuses invalid payment types' do
    expect(build(:core_booking, payment_type: 'in_kind')).to be_invalid
  end

  it 'can filter by open bookings' do
    valid_booking = create(:core_booking, state: :open)
    create(:core_booking, state: :completed)

    expect(described_class.open).to eq([valid_booking])
  end

  it 'can filter by completed bookings' do
    valid_booking = create(:core_booking, state: :completed)
    create(:core_booking, state: :open)

    expect(described_class.completed).to eq([valid_booking])
  end

  it 'can filter by cancelled bookings' do
    valid_booking = create(:core_booking, state: :cancelled)
    create(:core_booking, state: :open)

    expect(described_class.cancelled).to eq([valid_booking])
  end

  it 'can only exist once for a combined event and user' do
    event = create(:core_event)
    user = create(:core_user)

    create(:core_booking, event: event, user: user)

    expect do
      create(:core_booking, event: event, user: user)
    end.to raise_exception ActiveRecord::RecordInvalid
  end
end