# frozen_string_literal: true

require 'test_helper'

class AttachmentFilesControllerTest < ActionController::TestCase
  tests Ckeditor::AttachmentFilesController

  def setup
    @attachment = fixture_file_upload('files/rails.tar.gz', 'application/x-gzip')
    @routes = Ckeditor::Engine.routes
  end

  def teardown
    Ckeditor::AttachmentFile.destroy_all
  end

  test 'index action' do
    get :index

    assert_equal 200, @response.status
    assert_template 'ckeditor/attachment_files/index'
  end

  test 'create action via filebrowser' do
    assert_difference 'Ckeditor::AttachmentFile.count' do
      post :create, params: { qqfile: @attachment }
    end

    assert_equal 200, @response.status
  end

  test 'create action via CKEditor upload form' do
    assert_difference 'Ckeditor::AttachmentFile.count' do
      post :create, params: { upload: @attachment, CKEditor: 'ckeditor_field' }
    end

    assert_equal 200, @response.status
  end

  test 'create action via html5 upload' do
    params = { qqfile: @attachment.original_filename }

    assert_difference 'Ckeditor::AttachmentFile.count' do
      post :create, params: params, body: @attachment.read
    end

    assert_equal 200, @response.status
  end

  test 'invalid params for create action' do
    assert_no_difference 'Ckeditor::AttachmentFile.count' do
      post :create, params: { qqfile: nil, format: :html }
    end
  end

  test 'destroy action via filebrowser' do
    @attachment_file = Ckeditor::AttachmentFile.create data: @attachment

    assert_difference 'Ckeditor::AttachmentFile.count', -1 do
      delete :destroy, params: { id: @attachment_file.id }
    end

    assert_equal 302, @response.status
  end
end
