Skip to content
Merged
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
2 changes: 1 addition & 1 deletion app/policies/group_policy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def leave?
end

def invite?
user.is_admin? or user.owns(record) or member? && [Group::MEMBERSHIP[:open], Group::MEMBERSHIP[:invitation]].include?(record.membership)
user.is_admin? || user.owns(record) || (member? && [Group::MEMBERSHIP[:open], Group::MEMBERSHIP[:invitation]].include?(record.membership))
end

def reject?
Expand Down
47 changes: 19 additions & 28 deletions spec/controllers/accounts/passwords_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,47 +1,38 @@
require "spec_helper"

describe Accounts::PasswordsController do
before(:each) do
@user = users(:user)
end
let(:user) { FactoryBot.create(:user) }

it "can get password reset form" do
get :new
expect(response).to be_success
end
describe "forgot password" do
it "can get password reset form" do
get :new
expect(response).to be_success
end

it "can send password reset email" do
post :create, user: {email: @user.email}
it "can send password reset email" do
post :create, user: {email: user.email}

expect(mail = ActionMailer::Base.deliveries.last).to_not be_nil
expect(mail = ActionMailer::Base.deliveries.last).to_not be_nil

host = ActionMailer::Base.default_url_options[:host]
expect(mail).to have_link("reset_password_token")
host = ActionMailer::Base.default_url_options[:host]
expect(mail).to have_link("reset_password_token")
end
end

context "using password reset token" do
before(:all) do
@resetuser = FactoryBot.create(:user)
end
after(:all) do
@resetuser.destroy
end
before(:each) do
User.send_reset_password_instructions email: @resetuser.email
@resetuser.reload
expect(mail = ActionMailer::Base.deliveries.last).to_not be_nil
expect(mail.body.encoded =~ %r{<a href="https://[[:alnum:].:/]+/password/edit\?reset_password_token=([^"]+)">}).to_not be_nil
@reset_token = $1
describe "using password reset token" do
before do
@token = user.send_reset_password_instructions
end

it "can edit password" do
get :edit, reset_password_token: @reset_token
get :edit, reset_password_token: @token
expect(response).to be_success
end

it "can update password" do
post :update, user: {reset_password_token: @reset_token, password: "newpassword", password_confirmation: "newpassword"}
expect(@resetuser.reload.valid_password?("newpassword")).to be true
post :update, user: {reset_password_token: @token, password: "newpassword", password_confirmation: "newpassword"}

expect(user.reload.valid_password?("newpassword")).to be true
end
end
end
20 changes: 8 additions & 12 deletions spec/controllers/contests_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
require "spec_helper"

describe ContestsController do
before(:all) do
@problem_set = FactoryBot.create(:problem_set)
@contest = FactoryBot.create(:contest, problem_set: @problem_set)
end
after(:all) do
@contest.destroy
@problem_set.destroy
end
let(:problem_set) { FactoryBot.create(:problem_set) }
let(:contest) { FactoryBot.create(:contest, problem_set: problem_set) }

context "as admin" do
before(:each) do
sign_in users(:admin)
before do
sign_in FactoryBot.create(:admin)
end

can_index :contests
can_index :contests, params: {filter: "my"}

Expand All @@ -22,9 +17,10 @@
end

context "as an organiser" do
before(:each) do
sign_in users(:organiser)
before do
sign_in FactoryBot.create(:organiser)
end

can_index :contests, params: {filter: "my"}
end
end
21 changes: 11 additions & 10 deletions spec/controllers/evaluators_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
require "spec_helper"

describe EvaluatorsController do
before(:all) do
@evaluator = FactoryBot.create(:evaluator)
end
after(:all) do
@evaluator.destroy
let(:evaluator) { FactoryBot.create(:evaluator) }

before do
sign_in user
end

context "as admin" do
before(:each) do
sign_in users(:admin)
end
let(:user) { FactoryBot.create(:admin) }

can_index :evaluators
can_create :evaluator, attributes: {name: "A unique name", description: "Unique description", source: "special sauce"}
can_manage :evaluator, attributes: {name: "A unique name", description: "Unique description", source: "special sauce"}
end

context "as a normal user" do
before(:each) do
sign_in users(:user)
let(:user) { FactoryBot.create(:user) }

it "can't be accessed" do
get :index
expect(response).to have_http_status(:forbidden)
end
end
end
2 changes: 1 addition & 1 deletion spec/controllers/file_attachments_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
RSpec.describe FileAttachmentsController do
describe "GET /file_attachments" do
before do
sign_in users(:superadmin)
sign_in FactoryBot.create(:superadmin)
end

can_index :file_attachments
Expand Down
24 changes: 10 additions & 14 deletions spec/controllers/groups_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,33 +1,29 @@
require "spec_helper"

describe GroupsController do
before(:all) do
@group = FactoryBot.create(:group)
end
after(:all) do
@group.destroy
let(:group) { FactoryBot.create(:group) }

before do
sign_in user
end

context "as admin" do
before(:each) do
sign_in users(:admin)
end
let(:user) { FactoryBot.create(:admin) }

can_index :groups
can_create :group, attributes: {name: "A unique name"}
can_manage :group, attributes: {name: "A unique name"}
end

context "as a normal user" do
before(:each) do
sign_in users(:user)
end
let(:user) { FactoryBot.create(:user) }

can_browse :groups
end

context "as an organiser" do
before(:each) do
sign_in users(:organiser)
end
let(:user) { FactoryBot.create(:organiser) }

can_index :groups, params: {filter: "my"}
end
end
19 changes: 8 additions & 11 deletions spec/controllers/problem_sets_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,26 +1,23 @@
require "spec_helper"

describe ProblemSetsController do
before(:all) do
@problem_set = FactoryBot.create(:problem_set)
end
after(:all) do
@problem_set.destroy
let(:problem_set) { FactoryBot.create(:problem_set) }

before do
sign_in user
end

context "as admin" do
before(:each) do
sign_in users(:admin)
end
let(:user) { FactoryBot.create(:admin) }

can_index :problem_sets
can_create :problem_set, attributes: {name: "A unique title"}
can_manage :problem_set, attributes: {name: "A unique title"}
end

context "as an organiser" do
before(:each) do
sign_in users(:organiser)
end
let(:user) { FactoryBot.create(:organiser) }

can_index :problem_sets, params: {filter: "my"}
end
end
54 changes: 20 additions & 34 deletions spec/controllers/problems_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,62 +1,48 @@
require "spec_helper"

describe ProblemsController do
before(:all) do
@group = FactoryBot.create(:group, name: "Special Group", members: [users(:admin), users(:user)])
@group_set = FactoryBot.create(:problem_set, name: "Set in Group", groups: [@group])
@group_problem = FactoryBot.create(:adding_problem, problem_sets: [@group_set])
end
after(:all) do
[@group, @group_set, @group_problem].reverse_each { |object| object.destroy }
end
let(:group) { FactoryBot.create(:group, name: "Special Group", members: [user]) }
let(:group_set) { FactoryBot.create(:problem_set, name: "Set in Group", groups: [group]) }
let(:group_problem) { FactoryBot.create(:adding_problem, problem_sets: [group_set]) }

let(:owned_problem) { FactoryBot.create(:problem, owner: user) }
let(:unowned_problem) { FactoryBot.create(:problem) }

shared_examples "for any user" do
can_index :problems, params: {filter: "my"}
can_create :problem, attributes: {name: "A unique title", statement: "A unique statement"}
can_manage :owned_problem, resource_name: :problem, attributes: {name: "A unique title", statement: "A unique statement"}
end

before do
sign_in user
end

context "as admin" do
before(:all) do
@owned_problem = FactoryBot.create(:problem, owner: users(:admin))
@unowned_problem = FactoryBot.create(:problem)
end
after(:all) do
@unowned_problem.destroy
@owned_problem.destroy
end
before(:each) do
sign_in users(:admin)
end
let(:user) { FactoryBot.create(:admin) }

include_examples "for any user"

can_manage :unowned_problem, resource_name: :problem, attributes: {name: "A unique title", statement: "A unique statement"}
end

context "as a normal user" do
before(:all) do
@owned_problem = FactoryBot.create(:problem, owner: users(:user))
@unowned_problem = FactoryBot.create(:problem)
end
after(:all) do
@unowned_problem.destroy
@owned_problem.destroy
end
before(:each) do
sign_in users(:user)
end
let(:user) { FactoryBot.create(:user) }

include_examples "for any user"

it "can get submit for group problem" do
get :submit, id: @group_problem.id
get :submit, id: group_problem.id
expect(response).to be_success
end

it "can post submit for group problem" do
expect_any_instance_of(Submission).to receive(:judge)
# post multi-part form
post :submit, id: @group_problem.id, submission: {language_id: LanguageGroup.find_by_identifier("c++").current_language, source_file: fixture_file_upload("/files/adding.cpp", "text/plain")}
post :submit, id: group_problem.id, submission: {language_id: LanguageGroup.find_by_identifier("c++").current_language, source_file: fixture_file_upload("/files/adding.cpp", "text/plain")}
expect(response).to redirect_to submission_path(assigns(:submission))
expect(assigns(:submission).problem_id).to eq(@group_problem.id)
expect(assigns(:submission).user_id).to eq(users(:user).id)
expect(assigns(:submission).problem_id).to eq(group_problem.id)
expect(assigns(:submission).user_id).to eq(user.id)
expect(assigns(:submission).language.group.identifier).to eq("c++")
expect(assigns(:submission).source).not_to be_empty
end
Expand Down
19 changes: 8 additions & 11 deletions spec/controllers/roles_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,26 +1,23 @@
require "spec_helper"

describe RolesController do
before(:all) do
@role = FactoryBot.create(:role)
end
after(:all) do
@role.destroy
let(:role) { FactoryBot.create(:role) }

before do
sign_in user
end

context "as superadmin" do
before(:each) do
sign_in users(:superadmin)
end
let(:user) { FactoryBot.create(:superadmin) }

can_index :roles
can_create :role, attributes: {name: "A unique name"}
can_manage :role, attributes: {name: "A unique name"}
end

context "as admin" do
before(:each) do
sign_in users(:admin)
end
let(:user) { FactoryBot.create(:admin) }

can_index :roles
end
end
21 changes: 11 additions & 10 deletions spec/controllers/settings_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
require "spec_helper"

describe SettingsController do
before(:all) do
@setting = FactoryBot.create(:setting)
end
after(:all) do
@setting.destroy
let(:setting) { FactoryBot.create(:setting) }

before do
sign_in user
end

context "as superadmin" do
before(:each) do
sign_in users(:superadmin)
end
let(:user) { FactoryBot.create(:superadmin) }

can_index :settings
can_create :setting, attributes: {key: "A unique name", value: "Secret value setting"}
can_manage :setting, attributes: {key: "A unique name", value: "Secret value setting"}
end

context "as a normal user" do
before(:each) do
sign_in users(:user)
let(:user) { FactoryBot.create(:user) }

it "doesn't display" do
get :index
expect(response).to have_http_status(:forbidden)
end
end
end
Loading