Skip to content

Instantly share code, notes, and snippets.

@galulex
Created September 13, 2023 06:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save galulex/cc5ea9c96447a649aa83a88ab0fad82c to your computer and use it in GitHub Desktop.
Save galulex/cc5ea9c96447a649aa83a88ab0fad82c to your computer and use it in GitHub Desktop.
Rspec/Cabybara samples
RSpec.feature 'Trip', type: :feature, js: true do
let!(:user) { create(:user) }
let!(:work) { FavoriteAddress.create(user: user, name: 'Work', location: '49.426269,32.05418899999995', address: 'Active Bridge') }
let!(:home) { FavoriteAddress.create(user: user, name: 'Home', location: '49.44546829999999,32.071774000000005', address: 'Haharina, 55') }
let!(:card) { create(:card, user: user) }
let!(:car) { create(:car) }
let!(:driver) { create(:driver, car: car) }
let!(:price) { Price.delete_all && Price.create }
let!(:prev_trip) { user.trips.create(status: 'finished') }
let(:trip) { Trip.last }
before do
Redis.current.set("car_#{car.id}", '49.4412378,32.0650127')
Capybara.default_host = 'http://app.lvh.me'
visit('http://app.lvh.me:9887')
Capybara.evaluate_script "localStorage.setItem('token', '#{user.auth_token}');"
Capybara.evaluate_script "localStorage.setItem('referral', '#{user.referral_code}');"
Capybara.evaluate_script "localStorage.setItem('email', '#{user.email}');"
Capybara.evaluate_script "localStorage.setItem('phone', '#{user.phone_number}');"
visit('http://app.lvh.me:9887')
end
it 'orders taxi' do
wait 3 do
has_text? 'Rate trip'
end
first('textarea').set('Nice!')
find_button('OK').trigger(:click)
wait 3 do
has_text? 'GO'
end
all('input')[0].trigger(:focus)
all('input')[0].set('')
wait 3 do
all('li.prediction', visible: false)[1].trigger(:focus)
end
all('input')[1].trigger(:focus)
all('input')[1].set('')
all('li.prediction', visible: false)[2].trigger(:focus)
wait 3 do
find_button('GO 56').trigger(:click)
end
wait 3 do
has_text? 'Cancel'
end
Events::Trips::Accept.(trip_id: trip.id, driver_id: driver.id, car_id: car.id)
sleep 1
Events::Trips::Cancel.(trip_id: trip.id, by_driver: true)
wait 3 do
find_button('❌').trigger(:click)
end
all('input')[0].trigger(:focus)
all('input')[0].set('')
wait 3 do
all('li.prediction', visible: false)[1].trigger(:focus)
end
all('input')[1].trigger(:focus)
all('input')[1].set('')
all('li.prediction', visible: false)[2].trigger(:focus)
wait 3 do
find_button('GO 56').trigger(:click)
end
wait 3 do
has_text? 'Cancel'
end
Events::Trips::Accept.(trip_id: trip.id, driver_id: driver.id, car_id: car.id)
wait 3 do
has_no_text? 'Edit'
end
Events::Trips::WaitingClient.(trip_id: trip.id)
wait 3 do
has_text? 'Edit'
end
expect(page).to have_content('56')
Events::Trips::Start.(trip_id: trip.id)
wait 3 do
has_text? 'Edit'
end
find_button('Edit').trigger(:click)
wait 3 do
find('button.add-address').trigger(:click)
end
all('input')[3].trigger(:focus)
all('input')[3].set('')
all('li.prediction', visible: false)[1].trigger(:focus)
wait 3 do
find_button('GO 56').trigger(:click)
end
wait 3 do
has_text? 'Edit'
end
expect(page).to have_content(trip.cost)
Events::Trips::Finish.(trip_id: trip.id)
wait 3 do
has_text? 'Rate trip'
end
first('textarea').set('Nice!')
find_button('OK').trigger(:click)
wait 3 do
has_text? 'GO'
end
end
end
require "rails_helper"
describe ::Argyle::DocumentsImporterService, type: :service do
subject(:service) { described_class.new(argyle_account.id) }
include_context "team context"
let(:argyle_documents) do
instance_double(::Net::HTTPResponse, body: File.read(Rails.root.join("spec/fixtures/argyle/documents.json")))
end
let!(:paystub) { create(:document_group, title: "Paystub") }
let(:uri) do
instance_double(::URI::HTTP, open: ::Tempfile.new("tmp"), hostname: nil, port: nil, path: "")
end
before do
allow(::Net::HTTP::Get).to receive(:new) { instance_double(::Net::HTTP::Get, basic_auth: nil) }
allow(::Net::HTTP).to receive(:start) { argyle_documents }
allow(::URI).to receive(:parse) { uri }
create(:document_group)
end
describe "#perform" do
let!(:argyle_account) { create(:argyle_account, user: loan_file.borrower) }
it "creates argyle documents" do
expect { service.perform }.to change { loan_file.reload.argyle_documents.count }.to(2)
end
it "creates maxwell documents" do
expect { service.perform }.to change { loan_file.reload.documents.count }.to(2)
end
it "sets argyle account status to synced" do
expect { service.perform }.to change { argyle_account.reload.status }.to("synced")
end
it "logs success" do
expect { service.perform }.to have_logged_event(
ARGYLE_LOGGER,
"DOCUMENTS_IMPORT_COMPLETED",
loan_file_id: loan_file.id,
account_id: argyle_account.id,
)
end
context "when unsuccesfull import" do
before do
allow(::Argyle::DocumentsFetcherService).to receive(:new).and_raise("error")
end
it "sets argyle account status to error" do
expect { service.perform }.to change { argyle_account.reload.status }.to("error")
end
it "logs error" do
expect { service.perform }.to have_logged_event(
ARGYLE_LOGGER,
"DOCUMENTS_IMPORT_ERROR",
loan_file_id: loan_file.id,
account_id: argyle_account.id,
)
end
end
context "when task is missing" do
before do
paystub.destroy
end
it "creates argyle documents" do
expect { service.perform }.to change { loan_file.reload.argyle_documents.count }.to(2)
end
it "creates only one maxwell document" do
expect { service.perform }.to change { loan_file.reload.documents.count }.to(1)
end
it "sets argyle account status to synced" do
expect { service.perform }.to change { argyle_account.reload.status }.to("synced")
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment