Files
growstuff/spec/requests/api/v1/members_request_spec.rb
T
Brenda Wallace 73f62d4983 Add API resources for photos, plantings, and seeds; update application configuration
- Introduced `PhotoResource`, `PlantingResource`, and `SeedResource` to manage respective models.
- Updated application configuration to include API base URL.
- Modified production and test environments to set API base URL dynamically.
- Removed outdated JSONAPI resources initializers and patches.
- Refactored routes to use resourceful routing for API endpoints.
- Updated request specs to reflect changes in API responses and relationships.
- Added helper methods for generating related links in request specs.
2026-10-24 18:19:11 +13:00

81 lines
2.8 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Members' do
subject { JSON.parse response.body }
let(:headers) { { 'Accept' => 'application/vnd.api+json' } }
let!(:member) { create(:member) }
let(:member_encoded_as_json_api) do
{ "id" => member.id.to_s,
"type" => "members",
"attributes" => attributes,
"relationships" => {
"gardens" => gardens_as_json_api,
"harvests" => harvests_as_json_api,
"photos" => photos_as_json_api,
"plantings" => plantings_as_json_api,
"seeds" => seeds_as_json_api,
"jobs" => jobs_as_json_api
} }
end
let(:harvests_as_json_api) { related_link("harvests?filter[owner_id]=#{member.id}") }
let(:photos_as_json_api) { related_link("photos?filter[owner_id]=#{member.id}") }
let(:seeds_as_json_api) { related_link("seeds?filter[owner_id]=#{member.id}") }
let(:jobs_as_json_api) { related_link("jobs?filter[owner_id]=#{member.id}") }
let(:plantings_as_json_api) { related_link("plantings?filter[owner_id]=#{member.id}") }
let(:gardens_as_json_api) { related_link("gardens?filter[owner_id]=#{member.id}") }
let(:attributes) do
{
"login-name" => member.login_name,
"slug" => member.slug
}
end
describe '#index' do
before { get '/api/v1/members', params: {}, headers: }
it { expect(subject['data']).to include(member_encoded_as_json_api) }
end
describe '#show' do
before { get "/api/v1/members/#{member.id}", params: {}, headers: }
it { expect(subject['data']['relationships']).to include("gardens" => gardens_as_json_api) }
it { expect(subject['data']['relationships']).to include("plantings" => plantings_as_json_api) }
it { expect(subject['data']['relationships']).to include("seeds" => seeds_as_json_api) }
it { expect(subject['data']['relationships']).to include("harvests" => harvests_as_json_api) }
it { expect(subject['data']['relationships']).to include("photos" => photos_as_json_api) }
it { expect(subject['data']['relationships']).to include("jobs" => jobs_as_json_api) }
it { expect(subject['data']).to eq(member_encoded_as_json_api) }
end
it '#create' do
expect do
post '/api/v1/members', params: { 'member' => { 'login_name' => 'can i make this' } }, headers:
end.to raise_error ActionController::RoutingError
end
it '#update' do
expect do
post "/api/v1/members/#{member.id}", params: {
'member' => { 'login_name' => 'can i modify this' }
},
headers:
end.to raise_error ActionController::RoutingError
end
it '#delete' do
expect do
delete "/api/v1/members/#{member.id}", params: {}, headers:
end.to raise_error ActionController::RoutingError
end
end