Skip to content
This repository was archived by the owner on Apr 20, 2019. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/graphiti/resource/interface.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ def find(params = {}, base_scope = nil)
_find(params, base_scope)
end

# @api private
def _find(params = {}, base_scope = nil)
id = params[:data].try(:[], :id) || params.delete(:id)
params[:filter] ||= {}
Expand Down
3 changes: 3 additions & 0 deletions spec/fixtures/employee_directory.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
t.string :first_name
t.string :last_name
t.integer :age
t.string :nickname
t.string :salutation
t.string :professional_titles
end

create_table :positions do |t|
Expand Down
63 changes: 22 additions & 41 deletions spec/integration/rails/persistence_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,32 @@
RSpec.describe 'persistence', type: :controller do
include GraphitiSpecHelpers

# todo ?include=foo
controller(ApplicationController) do
def create
employee = EmployeeResource.build(params)

if employee.save
render jsonapi: employee
else
render json: {
errors: {
employee: employee.errors,
positions: employee.data.positions.map(&:errors),
departments: employee.data.positions.map(&:department).compact.map(&:errors)
}
}
end
end
# defined in spec/supports/rails/employee_controller.rb
controller(ApplicationController, &EMPLOYEE_CONTROLLER_BLOCK)

def update
employee = EmployeeResource.find(params)

if employee.update_attributes
render jsonapi: employee
else
render json: { error: employee.errors }
end
def do_post
if Rails::VERSION::MAJOR == 4
post :create, payload
else
post :create, params: payload
end
end

def destroy
employee = EmployeeResource.find(params)

if employee.destroy
render json: { meta: {} }
else
render json: { error: employee.errors }
end
def do_put(id)
if Rails::VERSION::MAJOR == 4
put :update, payload
else
put :update, params: payload
end
end

def do_post
post :create, params: payload
end
def do_destroy(params)
if Rails::VERSION::MAJOR == 4
delete :destroy, params
else
delete :destroy, params: params
end

def do_put(id)
put :update, params: payload
end

before do
Expand Down Expand Up @@ -162,13 +143,13 @@ def do_put(id)

it 'deletes the object' do
expect {
delete :destroy, params: { id: employee.id }
do_destroy({ id: employee.id })
}.to change { Employee.count }.by(-1)
expect { employee.reload }.to raise_error(ActiveRecord::RecordNotFound)
end

it 'responds with 200, empty meta' do
delete :destroy, params: { id: employee.id }
do_destroy({ id: employee.id })
expect(response.status).to eq(200)
expect(json).to eq({ 'meta' => {} })
end
Expand All @@ -178,7 +159,7 @@ def do_put(id)

it 'responds with correct error payload' do
expect {
delete :destroy, params: { id: employee.id }
do_destroy({ id: employee.id })
}.to_not change { Employee.count }
expect(json['error']).to eq('base' => ['Forced validation error'])
end
Expand Down
13 changes: 0 additions & 13 deletions spec/rails_spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,19 +51,6 @@ def secret_key_base
class ApplicationController < ActionController::Base
include Rails.application.routes.url_helpers
include Graphiti::Rails

prepend_before_action :fix_params!

private

# Honestly not sure why this is needed
# Otherwise params is { params: actual_params }
def fix_params!
if Rails::VERSION::MAJOR == 4
good_params = { action: action_name }.merge(params[:params] || {})
self.params = ActionController::Parameters.new(good_params.with_indifferent_access)
end
end
end

require 'rspec/rails'
37 changes: 37 additions & 0 deletions spec/support/rails/employee_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
EMPLOYEE_CONTROLLER_BLOCK = lambda do |*args|
def create
employee = EmployeeResource.build(params)

if employee.save
render jsonapi: employee
else
render json: {
errors: {
employee: employee.errors,
positions: employee.data.positions.map(&:errors),
departments: employee.data.positions.map(&:department).compact.map(&:errors)
}
}
end
end

def update
employee = EmployeeResource.find(params)

if employee.update_attributes
render jsonapi: employee
else
render json: { error: employee.errors }
end
end

def destroy
employee = EmployeeResource.find(params)

if employee.destroy
render json: { meta: {} }
else
render json: { error: employee.errors }
end
end
end