Forked from
PortalMEC / portalmec
475 commits behind the upstream repository.
-
Marcela Ribeiro de Oliveira authoredMarcela Ribeiro de Oliveira authored
users_spec.rb 9.99 KiB
# Copyright (C) 2015 Centro de Computacao Cientifica e Software Livre
# Departamento de Informatica - Universidade Federal do Parana
#
# This file is part of portalmec.
#
# portalmec is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# portalmec is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with portalmec. If not, see <http://www.gnu.org/licenses/>.
require 'acceptance_helpers'
require 'shared/contexts'
resource 'Users' do
header 'Accept', 'application/json'
header 'Content-Type', 'application/json'
explanation "User represents the teacher and students in the system."
before { 12.times { create(:user) } }
let(:users) { User.all }
let(:subject) { Subject.all }
let(:role) { Role.all }
get '/v1/users' do
parameter :limit, 'Limit of users'
parameter :offset, 'Offset of users'
let(:limit) { 12 }
let(:offset) { 0 }
example_request 'Get a list of users' do
# active model serializer may render model associations in different order for collections (array of items), so we're verifing only returned ids
expect(JSON.parse(response_body).map { |o| o['id'] }.sort).to eq(User.limit(limit).offset(offset).pluck(:id).sort)
expect(status).to eq(200)
end
end
get '/v1/users/:id' do
let(:id) { users.first.id }
example 'Get an user' do
do_request
expect(path).to eq("/v1/users/#{id}") # `:id` is replaced with the value of `id`
expect(response_body).to eq(Helper.serialize(User.find(id)))
expect(status).to eq(200)
end
end
get '/v1/users/:id/versions' do
include_context "authenticate_user"
before do
@user = create(:user)
@user.update(name: Faker::Name.name, email: Faker::Internet.email)
end
let(:id) { @user.id }
example 'Getting all user versions' do
do_request
expect(path).to eq("/v1/users/#{id}/versions") # `:id` is replaced with the value of `id`
expect(response_body).to eq(Helper.serialize(@user.versions))
expect(status).to eq(200)
end
end
post '/v1/auth' do
parameter :name, 'The name of the user'
parameter :email, 'The email of user'
parameter :description, 'The user description'
parameter :password, 'The password of user'
parameter :password_confirmation, 'The password confirmation of user'
parameter :terms_of_service, 'Checks if user agreed with terms of service'
parameter :avatar, 'The user avatar'
let(:name) { Faker::Name.name }
let(:email) { Faker::Internet.email }
let(:description) { Faker::Lorem.sentence }
let(:password) { '12345678' }
let(:password_confirmation) { '12345678' }
let(:terms_of_service) { true }
let(:avatar) {""}
let(:raw_post) {params.to_json}
example 'Creating an user' do
do_request
expect(status).to eq(200)
end
end
put '/v1/users/:id' do
include_context "authenticate_user"
parameter :id, 'The user id'
parameter :name, 'The name of the user'
parameter :email, 'The email of user'
parameter :description, 'The user description'
parameter :education, 'The user education'
parameter :password, 'The password of user'
parameter :password_confirmation, 'The password confirmation of user'
parameter :terms_of_service, 'Checks if user agreed with terms of service'
parameter :avatar, 'The user avatar'
parameter :roles_ids, 'The user roles', scope: :user
parameter :subjects, 'Array with subjects ids', scope: :user
let(:id) {@user.id}
let(:name) { Faker::Name.name }
let(:email) { Faker::Internet.email }
let(:description) { Faker::Lorem.sentence }
let(:education) { Faker::Lorem.sentence }
let(:password) { '12345678' }
let(:password_confirmation) { '12345678' }
let(:terms_of_service) { true }
let(:avatar) {""}
# TODO role ids con't be changed if user isn't admin, send []
# when it's a admin send [role.first.id]
let(:roles_ids) { [] }
let(:subjects) { [subject.first.id] }
let(:raw_post) {params.to_json}
example 'Updating an user' do
do_request
expect(status).to eq(200)
end
end
post '/v1/auth/sign_in' do
include_context "authenticate_user"
parameter :email, 'The email of user'
parameter :password, 'The password of user'
let(:email) { @user.email }
let(:password) { @user.password }
let(:raw_post) {params.to_json}
example 'Signing in' do
do_request
expect(status).to eq(200)
end
end
get '/v1/users/:id/following/:type' do
include_context "authenticate_user"
before do
@collection = create(:collection, privacy: "public")
@follow = create(:follow, user: @user, followable: @collection)
end
let(:id) { @user.id }
let(:type) { "Collection" }
example 'Showing what the user is following' do
do_request
expect(status).to eq(200)
end
end
get '/v1/users/:id/followers' do
include_context "authenticate_user"
before do
@user1 = create(:user)
@follow = create(:follow, user: @user1, followable: @user)
end
let(:id) { @user.id }
example 'Showing an user followers' do
do_request
expect(status).to eq(200)
end
end
get '/v1/users/:id/reviews/received' do
include_context "authenticate_user"
before do
@learning_object = create(:learning_object, publisher: @user)
create(:review, reviewable: @learning_object)
end
let(:id) { @user.id }
example 'Showing an user’s received reviews' do
do_request
expect(status).to eq(200)
end
end
get '/v1/users/:id/reviews/own' do
include_context "authenticate_user"
before do
create(:review, user: @user)
end
let(:id) { @user.id }
example 'Showing a user’s own reviews' do
do_request
expect(status).to eq(200)
end
end
get '/v1/users/:id/collections/liked' do
include_context "authenticate_user"
before do
create(:like, user: @user, likeable: create(:collection))
end
let(:id) { @user.id }
example 'Showing an user’s liked collections' do
do_request
expect(status).to eq(200)
end
end
get '/v1/users/:id/learning_objects/liked' do
include_context "authenticate_user"
before do
create(:like, user: @user)
end
let(:id) { @user.id }
example 'Showing an user’s liked learning objects' do
do_request
expect(status).to eq(200)
end
end
get '/v1/users/:id/learning_objects' do
include_context "authenticate_user"
before do
create(:learning_object, publisher: @user)
end
let(:id) { @user.id }
example 'Showing an user’s learning objects' do
do_request
expect(status).to eq(200)
end
end
get '/v1/users/:id/collections' do
include_context "authenticate_user"
before do
create(:collection, owner: @user)
end
let(:id) { @user.id }
example 'Showing an user’s collections' do
do_request
expect(status).to eq(200)
end
end
get '/v1/users/:id/drafts' do
include_context "authenticate_user"
before do
create(:learning_object, publisher: @user, state: LearningObject.states[:draft])
end
let(:id) { @user.id }
example 'Showing an user’s drafts' do
do_request
expect(status).to eq(200)
end
end
delete '/v1/auth' do
include_context "authenticate_user"
example 'Destroying an user' do
do_request
expect(status).to eq(200)
end
end
post '/v1/users' do
include_context "authenticate_user_admin"
parameter :name, 'The name of the user', scope: :user
parameter :email, 'The email of user', scope: :user
parameter :description, 'The user description', scope: :user
parameter :password, 'The password of user', scope: :user
parameter :password_confirmation, 'The password confirmation of user', scope: :user
parameter :terms_of_service, 'Checks if user agreed with terms of service', scope: :user
parameter :avatar, 'The user avatar', scope: :user
let(:name) { Faker::Name.name }
let(:email) { Faker::Internet.email }
let(:description) { Faker::Lorem.sentence }
let(:password) { '12345678' }
let(:password_confirmation) { '12345678' }
let(:terms_of_service) { true }
let(:avatar) {""}
let(:raw_post) {params.to_json}
example 'Creating an user by admin' do
do_request
expect(status).to eq(201)
end
end
delete '/v1/users/:id' do
include_context "authenticate_user_admin"
parameter :id, 'The id of the user to be destroyed'
let(:id) {@user.id}
before do
@user = create(:user)
end
example 'Destroying an user by admin' do
do_request
expect(status).to eq(200)
end
end
get '/v1/users/upload_requests' do
include_context "authenticate_user_supervisor"
example 'Get all user that want be submitters' do
do_request
expect(status).to eq(200)
end
end
post '/v1/users/submitter_request' do
include_context "authenticate_user"
example 'Request to be a submitter' do
do_request
expect(status).to eq(200)
end
end
post '/v1/users/:id/approve_request' do
include_context "authenticate_user_supervisor"
parameter :id, 'The id of the user who asked to be a submitter'
parameter :approves, 'If the user can be a submitter or not'
let(:id) {@user.id}
let(:approves) { true }
let(:raw_post) {params.to_json}
before do
@user = create(:user, )
@user.update(submitter_request: User.submitter_requests[:requested])
end
example 'Approve a submitter request' do
do_request
expect(status).to eq(200)
end
end
end