require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")

describe Projects, "#destroy" do
  include Scenarios::AppleProjects

  before :all do
    @person = FixtureFactory.valid_person
    @person.save!

    setup_scenario
    @project = @account.projects.first
  end

  describes "when accessing as guest" do
    it "prohibits access" do
      assert_access_prohibited(nil, Projects, :destroy, valid_request_params)
    end
  end

  describe "when processing valid request" do
    before :all do
      @response = perform_valid_request
    end

    it "finds account using id" do
      @response.should find_entity(:account)
      @response.assigns(:account).id.should == @account.id
    end

    it "destroys the project" do
      Project.exists?(@project.id).should be_false
    end

    it "redirects to account dashboard" do
      @response.should redirect_to(url(:dashboard))
    end
  end

  describe "when processing request with invalid project id" do
    it "raises NotFound" do
      assert_not_found(@person, Projects, :destroy, perform_request_with_invalid_id)
    end
  end

#
#  Helpers
#

  def valid_request_params
    { :id => @project.id }
  end

  def perform_valid_request
    dispatch_to(Projects, :destroy, valid_request_params) do |controller|
      controller.stub!(:current_person).and_return(@person)
      controller.stub!(:account_name_from_subdomain).and_return(@account.subdomain)
    end
  end

  def request_params_with_invalid_id
    { :account_id => @account.id, :id => 9999999 }
  end

  def perform_request_with_invalid_id
    dispatch_to(Projects, :destroy, request_params_with_invalid_id) do |controller|
      controller.stub!(:current_person).and_return(@person)
      controller.stub!(:account_name_from_subdomain).and_return(@account.subdomain)
    end
  end

end