Authorization based on soft_token
This commit is contained in:
parent
7af48a92a3
commit
441242a044
@ -14,7 +14,7 @@ var Player = React.createClass({
|
|||||||
: null }
|
: null }
|
||||||
|
|
||||||
{/* Show player controls if player is owned by current_user */}
|
{/* Show player controls if player is owned by current_user */}
|
||||||
{(this.props.user_id == this.props.game.current_user_id) && (this.props.game.is_started == true)
|
{(this.props.soft_token == this.props.game.current_user_soft_token) && (this.props.game.is_started == true)
|
||||||
? (<PlayerControls
|
? (<PlayerControls
|
||||||
key={this.props.id}
|
key={this.props.id}
|
||||||
onPlayHandSubmit={this.props.onPlayHandSubmit}
|
onPlayHandSubmit={this.props.onPlayHandSubmit}
|
||||||
|
|||||||
@ -22,9 +22,9 @@ class GamesController < ApplicationController
|
|||||||
|
|
||||||
def play_hand
|
def play_hand
|
||||||
# TODO: move this logic out of controller maybe to model(s) ?
|
# TODO: move this logic out of controller maybe to model(s) ?
|
||||||
|
|
||||||
# validate player's turn
|
# validate player's turn
|
||||||
if current_user == @game.controlling_player.user
|
if current_user.soft_token == @game.controlling_player.soft_token
|
||||||
|
|
||||||
# Player action: pass
|
# Player action: pass
|
||||||
# TODO: wtf do we need game params for? And why nest hand_type in it?
|
# TODO: wtf do we need game params for? And why nest hand_type in it?
|
||||||
@ -97,7 +97,7 @@ class GamesController < ApplicationController
|
|||||||
|
|
||||||
def play_now
|
def play_now
|
||||||
# First joinable game or create new game
|
# First joinable game or create new game
|
||||||
@game = Game.where(status:nil).joins("LEFT OUTER JOIN players ON players.game_id = games.id").group("games.id").having("count(players) < 4").first || Game.create(title: "Game " + current_user.soft_token[0..4])
|
@game = Game.play_now(current_user)
|
||||||
@game.add_player_from_user current_user
|
@game.add_player_from_user current_user
|
||||||
redirect_to @game
|
redirect_to @game
|
||||||
end
|
end
|
||||||
|
|||||||
@ -10,6 +10,10 @@ class Game < ActiveRecord::Base
|
|||||||
accepts_nested_attributes_for :players
|
accepts_nested_attributes_for :players
|
||||||
validates :title, presence: true
|
validates :title, presence: true
|
||||||
|
|
||||||
|
scope :play_now, lambda { |user|
|
||||||
|
where(status:nil).joins("LEFT OUTER JOIN players ON players.game_id = games.id").group("games.id").having("count(players) < 4").first || Game.create(title: "Game " + user.soft_token[0..4])
|
||||||
|
}
|
||||||
|
|
||||||
def start
|
def start
|
||||||
validate_startable
|
validate_startable
|
||||||
return false unless startable?
|
return false unless startable?
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
class User < ActiveRecord::Base
|
class User < ActiveRecord::Base
|
||||||
enum role: [:user, :vip, :admin]
|
enum role: [:user, :vip, :admin]
|
||||||
after_initialize :set_default_role, if: :new_record?
|
after_initialize :set_default_role, if: :new_record?
|
||||||
|
validates :email, presence: true, uniqueness: true
|
||||||
|
validates :soft_token, presence: true, uniqueness: true
|
||||||
|
|
||||||
def set_default_role
|
def set_default_role
|
||||||
self.role ||= :user
|
self.role ||= :user
|
||||||
|
|||||||
@ -11,6 +11,7 @@ json.is_joinable @game.joinable?(current_user)
|
|||||||
json.is_started !@game.status.nil?
|
json.is_started !@game.status.nil?
|
||||||
json.is_startable @game.startable?
|
json.is_startable @game.startable?
|
||||||
json.current_user_id current_user.try(:id)
|
json.current_user_id current_user.try(:id)
|
||||||
|
json.current_user_soft_token current_user.try(:soft_token)
|
||||||
|
|
||||||
json.players @game.players do |player|
|
json.players @game.players do |player|
|
||||||
json.id player.id
|
json.id player.id
|
||||||
@ -19,7 +20,7 @@ json.players @game.players do |player|
|
|||||||
json.user_id player.user.try(:id)
|
json.user_id player.user.try(:id)
|
||||||
json.soft_token player.soft_token
|
json.soft_token player.soft_token
|
||||||
|
|
||||||
if player.user == current_user
|
if player.soft_token == current_user.soft_token
|
||||||
json.inventory player.inventory
|
json.inventory player.inventory
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -2,5 +2,6 @@ FactoryGirl.define do
|
|||||||
factory :player do
|
factory :player do
|
||||||
game nil
|
game nil
|
||||||
user nil
|
user nil
|
||||||
|
sequence(:soft_token) { |n| "soft_token#{n}" }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
36
spec/features/visitor_plays_spec.rb
Normal file
36
spec/features/visitor_plays_spec.rb
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
include Warden::Test::Helpers
|
||||||
|
Warden.test_mode!
|
||||||
|
|
||||||
|
feature 'Play a hand', type: :feature, js: true do
|
||||||
|
before(:each) do
|
||||||
|
@game = setup_visitor_game
|
||||||
|
visit game_path @game
|
||||||
|
click_button "Join"
|
||||||
|
visit game_path @game
|
||||||
|
click_button "Start"
|
||||||
|
@game.reload
|
||||||
|
end
|
||||||
|
|
||||||
|
after(:each) do
|
||||||
|
Warden.test_reset!
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'player can see their own 13 card faces' do
|
||||||
|
#TODO: Remove race condition
|
||||||
|
sleep 3
|
||||||
|
@player = @game.players.last
|
||||||
|
expect(page.find_all("#player-#{@player.id} #inventory img").length).to eq(13)
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'player can see other players 13 card backs' do
|
||||||
|
#TODO: Remove race condition
|
||||||
|
sleep 3
|
||||||
|
inventories = page.find_all(".inventory")
|
||||||
|
inventories.each do |inventory|
|
||||||
|
#TODO: This test should verify that other players card fronts are NOT seen
|
||||||
|
expect(inventory.find_all("img").length).to eq(13)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@ -14,6 +14,15 @@ module Features
|
|||||||
game.start
|
game.start
|
||||||
return game
|
return game
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setup_visitor_game
|
||||||
|
# Default game has 3 players
|
||||||
|
game = FactoryGirl.create :game
|
||||||
|
player1 = FactoryGirl.create :player, game: game
|
||||||
|
player2 = FactoryGirl.create :player, game: game
|
||||||
|
player3 = FactoryGirl.create :player, game: game
|
||||||
|
return game
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user