require "test_helper" class PostsControllerTest < ActionController::TestCase context "The posts controller" do setup do @user = FactoryGirl.create(:user) CurrentUser.user = @user CurrentUser.ip_addr = "127.0.0.1" @post = FactoryGirl.create(:post, :uploader_id => @user.id, :tag_string => "aaaa") MEMCACHE.flush_all end teardown do CurrentUser.user = nil CurrentUser.ip_addr = nil end context "for api calls" do context "passing the api limit" do setup do User.any_instance.stubs(:api_hourly_limit).returns(5) end should "work" do CurrentUser.user.api_hourly_limit.times do get :index, {:format => "json", :login => @user.name, :api_key => @user.bcrypt_cookie_password_hash} assert_response :success end get :index, {:format => "json", :login => @user.name, :api_key => @user.bcrypt_cookie_password_hash} assert_response 421 end end context "using http basic auth" do should "succeed for password matches" do @basic_auth_string = "Basic #{::Base64.encode64("#{@user.name}:#{@user.bcrypt_cookie_password_hash}")}" @request.env['HTTP_AUTHORIZATION'] = @basic_auth_string get :index, {:format => "json"} assert_response :success end should "fail for password mismatches" do @basic_auth_string = "Basic #{::Base64.encode64("#{@user.name}:badpassword")}" @request.env['HTTP_AUTHORIZATION'] = @basic_auth_string get :index, {:format => "json"} assert_response 401 end end context "using the api_key parameter" do should "succeed for password matches" do get :index, {:format => "json", :login => @user.name, :api_key => @user.bcrypt_cookie_password_hash} assert_response :success end should "fail for password mismatches" do get :index, {:format => "json", :login => @user.name, :api_key => "bad"} assert_response 401 end end context "using the password_hash parameter" do should "succeed for password matches" do get :index, {:format => "json", :login => @user.name, :password_hash => User.sha1("password")} assert_response :success end should "fail for password mismatches" do get :index, {:format => "json", :login => @user.name, :password_hash => "bad"} assert_response 401 end end end context "index action" do should "render" do get :index assert_response :success end context "with a search" do should "render" do get :index, {:tags => "aaaa"} assert_response :success end end end context "show action" do should "render" do get :show, {:id => @post.id} assert_response :success end end context "update action" do should "work" do post :update, {:id => @post.id, :post => {:tag_string => "bbb"}}, {:user_id => @user.id} assert_redirected_to post_path(@post) @post.reload assert_equal("bbb", @post.tag_string) end end context "revert action" do setup do @post.update_attributes(:tag_string => "zzz") end should "work" do @version = @post.versions(true).first assert_equal("aaaa", @version.tags) post :revert, {:id => @post.id, :version_id => @version.id}, {:user_id => @user.id} assert_redirected_to post_path(@post) @post.reload assert_equal("aaaa", @post.tag_string) end end end end