#---
# Excerpted from "Agile Web Development with Rails, 2nd Ed."
# We make no guarantees that this code is fit for any purpose.
# Visit http://www.pragmaticprogrammer.com/titles/rails2 for more book information.
#---
require File.dirname(__FILE__) + '/../test_helper'
require 'admin_controller'
require 'amrita2/testsupport'

module AdminControllerMixinForTest
  def new_erb
    new
    render :template=>"admin/new.html.erb"
  end

  def list_erb
    list
    render :template=>"admin/list.html.erb"
  end

  def show_erb
    show
    render :template=>"admin/show.html.erb"
  end

  def edit_erb
    edit
    render :template=>"admin/edit.html.erb"
  end
end

class AdminController
  include AdminControllerMixinForTest
end


class AdminControllerTest < Test::Unit::TestCase
  fixtures :products

  def setup
    User.create(:name=>'u1', :password=>'abc')
    User.create(:name=>'u2', :password=>'efg')
    @controller = AdminController.new
    @request    = ActionController::TestRequest.new
    @response   = ActionController::TestResponse.new
    ActionView::Base.register_template_handler(:a2, Amrita2View::Base)
  end

  def test_new
    login
    get :new
    amrita2_result = @response.body
    get :new_erb
    erb_result = @response.body
    #puts amrita2_result
    #puts erb_result
    assert_equal_as_xml(erb_result, amrita2_result)
  end

  def test_list
    login
    get :list
    amrita2_result = @response.body
    get :list_erb
    erb_result = @response.body
    assert_equal_as_xml(erb_result, amrita2_result)
  end

  def test_show
    login
    get :show, :id=>1
    amrita2_result = @response.body
    get :show_erb, :id=>1
    erb_result = @response.body
    assert_equal_as_xml(erb_result, amrita2_result)
  end

  def test_edit
    login
    get :edit, :id=>1
    amrita2_result = @response.body
    get :edit_erb, :id=>1
    erb_result = @response.body
    #puts amrita2_result
    #puts erb_result
    assert_equal_as_xml(erb_result, amrita2_result)
  end

  private
  def login
    get :new # dummy
    session[:user_id] = User.find_by_name('u1').id
    flash[:notice] = nil
  end
end