require 'test_helper'

class PostsControllerTest < ActionController::TestCase
  setup do
    @post = posts(:one)
    set_http_auth
  end

  def set_http_auth
    http_auth = ActionController::HttpAuthentication::Basic.encode_credentials(
      ENV['PROTECTED_USER'],
      ENV['PROTECTED_PASSWORD']
    )

    @request.env['HTTP_AUTHORIZATION'] = http_auth
  end

  test "should get index" do
    get :index
    assert_response :success
    assert_not_nil assigns(:posts)
  end

  test "should get new" do
    get :new
    assert_response :success
  end

  test "should create post" do
    assert_difference('Post.count') do
      post :create, params: { post: { content: @post.content, name: @post.name, title: @post.title } }
    end

    assert_redirected_to post_path(assigns(:post))
  end

  test "should show post" do
    get :show, params: { id: @post }
    assert_response :success
  end

  test "should get edit" do
    get :edit, params: { id: @post }
    assert_response :success
  end

  test "should update post" do
    put :update, params: { id: @post, post: { content: @post.content, name: @post.name, title: @post.title } }
    assert_redirected_to post_path(assigns(:post))
  end

  test "should destroy post" do
    assert_difference('Post.count', -1) do
      delete :destroy, params: { id: @post }
    end

    assert_redirected_to posts_path
  end
end
