Skip to content

Instantly share code, notes, and snippets.

View stevo's full-sized avatar

Błażej Kosmowski stevo

View GitHub Profile
# Poor specs
# ==========
# Customer relation is irrelevant in this case. Same as each order's subject.
# `match_array` expectation verifies count implicitly, so additional check seems obsolete.
describe MostProfitableOrdersQuery do
describe '.call' do
it 'returns top 50% orders with the biggest total value' do
customer = create(:customer, name: 'Tony stark')
create(:order, customer: customer, subject: 'Iron armor', total_value: 1000)
# Feature specs are used to test validation and authorization details, when those
# should be handled in faster, lower level specs (i.e. model & controller specs)
RSpec.describe 'Properties management', type: :feature do
scenario 'Admin creates a property'
scenario 'Admin attempts to create a property with missing name'
scenario 'Admin attempts to create a property with name which is too short'
scenario 'Admin attempts to create a property with duplicate name'
scenario 'Guest attempts to create a property'
scenario 'Regular user attempts to create a property'
end
@stevo
stevo / omdb_client.rb
Created April 13, 2018 10:20
Client and Wrapper examples
class OMDBClient
HOST_URL = 'www.omdbapi.com'
# http://www.omdbapi.com/
def get_movie(args = {})
uri = URI::HTTP.build(
host: HOST_URL,
query: {
apikey: ENV.fetch('OMDB_API_KEY')
}.merge(args).to_query
expect(result).to match_array(
[
be_a_kind_of(User::Member).and(have_attributes(name: ‘Tony’)),
be_a_kind_of(User::Admin).and(have_attributes(name: ‘Mike’))
]
)
@stevo
stevo / spies_1.rb
Created May 8, 2018 09:13
An opinionated guide to readable RSpec (part 2 of 2)
allow(UserNotifier).to receive(:deletion_notification)
DestroyUser.call(user)
expect(UserNotifier).to have_received(:deletion_notification).with(user, delay: 5.minutes)
@stevo
stevo / spies_2.rb
Created May 8, 2018 09:16
An opinionated guide to readable RSpec (part 2 of 2)
allow(OMDBClient).to receive(:get_movie) {
{
"Title" => "The Rock",
"Year" => "1996",
"Rated" => "R",
"Released" => "07 Jun 1996",
"Runtime" => "136 min",
"Genre" => "Action, Adventure, Thriller"
}
}
@stevo
stevo / spies_3.rb
Created May 8, 2018 09:21
An opinionated guide to readable RSpec (part 2 of 2)
expect(OMDBClient).to receive(:get_movie).with(t: 'The Rock') {
{
"Title" => "The Rock",
"Year" => "1996",
"Rated" => "R",
"Released" => "07 Jun 1996",
"Runtime" => "136 min",
"Genre" => "Action, Adventure, Thriller"
}
}
@stevo
stevo / scope_1.rb
Created May 8, 2018 09:22
An opinionated guide to readable RSpec (part 2 of 2)
it 'returns accounts expired in last week' do
create(:account, expiry_date: 1.day.from_now)
create(:account, expiry_date: Date.current)
account_1 = create(:account, expiry_date: 1.day.ago)
account_2 = create(:account, expiry_date: 7.days.ago)
create(:account, expiry_date: 8.days.ago)
result = RecentlyExpiredAccountsQuery.call
expect(result).to match_array([account_1, account_2])
@stevo
stevo / scope_2.rb
Created May 8, 2018 09:23
An opinionated guide to readable RSpec (part 2 of 2)
it 'returns accounts expired in last week' do
account_1 = create(:account, expiry_date: 1.day.ago)
account_2 = create(:account, expiry_date: 7.days.ago)
result = RecentlyExpiredAccountsQuery.call
expect(result).to match_array([account_1, account_2])
end
it 'does not return accounts expiring in the future' do
@stevo
stevo / fact_1.rb
Created May 8, 2018 09:24
An opinionated guide to readable RSpec (part 2 of 2)
it 'returns users with member privileges only' do
member_privilege = create(:privilege, :member)
admin_privilege = create(:privilege, :member)
member = create(:user)
admin = create(:user)
member_and_admin = create(:user)
create(:access_rule, user: member, privilege: member_privilege)
create(:access_rule, user: admin, privilege: admin_privilege)
create(:access_rule, user: member_and_admin, privilege: member_privilege)
create(:access_rule, user: member_and_admin, privilege: admin_privilege)