diff --git a/app/controllers/matches_controller.rb b/app/controllers/matches_controller.rb new file mode 100644 index 0000000..a00c1c7 --- /dev/null +++ b/app/controllers/matches_controller.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class MatchesController < ApplicationController + # GET /matches/1 + def show + render json: Match.find(params[:id]), include: ['scores.score', 'scores.team'], status: status + end + + private + + def match_params + ActiveModelSerializers::Deserialization.jsonapi_parse(params, only: [:state]) + end +end diff --git a/config/routes.rb b/config/routes.rb index bca9222..b10df31 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,4 +2,6 @@ Rails.application.routes.draw do mount_devise_token_auth_for 'User', at: 'users' + + resources :matches, only: %i[show] end diff --git a/spec/controllers/matches_controller_spec.rb b/spec/controllers/matches_controller_spec.rb new file mode 100644 index 0000000..47fc9fb --- /dev/null +++ b/spec/controllers/matches_controller_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe MatchesController, type: :controller do + let(:valid_attributes) do + skip('Add a hash of attributes valid for your model') + end + + let(:invalid_attributes) do + skip('Add a hash of attributes invalid for your model') + end + + let(:valid_session) { {} } + + before do + @match = create(:match) + @match.scores = create_pair(:score) + end + + describe 'GET #show' do + it 'should return success' do + get :show, params: { id: @match.to_param } + expect(response).to be_successful + expect(response.content_type).to eq('application/json') + end + + it 'should return the correct state' do + get :show, params: { id: @match.to_param } + body = ActiveModelSerializers::Deserialization.jsonapi_parse(JSON.parse(response.body)) + expect(body[:state]).to be(@match.state) + expect(body[:score_ids]).to eq(@match.scores.map { |score| score.id.to_s }) + end + end +end diff --git a/spec/routing/matches_routing_spec.rb b/spec/routing/matches_routing_spec.rb new file mode 100644 index 0000000..f0f4806 --- /dev/null +++ b/spec/routing/matches_routing_spec.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe MatchesController, type: :routing do + describe 'routing' do + it 'routes to #show' do + expect(get: '/matches/1').to route_to('matches#show', id: '1') + end + end +end