diff --git a/bin/codex_style_guard b/bin/codex_style_guard index 276ec0c9b..a47be485e 100755 --- a/bin/codex_style_guard +++ b/bin/codex_style_guard @@ -1,2 +1,3 @@ + #!/usr/bin/env bash bundle exec rubocop --fail-level F diff --git a/spec/channels/application_cable/connection_spec.rb b/spec/channels/application_cable/connection_spec.rb new file mode 100644 index 000000000..43d8e2fc1 --- /dev/null +++ b/spec/channels/application_cable/connection_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ApplicationCable::Connection, type: :channel do + let(:user) { create(:better_together_user) } + + it 'successfully connects for authenticated user' do + env = { 'warden' => double('warden', user: user) } + connect '/cable', env: env + expect(connection.current_person).to eq(user.person) + end + + it 'rejects connection for unauthenticated user' do + env = { 'warden' => double('warden', user: nil) } + expect { connect '/cable', env: env }.to raise_error(ActionCable::Connection::Authorization::UnauthorizedError) + end +end diff --git a/spec/models/better_together/jwt_denylist_spec.rb b/spec/models/better_together/jwt_denylist_spec.rb index c1e4fea92..e8d9685bc 100644 --- a/spec/models/better_together/jwt_denylist_spec.rb +++ b/spec/models/better_together/jwt_denylist_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' module BetterTogether - RSpec.describe JwtDenylist do - it 'exists' do - expect(described_class).to be # rubocop:todo RSpec/Be + RSpec.describe JwtDenylist, type: :model do + it 'uses the expected table name' do + expect(described_class.table_name).to eq('better_together_jwt_denylists') end end end diff --git a/spec/models/better_together/phone_number_spec.rb b/spec/models/better_together/phone_number_spec.rb index 1808ff967..13f5ff1b9 100644 --- a/spec/models/better_together/phone_number_spec.rb +++ b/spec/models/better_together/phone_number_spec.rb @@ -3,9 +3,18 @@ require 'rails_helper' module BetterTogether - RSpec.describe PhoneNumber do - it 'exists' do - expect(described_class).to be # rubocop:todo RSpec/Be + RSpec.describe PhoneNumber, type: :model do + let(:contact_detail) { create(:better_together_contact_detail, contactable: create(:better_together_person)) } + + it 'is invalid without a number' do + phone_number = build(:better_together_phone_number, contact_detail: contact_detail, number: nil) + expect(phone_number).not_to be_valid + expect(phone_number.errors[:number]).to include("can't be blank") + end + + it 'is valid with a number' do + phone_number = build(:better_together_phone_number, contact_detail: contact_detail, number: '123-456') + expect(phone_number).to be_valid end end end diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb index 3cf31fd4e..3d2c99b4f 100644 --- a/spec/support/capybara.rb +++ b/spec/support/capybara.rb @@ -21,10 +21,14 @@ # Generate a unique temporary directory for each session to avoid conflicts options.add_argument("--user-data-dir=#{Dir.mktmpdir}") + service = Selenium::WebDriver::Service.chrome( + path: ENV.fetch('CHROMEDRIVER_PATH', '/usr/bin/chromedriver') + ) Capybara::Selenium::Driver.new( app, browser: :chrome, - options: options + options: options, + service: service ) end