require "spec_helper"

describe Refills::ImportGenerator, type: :generator do
  SNIPPETS = {
    accordion: %w[scss js erb],
    accordion_tabs: %w[scss js erb],
    animate: %w[scss js erb],
    badges: %w[scss erb],
    breadcrumbs: %w[scss erb],
    button_group: %w[scss erb],
    cards: %w[scss erb],
    centered_navigation: %w[scss js erb],
    code: %w[erb],
    comment: %w[scss erb],
    device: %w[scss erb],
    dropdown: %w[scss js erb],
    footer: %w[scss erb],
    grid_items: %w[scss erb],
    grid_items_lines: %w[scss erb],
    hero: %w[scss erb],
    hover_tile_animation: %w[scss erb],
    icon_bullet_points: %w[scss erb],
    image_gradient_dynamic: %w[scss erb],
    modal: %w[scss js erb],
    navigation: %w[scss js erb],
    pagination: %w[scss erb],
    progress_bar: %w[scss erb],
    progress_bar_indication: %w[scss erb],
    search_bar: %w[scss erb],
    search_tools: %w[scss js erb],
    side_image: %w[scss erb],
    sliding_panel: %w[scss js erb],
    snippet: %w[erb],
    switch: %w[scss erb],
    tables: %w[scss erb],
    tables_minimal: %w[scss erb],
    "texture-legend" => %w[scss],
    textures: %w[scss erb],
    tooltip: %w[scss erb],
    type_system_geometric: %w[scss erb],
    type_system_rounded: %w[scss erb],
    type_system_sans: %w[scss erb],
    type_system_serif: %w[scss erb],
    type_system_slab: %w[scss erb],
    type_system_traditional: %w[scss erb],
    vertical_tabs: %w[scss js erb],
    video: %w[scss erb],
  }

  destination File.expand_path("../../tmp", File.dirname(__FILE__))

  before do
    ensure_previous_snippets_removed
  end

  SNIPPETS.each do |snippet, templates|
    snippet   = snippet.to_s

    if templates.include?("scss")
      it "imports SCSS file for #{snippet.humanize}" do
        run_generator [ snippet ]

        assert_file "app/assets/stylesheets/refills/_#{snippet.dasherize}.scss"
      end
    end

    if templates.include?("erb")
      it "imports ERB template for #{snippet.humanize}" do
        run_generator [ snippet ]

        assert_file "app/views/refills/_#{snippet.underscore}.html.erb"
      end
    end

    if templates.include?("js")
      it "imports JS file for #{snippet.humanize}" do
        run_generator [snippet]

        assert_file(
          "app/assets/javascripts/refills/#{snippet.underscore}.js"
        )
        assert_no_file(
          "app/assets/javascripts/refills/#{snippet.underscore}.coffee"
        )
      end

      context "with --coffee" do
        it "imports Coffee file for #{snippet.humanize}" do
          run_generator [snippet, "--coffee"]

          assert_file(
            "app/assets/javascripts/refills/#{snippet.underscore}.coffee"
          )
          assert_no_file(
            "app/assets/javascripts/refills/#{snippet.underscore}.js"
          )
        end
      end
    end

  end

  def ensure_previous_snippets_removed
    prepare_destination
  end
end
