require "test_helper"

class Users::AvatarsControllerTest < ActionDispatch::IntegrationTest
  setup do
    sign_in_as :david
  end

  test "show system user" do
    get user_avatar_path(users(:system))

    assert_response :redirect
    assert_redirected_to ActionController::Base.helpers.image_path("system_user.png")
  end

  test "show own initials without caching" do
    get user_avatar_path(users(:david))
    assert_match "image/svg+xml", @response.content_type
    assert @response.cache_control[:private]
    assert_equal "0", @response.cache_control[:max_age]
  end

  test "show other initials with caching" do
    get user_avatar_path(users(:kevin))
    assert_match "image/svg+xml", @response.content_type
    assert @response.cache_control[:private]
    assert_equal 30.minutes.to_s, @response.cache_control[:max_age]
  end

  test "show own image redirects to the blob url" do
    users(:david).avatar.attach(io: File.open(file_fixture("moon.jpg")), filename: "moon.jpg", content_type: "image/jpeg")
    assert users(:david).avatar.attached?

    get user_avatar_path(users(:david))

    assert_redirected_to rails_blob_url(users(:david).avatar_thumbnail, disposition: "inline")
  end

  test "show other image redirects to the blob url" do
    users(:kevin).avatar.attach(io: File.open(file_fixture("moon.jpg")), filename: "moon.jpg", content_type: "image/jpeg")
    assert users(:kevin).avatar.attached?

    get user_avatar_path(users(:kevin))

    assert_redirected_to rails_blob_url(users(:kevin).avatar_thumbnail, disposition: "inline")
  end

  test "delete self" do
    delete user_avatar_path(users(:david))
    assert_redirected_to users(:david)
  end

  test "delete self as JSON" do
    delete user_avatar_path(users(:david)), as: :json
    assert_response :no_content
  end

  test "unable to delete other" do
    delete user_avatar_path(users(:kevin))
    assert_response :forbidden
  end
end
