Skip to content
Open
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
21 changes: 21 additions & 0 deletions app/controllers/api/v2/users_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal: true

class Api::V2::UsersController < APIApplicationController
before_action :set_user, only: %i[show update destroy]

def show
render json: user_response, status: :ok
end

private

# Override from APIApplicationController in prep for v2
def user_response
data = { data: @user.reload }
data = data.to_json(
methods: %i[selected_campaigns selected_causes completed_campaigns completed_actions
rejected_actions favourited_actions completed_learning_resources
active_notifications organisation]
)
end
end
4 changes: 4 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ def selected_campaigns
campaigns.ids
end

def selected_causes
causes.ids
end

def completed_campaigns
user_campaigns.where(progress: 100).pluck(:campaign_id)
end
Expand Down
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
namespace :api do
namespace :v2 do
# User specific routes
get '/user/me', to: 'users#show'
get '/user/actions', to: 'user_actions#index'
get '/user/actions/:id', to: 'user_actions#index'
get '/user/campaigns', to: 'user_campaigns#index'
Expand Down
15 changes: 15 additions & 0 deletions spec/models/user_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,19 @@
end
end
end

describe "methods" do
let(:user) { create(:user) }
let(:cause) { create(:cause) }

before do
user.causes << cause
end

describe "selected_causes" do
it "returns back the causes that the user has joined" do
expect(user.selected_causes).to eq([cause.id])
end
end
end
end
35 changes: 35 additions & 0 deletions spec/requests/api/v2/user_request_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
require 'swagger_helper'

RSpec.describe Api::V2::UsersController, type: :request do
let(:user) { create(:user) }
let!(:cause) { create(:cause) }
let!(:cause1) { create(:cause) }
let!(:cause_ids) { [cause.id, cause1.id] }
user_cause_schema = UserCause.column_names.reduce({}) { |res, column_name|
res[column_name.to_sym] = {type: Cause.column_for_attribute(column_name).type}
res
}

path '/api/v2/user/me' do
get "Returns the user object with a bunch of relevant attributes. Will need user token header" do
tags 'API::V2(latest) -> Users'
produces 'application/json'
let(:'token') { user.token }

response '200', 'Causes joined' do
schema type: :object,
properties: user_cause_schema
parameter name: 'token', :in => :header, :type => :string
parameter name: 'cause_ids', :in => :query, :type => :string

before do |example|
submit_request(example.metadata)
end

it 'returns a valid 200 response' do |example|
assert_response_matches_metadata(example.metadata)
end
end
end
end
end
Loading