Created
November 14, 2019 08:52
-
-
Save zmalltalker/f677e66c047ccd4ebf95ac0cf3a4f91b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 "[email protected]", "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 => "[email protected]", :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 => "[email protected]", :login => "[email protected]"}) | |
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 "[email protected]" | |
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("[email protected]",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