Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2016
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.30 KB | None | 0 0
  1. FAIL["test_successful_edit_with_friendly_forwarding", UsersEditTest, 3.1409137547016144]
  2. test_successful_edit_with_friendly_forwarding#UsersEditTest (3.14s)
  3. Expected response to be a redirect to <http://www.example.com/users/787258272/edit> but was a redirect to <http://www.example.com/users/787258272>.
  4. Expected "http://www.example.com/users/787258272/edit" to be === "http://www.example.com/users/787258272".
  5. test/integration/users_edit_test.rb:23:in `block in <class:UsersEditTest>'
  6.  
  7. class UsersController < ApplicationController
  8. before_action :logged_in_user, only: [:edit, :update]
  9. before_action :correct_user, only: [:edit, :update]
  10.  
  11. def show
  12. @user = User.find(params[:id])
  13. end
  14.  
  15. def new
  16. @user = User.new
  17. end
  18.  
  19. def create
  20. @user = User.new(user_params)
  21. if @user.save
  22. log_in @user
  23. flash[:success] = "Account created, welcome to Amplifire Energetics!"
  24. redirect_to @user
  25. else
  26. render 'new'
  27. end
  28. end
  29.  
  30. def edit
  31. end
  32.  
  33. def update
  34. if @user.update_attributes(user_params)
  35. flash[:success] = "Profile updated"
  36. redirect_to @user
  37. else
  38. render 'edit'
  39. end
  40. end
  41.  
  42. private
  43.  
  44. def user_params
  45. params.require(:user).permit(:name, :email, :password,
  46. :password_confirmation)
  47. end
  48.  
  49. # Before filters
  50.  
  51. # Confirms a logged-in user.
  52. def logged_in_user
  53. unless logged_in?
  54. flash[:danger] = "Please log in."
  55. redirect_to login_url
  56. end
  57. end
  58.  
  59. # Confirms the correct user.
  60. def correct_user
  61. @user = User.find(params[:id])
  62. redirect_to(root_url) unless current_user?(@user)
  63. end
  64. end
  65.  
  66. class SessionsController < ApplicationController
  67. def new
  68. end
  69.  
  70. def create
  71. # Finds user in databse by email
  72. @user = User.find_by(email: params[:session][:email].downcase)
  73. # Authenticates user based on password
  74. if @user && @user.authenticate(params[:session][:password])
  75. log_in @user
  76. params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
  77. redirect_back_or @user
  78. else
  79. flash.now[:danger] = "Invalid email/password combination"
  80. render 'new'
  81. end
  82. end
  83.  
  84. def destroy
  85. log_out if logged_in?
  86. redirect_to root_url
  87. end
  88. end
  89.  
  90. module SessionsHelper
  91.  
  92. # Logs in user
  93. def log_in(user)
  94. session[:user_id] = user.id
  95. end
  96.  
  97. # Remebers user in persistent session
  98. def remember(user)
  99. user.remember
  100. cookies.permanent.signed[:user_id] = user.id
  101. cookies.permanent[:remember_token] = user.remember_token
  102. end
  103.  
  104. # Returns true if the given user is the current user.
  105. def current_user?(user)
  106. user == current_user
  107. end
  108.  
  109. # Returns current logged in user
  110. def current_user
  111. if (user_id = session[:user_id])
  112. @current_user ||= User.find_by(id: session[:user_id])
  113. elsif (user_id = cookies.signed[:user_id])
  114. user = User.find_by(id: user_id)
  115. if user && user.authenticated?(cookies[:remember_token])
  116. log_in user
  117. @current_user = user
  118. end
  119. end
  120. end
  121.  
  122. # Returns true if user logged in
  123. def logged_in?
  124. !current_user.nil?
  125. end
  126.  
  127. # Logs out user
  128. def log_out
  129. session.delete(:user_id)
  130. @current_user = nil
  131. end
  132.  
  133. # Forgets a persistent session
  134. def forget(user)
  135. user.forget
  136. cookies.delete(:user_id)
  137. cookies.delete(:remember_token)
  138. end
  139.  
  140. # Logs out current user
  141. def log_out
  142. forget(current_user)
  143. session.delete(:user_id)
  144. @current_user = nil
  145. end
  146.  
  147. # Redirects to stored location (or to the default).
  148. def redirect_back_or(default)
  149. redirect_to(session[:forwarding_url] || default)
  150. session.delete(:forwarding_url)
  151. end
  152.  
  153. # Stores the URL trying to be accessed.
  154. def store_location
  155. session[:forwarding_url] = request.original_url if request.get?
  156. end
  157.  
  158. end
  159.  
  160. Rails.application.routes.draw do
  161.  
  162. get 'sessions/new'
  163.  
  164. get 'users/new'
  165.  
  166. root 'static_pages#home'
  167. get '/help', to: 'static_pages#help'
  168. get '/about', to: 'static_pages#about'
  169. get '/contact', to: 'static_pages#contact'
  170. get '/signup', to: 'users#new'
  171. post '/signup', to: 'users#create'
  172. get '/login', to: 'sessions#new'
  173. post '/login', to: 'sessions#create'
  174. delete '/logout', to: 'sessions#destroy'
  175. resources :users
  176. end
  177.  
  178. example:
  179. name: Lil Wayne
  180. email: wheezy@youngmoney.com
  181. password_digest: <%= User.digest('password') %>
  182. admin: true
  183.  
  184. archer:
  185. name: Sterling Archer
  186. email: dutchess@isis.gov
  187. password_digest: <%= User.digest('password') %>
  188. admin: false
  189.  
  190. class User < ApplicationRecord
  191. attr_accessor :remember_token
  192. before_save :downcase_email
  193. validates :name, presence: true, length: { maximum: 50 }
  194. EMAIL_REGEX = /A([w+-].?)+@[a-zd-]+(.[a-z]+)*.[a-z]+z/i
  195. validates :email, presence: true, length: { maximum: 245 },
  196. format: { with: EMAIL_REGEX },
  197. uniqueness: { case_sensitive: false }
  198. has_secure_password
  199. validates :password, presence: true, length: { minimum: 6 }, allow_nil: true
  200.  
  201. class << self
  202. # Returns hash digest of given string
  203. def digest(s)
  204. cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
  205. BCrypt::Engine.cost
  206. BCrypt::Password.create(s, cost: cost)
  207. end
  208.  
  209. # Returns random token
  210. def new_token
  211. SecureRandom.urlsafe_base64
  212. end
  213. end
  214.  
  215. # Remembers user in database for persistent sessions
  216. def remember
  217. self.remember_token = User.new_token
  218. update_attribute(:remember_digest, User.digest(remember_token))
  219. end
  220.  
  221. def authenticated?(remember_token)
  222. return false if remember_digest.nil?
  223. BCrypt::Password.new(remember_digest).is_password?(remember_token)
  224. end
  225.  
  226. # Forgets a user
  227. def forget
  228. update_attribute(:remember_digest, nil)
  229. end
  230.  
  231. private
  232.  
  233. def downcase_email
  234. self.email = email.downcase
  235. end
  236. end
  237.  
  238. require 'test_helper'
  239.  
  240. class UsersEditTest < ActionDispatch::IntegrationTest
  241.  
  242. def setup
  243. @user = users(:example)
  244. end
  245.  
  246. test "unsuccessful edit" do
  247. log_in_as(@user)
  248. get edit_user_path(@user)
  249. assert_template 'users/edit'
  250. patch user_path(@user), params: { user: { name: "",
  251. email: "foo@invalid",
  252. password: "foo",
  253. password_confirmation: "bar" } }
  254. assert_template 'users/edit'
  255. end
  256.  
  257. test "successful edit with friendly forwarding" do
  258. get edit_user_path(@user)
  259. log_in_as(@user)
  260. assert_redirected_to edit_user_path(@user)
  261. name = "Foo Bar"
  262. email = "foo@bar.com"
  263. patch user_path(@user), params: { user: { name: name,
  264. email: email,
  265. password: "",
  266. password_confirmation: "" } }
  267. assert_not flash.empty?
  268. assert_redirected_to @user
  269. @user.reload
  270. assert_equal name, @user.name
  271. assert_equal email, @user.email
  272. end
  273.  
  274. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement