Skip to content

Instantly share code, notes, and snippets.

@zmalltalker
Created November 14, 2019 08:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zmalltalker/f677e66c047ccd4ebf95ac0cf3a4f91b to your computer and use it in GitHub Desktop.
Save zmalltalker/f677e66c047ccd4ebf95ac0cf3a4f91b to your computer and use it in GitHub Desktop.
require "#{File.dirname(__FILE__)}/../test_helper"
class CreateNewStoreTest < ActionController::IntegrationTest
def test_fail_to_manage_without_login
new_session do | tom |
tom.creates_new_store_and_activates_account
tom.logs_out
tom.attempts_to_manage_store_but_is_redirected_to_login
end
end
def test_cannot_login_without_activation
new_session do | tom |
tom.creates_new_store
tom.attempts_to_manage_store_but_is_not_activated
end
end
def test_can_change_password
new_session do |tom|
tom.creates_new_store_and_activates_account
tom.changes_password_to "kukskalle"
end
end
def test_change_password_and_login_works
new_session do |tom|
tom.creates_new_store_and_activates_account
tom.changes_password_to "balle"
tom.logs_out
tom.logs_in_with "tom@sjappa.net", "balle"
assert_equal "Logged in successfully", tom.flash[:notice]
end
end
def test_logout_works
new_session do |tom|
tom.creates_new_store_and_activates_account
tom.logs_out
end
end
def test_login_works
new_session do |tom|
tom.creates_new_store_and_activates_account
tom.logs_out
tom.login
tom.assert_redirected_to tom.store_url
end
end
def test_create_new_store
new_session do |tom|
tom.creates_new_store_and_activates_account
end
end
private
module MyTestingDSL
def attempts_to_manage_store_but_is_not_activated
attempts_to_manage_store_but_is_redirected_to_login
login
assert_redirected_to inactive_user_url
end
def logs_in_with(username,password)
post manager_login_url(:login => username, :password => password)
end
def login
post manager_login_url(:login => "tom@sjappa.net", :password => "secret")
end
def attempts_to_manage_store_but_is_redirected_to_login
get manage_url
assert_response :redirect
assert_redirected_to manager_login_url
end
def creates_new_store
self.host = "sjappa"
goes_to_signup
signs_up_with( :store => {:name => "sjappa"},
:user=> {:password => "secret", :password_confirmation => 'secret', :email => "tom@sjappa.net", :login => "tom@sjappa.net"})
end
def creates_new_store_and_activates_account
creates_new_store
activates_account
end
def activates_account
url = gets_url_for_activation_from_inbox
clicks_url_for_activation url
end
def logs_out
get logout_url
assert_equal "sjappa", controller.store_name
assert_not_nil Store.find_by_name("sjappa")
assert_redirected_to :controller => "/store"
assert_equal "You have been logged out.", flash[:notice]
follow_redirect!
assert_nil controller.send(:current_user)
end
def changes_password_to(new_pass)
get profile_url
user = User.find_by_login "tom@sjappa.net"
old_password = user.crypted_password
post "/manage/user/update", :user => {:password => new_pass, :password_confirmation => new_pass}
assert_response :redirect
follow_redirect!
assert_template "profile"
user.reload
assert_not_equal user.crypted_password, old_password
assert_equal User.encrypt(new_pass,user.salt), user.crypted_password
assert_equal User.authenticate("tom@sjappa.net",new_pass), user
end
def inbox
unless @inbox
inbox = []
def inbox.deliver_message(str)
self << str
end
@inbox = inbox
end
@inbox
end
def gets_url_for_activation_from_inbox
message = inbox.pop
re = /^Your activation page URL is (.*)/
message.match(re)
return $1
end
def clicks_url_for_activation(url)
self.host = @new_store.name
get url
assert_redirected_to manage_url
assert_equal @new_store.manager, @controller.send('current_user')
@new_store.reload
assert @new_store.closed?
assert @new_store.manager.active?
end
def goes_to_signup
get new_store_url
#assert_redirected_to "bla/bla"
assert_response :success
assert_template "manage/store/new"
end
def url_for_activation
#self.host = @new_store.name
url = activation_url(:host => @new_store.name, :id => @new_store.manager, :key=>@new_store.manager.activation_key)
return url
end
def signs_up_with(options)
post store_url, options
# post "/manage/signup", options
assert_response :redirect
follow_redirect!
assert_response :success
assert_template "manage/store/inactive"
@new_store = Store.find_by_name(options[:store][:name])
assert_not_nil @new_store
assert @new_store.closed?
assert @new_store.manager.inactive?
assert_equal @new_store.manager.login, options[:user][:login]
inbox.deliver_message("Your activation page URL is #{url_for_activation}")
end
end
def new_session
open_session do |sess|
sess.extend(MyTestingDSL)
yield sess if block_given?
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment