1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-03-25 01:14:43 +00:00

Added is_public to a tournament to hide lineups and brackets until you're ready to make it public

This commit is contained in:
2023-01-01 23:16:12 -05:00
parent d675337d7a
commit c328bbd91c
15 changed files with 547 additions and 16 deletions

View File

@@ -2,7 +2,7 @@ class SchoolsController < ApplicationController
before_action :set_school, only: [:import_baumspage_roster, :show, :edit, :update, :destroy, :stats]
before_action :check_access_director, only: [:new,:create,:destroy]
before_action :check_access_delegate, only: [:import_baumspage_roster, :update,:edit]
before_action :check_read_access, only: [:show]
def stats
@tournament = @school.tournament
@@ -109,4 +109,8 @@ class SchoolsController < ApplicationController
authorize! :manage, @school
end
def check_read_access
authorize! :read, @school
end
end

View File

@@ -4,6 +4,7 @@ class TournamentsController < ApplicationController
before_action :check_access_destroy, only: [:destroy,:delegate,:remove_delegate]
before_action :check_tournament_errors, only: [:generate_matches]
before_action :check_for_matches, only: [:up_matches,:bracket,:all_brackets]
before_action :check_access_read, only: [:up_matches,:bracket,:all_brackets]
def weigh_in_sheet
@@ -289,7 +290,7 @@ class TournamentsController < ApplicationController
# Never trust parameters from the scary internet, only allow the white list through.
def tournament_params
params.require(:tournament).permit(:name, :address, :director, :director_email, :tournament_type, :weigh_in_ref, :user_id, :date, :originalId, :swapId)
params.require(:tournament).permit(:name, :address, :director, :director_email, :tournament_type, :weigh_in_ref, :user_id, :date, :originalId, :swapId, :is_public)
end
#Check for tournament owner
@@ -301,6 +302,10 @@ class TournamentsController < ApplicationController
authorize! :manage, @tournament
end
def check_access_read
authorize! :read, @tournament
end
def check_for_matches
if @tournament
if @tournament.matches.empty? or @tournament.curently_generating_matches == 1

View File

@@ -1,6 +1,7 @@
class WeightsController < ApplicationController
before_action :set_weight, only: [:pool_order, :show, :edit, :update, :destroy,:re_gen]
before_action :check_access, only: [:pool_order, :new,:create,:update,:destroy,:edit, :re_gen]
before_action :check_access_manage, only: [:pool_order, :new,:create,:update,:destroy,:edit, :re_gen]
before_action :check_access_read, only: [:show]
# GET /weights/1
@@ -103,7 +104,7 @@ class WeightsController < ApplicationController
def weight_params
params.require(:weight).permit(:max, :tournament_id, :mat_id)
end
def check_access
def check_access_manage
if params[:tournament]
@tournament = Tournament.find(params[:tournament])
elsif params[:weight]
@@ -114,5 +115,16 @@ class WeightsController < ApplicationController
authorize! :manage, @tournament
end
def check_access_read
if params[:tournament]
@tournament = Tournament.find(params[:tournament])
elsif params[:weight]
@tournament = Tournament.find(params[:weight]["tournament_id"])
elsif @weight
@tournament = @weight.tournament
end
authorize! :read, @tournament
end
end

View File

@@ -38,6 +38,16 @@ class Ability
cannot :destroy, Tournament do |tournament|
tournament.delegates.map(&:user_id).include? user.id
end
# Can read tournament if tournament owner or tournament delegate
can :read, Tournament do |tournament|
if tournament.is_public
true
elsif tournament.delegates.map(&:user_id).include? user.id or tournament.user_id == user.id
true
else
false
end
end
#Can manage school if tournament owner
can :manage, School do |school|
school.tournament.user_id == user.id
@@ -53,6 +63,34 @@ class Ability
cannot :destroy, School do |school|
school.delegates.map(&:user_id).include? user.id
end
# Can read school if school delegate, tournament delegate, or tournament director
can :read, School do |school|
if school.tournament.is_public
true
elsif school.delegates.map(&:user_id).include? user.id or school.tournament.delegates.map(&:user_id).include? user.id or school.tournament.user_id == user.id
true
else
false
end
end
# Default for non logged in users
else
# Can read tournament if tournament is public
can :read, Tournament do |tournament|
if tournament.is_public
true
else
false
end
end
# Can read school if tournament is public
can :read, School do |school|
if school.tournament.is_public
true
else
false
end
end
end
end
end

View File

@@ -43,6 +43,15 @@
<%= f.hidden_field :user_id, :value => current_user.id %>
<br>
<br>
<div class="field">
<%= f.label "Information is public" %> <br />
<%= f.check_box :is_public %> <br />
</div>
<div>
Leave this unchecked until you're ready to share seeding info, brackets, and lineups.
</div>
<br>
<br>
<div class="actions">
<%= f.submit 'Submit',:class=>"btn btn-success" %>
</div>

View File

@@ -17,6 +17,14 @@
<strong>Tournament Type:</strong>
<%= @tournament.tournament_type %>
</p>
<p>
<strong>Tournament Date:</strong>
<%= @tournament.date %>
</p>
<p>
<strong>Tournament Information Is Public:</strong>
<%= @tournament.is_public %>
</p>
<p>Brackets and team scores can be found in the white nav-bar up top.</p>
<br>
<h3>Schools</h3>
@@ -32,15 +40,20 @@
<tbody>
<% @schools.each do |school| %>
<tr>
<td><%= link_to "#{school.name}", school %>
<td>
<% if can? :read, school %>
<%= link_to "#{school.name}", school %>
<% else %>
<%= "#{school.name}" %>
<% end %>
</td>
<td>
<% if can? :manage, school %>
<td><%= link_to '', edit_school_path(school), :class=>"fas fa-edit" %>
<%= link_to '', edit_school_path(school), :class=>"fas fa-edit" %>
<% if can? :manage, @tournament %>
<%= link_to '', school, method: :delete, data: { confirm: "Are you sure you want to delete #{school.name}?" }, :class=>"fas fa-trash-alt" %>
<% end %>
</td>
<% end %>
</td>
</tr>
<% end %>
@@ -61,7 +74,13 @@
<tbody>
<% @weights.each do |weight| %>
<tr>
<td><%= link_to "#{weight.max} lbs", weight %></td>
<td>
<% if can? :read, @tournament %>
<%= link_to "#{weight.max} lbs", weight %>
<% else %>
<%= "#{weight.max}" %>
<% end %>
</td>
<td><%= weight.bracket_size %></td>
<% if can? :manage, @tournament %>
<td>

View File

@@ -0,0 +1,5 @@
class AddIsPublicToTournaments < ActiveRecord::Migration[6.1]
def change
add_column :tournaments, :is_public, :boolean
end
end

View File

@@ -0,0 +1,9 @@
class SetAllExistingTournamentsAsPublic < ActiveRecord::Migration[6.1]
def up
Tournament.update_all(is_public: true)
end
def down
Tournament.update_all(is_public: nil)
end
end

View File

@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2022_09_12_171922) do
ActiveRecord::Schema.define(version: 2023_01_02_040503) do
create_table "delayed_jobs", force: :cascade do |t|
t.integer "priority", default: 0, null: false
@@ -108,6 +108,7 @@ ActiveRecord::Schema.define(version: 2022_09_12_171922) do
t.integer "user_id"
t.integer "curently_generating_matches"
t.date "date"
t.boolean "is_public"
t.index ["user_id"], name: "index_tournaments_on_user_id"
end

View File

@@ -31,7 +31,7 @@
User.create(id: 1, email: 'test@test.com', password: 'password', password_confirmation: 'password')
# Pool to bracket
tournament = Tournament.create(id: 200, name: 'Test1', address: 'some place', director: 'some guy', director_email: 'their@email.com', tournament_type: 'Pool to bracket', user_id: 1, date: Date.today)
tournament = Tournament.create(id: 200, name: 'Test1', address: 'some place', director: 'some guy', director_email: 'their@email.com', tournament_type: 'Pool to bracket', user_id: 1, date: Date.today, is_public: true)
create_schools(tournament, 16)
weight_classes=Weight::HS_WEIGHT_CLASSES.split(",")
tournament.create_pre_defined_weights(weight_classes)
@@ -42,7 +42,7 @@
end
# Modified 16 Man Double Elimination 1-6
tournament = Tournament.create(id: 201, name: 'Test2', address: 'some place', director: 'some guy', director_email: 'their@email.com', tournament_type: 'Modified 16 Man Double Elimination 1-6', user_id: 1, date: Date.today)
tournament = Tournament.create(id: 201, name: 'Test2', address: 'some place', director: 'some guy', director_email: 'their@email.com', tournament_type: 'Modified 16 Man Double Elimination 1-6', user_id: 1, date: Date.today, is_public: true)
create_schools(tournament, 16)
weight_classes=Weight::HS_WEIGHT_CLASSES.split(",")
tournament.create_pre_defined_weights(weight_classes)
@@ -53,7 +53,7 @@
end
# Modified 16 Man Double Elimination 1-8
tournament = Tournament.create(id: 202, name: 'Test3', address: 'some place', director: 'some guy', director_email: 'their@email.com', tournament_type: 'Modified 16 Man Double Elimination 1-8', user_id: 1, date: Date.today)
tournament = Tournament.create(id: 202, name: 'Test3', address: 'some place', director: 'some guy', director_email: 'their@email.com', tournament_type: 'Modified 16 Man Double Elimination 1-8', user_id: 1, date: Date.today, is_public: true)
create_schools(tournament, 16)
weight_classes=Weight::HS_WEIGHT_CLASSES.split(",")
tournament.create_pre_defined_weights(weight_classes)
@@ -64,7 +64,7 @@
end
# Regular Double Elimination 1-6
tournament = Tournament.create(id: 203, name: 'Test4', address: 'some place', director: 'some guy', director_email: 'their@email.com', tournament_type: 'Regular Double Elimination 1-6', user_id: 1, date: Date.today)
tournament = Tournament.create(id: 203, name: 'Test4', address: 'some place', director: 'some guy', director_email: 'their@email.com', tournament_type: 'Regular Double Elimination 1-6', user_id: 1, date: Date.today, is_public: true)
create_schools(tournament, 16)
weight_classes=Weight::HS_WEIGHT_CLASSES.split(",")
tournament.create_pre_defined_weights(weight_classes)
@@ -75,7 +75,7 @@
end
# Regular Double Elimination 1-8
tournament = Tournament.create(id: 204, name: 'Test5', address: 'some place', director: 'some guy', director_email: 'their@email.com', tournament_type: 'Regular Double Elimination 1-8', user_id: 1, date: Date.today)
tournament = Tournament.create(id: 204, name: 'Test5', address: 'some place', director: 'some guy', director_email: 'their@email.com', tournament_type: 'Regular Double Elimination 1-8', user_id: 1, date: Date.today, is_public: true)
create_schools(tournament, 16)
weight_classes=Weight::HS_WEIGHT_CLASSES.split(",")
tournament.create_pre_defined_weights(weight_classes)

View File

@@ -17,6 +17,10 @@ class SchoolsControllerTest < ActionController::TestCase
get :new, params: { tournament: @tournament.id }
end
def get_show
get :show, params: { id: @school.id }
end
def post_update
patch :update, params: { id: @school.id, school: {name: @school.name, tournament_id: @school.tournament_id} }
end
@@ -205,4 +209,85 @@ Some Guy
redirect
end
# SHOW PAGE PERMISSIONS WHEN TOURNAMENT IS NOT PUBLIC
test "logged in school delegate can get show page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_school_delegate
get_show
success
end
test "logged in user cannot get show page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_non_owner
get_show
redirect
end
test "logged in tournament delegate can get show page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_tournament_delegate
get_show
success
end
test "logged in tournament owner can get show page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_owner
get_show
success
end
test "non logged in user cannot get show page when tournament is not public" do
@tournament.is_public = false
@tournament.save
get_show
redirect
end
# SHOW PAGE PERMISSIONS WHEN TOURNAMENT IS PUBLIC
test "logged in school delegate can get show page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_school_delegate
get_show
success
end
test "logged in user can get show page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_non_owner
get_show
success
end
test "logged in tournament delegate can get show page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_tournament_delegate
get_show
success
end
test "logged in tournament owner can get show page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_owner
get_show
success
end
test "non logged in user can get show page when tournament is public" do
@tournament.is_public = true
@tournament.save
get_show
success
end
# END SHOW PAGE PERMISSIONS
end

View File

@@ -15,6 +15,18 @@ class TournamentsControllerTest < ActionController::TestCase
patch :update, params: { id: 1, tournament: {name: @tournament.name} }
end
def get_bracket
get :up_matches, params: { id: 1 }
end
def get_all_brackets
get :all_brackets, params: { id: 1 }
end
def get_up_matches
get :up_matches, params: { id: 1 }
end
def get_edit
get :edit, params: { id: 1 }
end
@@ -211,6 +223,248 @@ class TournamentsControllerTest < ActionController::TestCase
redirect
end
# BRACKETS PAGE PERMISSIONS WHEN TOURNAMENT IS NOT PUBLIC
test "logged in school delegate cannot get bracket page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_school_delegate
get_bracket
redirect
end
test "logged in user cannot get bracket page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_non_owner
get_bracket
redirect
end
test "logged in tournament delegate can get bracket page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_delegate
get_bracket
success
end
test "logged in tournament owner can get bracket page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_owner
get_bracket
success
end
test "non logged in user cannot get bracket page when tournament is not public" do
@tournament.is_public = false
@tournament.save
get_bracket
redirect
end
# BRACKETS PAGE PERMISSIONS WHEN TOURNAMENT IS PUBLIC
test "logged in school delegate can get bracket page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_school_delegate
get_bracket
success
end
test "logged in user can get bracket page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_non_owner
get_bracket
success
end
test "logged in tournament delegate can get bracket page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_delegate
get_bracket
success
end
test "logged in tournament owner can get bracket page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_owner
get_bracket
success
end
test "non logged in user can get bracket page when tournament is public" do
@tournament.is_public = true
@tournament.save
get_bracket
success
end
# END BRACKETS PAGE PERMISSIONS
# ALL BRACKETS PAGE PERMISSIONS WHEN TOURNAMENT IS NOT PUBLIC
test "logged in school delegate cannot get all brackets page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_school_delegate
get_all_brackets
redirect
end
test "logged in user cannot get all brackets page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_non_owner
get_all_brackets
redirect
end
test "logged in tournament delegate can get all brackets page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_delegate
get_all_brackets
success
end
test "logged in tournament owner can get all brackets page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_owner
get_all_brackets
success
end
test "non logged in user cannot get all brackets page when tournament is not public" do
@tournament.is_public = false
@tournament.save
get_all_brackets
redirect
end
# ALL BRACKETS PAGE PERMISSIONS WHEN TOURNAMENT IS PUBLIC
test "logged in school delegate can get all brackets page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_school_delegate
get_all_brackets
success
end
test "logged in user can get all brackets page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_non_owner
get_all_brackets
success
end
test "logged in tournament delegate can get all brackets page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_delegate
get_all_brackets
success
end
test "logged in tournament owner can get all brackets page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_owner
get_all_brackets
success
end
test "non logged in user can get all brackets page when tournament is public" do
@tournament.is_public = true
@tournament.save
get_all_brackets
success
end
# END ALL BRACKETS PAGE PERMISSIONS
# UP MATCHES PAGE PERMISSIONS WHEN TOURNAMENT IS NOT PUBLIC
test "logged in school delegate cannot get up matches page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_school_delegate
get_up_matches
redirect
end
test "logged in user cannot get up matches page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_non_owner
get_up_matches
redirect
end
test "logged in tournament delegate can get up matches page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_delegate
get_up_matches
success
end
test "logged in tournament owner can get up matches page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_owner
get_up_matches
success
end
test "non logged in user cannot get up matches page when tournament is not public" do
@tournament.is_public = false
@tournament.save
get_up_matches
redirect
end
# UP MATCHES PAGE PERMISSIONS WHEN TOURNAMENT IS PUBLIC
test "logged in school delegate can get up matches page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_school_delegate
get_up_matches
success
end
test "logged in user can get up matches page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_non_owner
get_up_matches
success
end
test "logged in tournament delegate can get up matches page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_delegate
get_up_matches
success
end
test "logged in tournament owner can get up matches page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_owner
get_up_matches
success
end
test "non logged in user can get up matches page when tournament is public" do
@tournament.is_public = true
@tournament.save
get_up_matches
success
end
# END UP MATCHES PAGE PERMISSIONS
#TESTS THAT NEED MATCHES PUT ABOVE THIS
test "redirect up_matches if no matches" do

View File

@@ -30,6 +30,10 @@ class WeightsControllerTest < ActionController::TestCase
get :edit, params: { id: @weight.id }
end
def get_show
get :show, params: { id: @weight.id }
end
def get_pool_order
post :pool_order, params: {pool_to_order: 1, id: @weight.id}
end
@@ -210,6 +214,87 @@ class WeightsControllerTest < ActionController::TestCase
redirect
end
# SHOW PAGE PERMISSIONS WHEN TOURNAMENT IS NOT PUBLIC
test "logged in school delegate cannot get show page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_school_delegate
get_show
redirect
end
test "logged in user cannot get show page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_non_owner
get_show
redirect
end
test "logged in tournament delegate can get show page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_tournament_delegate
get_show
success
end
test "logged in tournament owner can get show page when tournament is not public" do
@tournament.is_public = false
@tournament.save
sign_in_owner
get_show
success
end
test "non logged in user cannot get show page when tournament is not public" do
@tournament.is_public = false
@tournament.save
get_show
redirect
end
# SHOW PAGE PERMISSIONS WHEN TOURNAMENT IS PUBLIC
test "logged in school delegate can get show page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_school_delegate
get_show
success
end
test "logged in user can get show page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_non_owner
get_show
success
end
test "logged in tournament delegate can get show page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_tournament_delegate
get_show
success
end
test "logged in tournament owner can get show page when tournament is public" do
@tournament.is_public = true
@tournament.save
sign_in_owner
get_show
success
end
test "non logged in user can get show page when tournament is public" do
@tournament.is_public = true
@tournament.save
get_show
success
end
# END SHOW PAGE PERMISSIONS
test "view wegiht" do
get :show, params: { id: 1 }
success

View File

@@ -9,3 +9,4 @@ one:
tournament_type: Pool to bracket
user_id: 1
date: 2015-12-30
is_public: true

View File

@@ -21,6 +21,7 @@ class ActiveSupport::TestCase
@tournament.director_email= "test@test.com"
@tournament.tournament_type = "Pool to bracket"
@tournament.date = "2015-12-30"
@tournament.is_public = true
@tournament.save
@school = School.new
@school.name = "Test"
@@ -43,6 +44,7 @@ class ActiveSupport::TestCase
@tournament.director_email= "test@test.com"
@tournament.tournament_type = "Regular Double Elimination 1-6"
@tournament.date = "2015-12-30"
@tournament.is_public = true
@tournament.save
@school = School.new
@school.name = "Test"
@@ -65,6 +67,7 @@ class ActiveSupport::TestCase
@tournament.director_email= "test@test.com"
@tournament.tournament_type = tournament_type
@tournament.date = "2015-12-30"
@tournament.is_public = true
@tournament.save
@school = School.new
@school.name = "Test"
@@ -100,6 +103,7 @@ class ActiveSupport::TestCase
@tournament.director_email= "test@test.com"
@tournament.tournament_type = "Pool to bracket"
@tournament.date = "2015-12-30"
@tournament.is_public = true
@tournament.save
# First school