# typed: strict
# frozen_string_literal: true

require "rubocops/rubocop-cask"

RSpec.describe RuboCop::Cop::Cask::Desc, :config do
  it "does not start with an article" do
    expect_no_offenses <<~RUBY
      cask "foo" do
        desc "Bar program"
      end
    RUBY

    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foo' do
        desc 'A bar program'
              ^ Description shouldn't start with an article.
      end
    RUBY

    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foo' do
        desc 'The bar program'
              ^^^ Description shouldn't start with an article.
      end
    RUBY

    expect_correction <<~RUBY
      cask 'foo' do
        desc 'Bar program'
      end
    RUBY
  end

  it "does not start with the cask name" do
    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foobar' do
        desc 'Foo bar program'
              ^^^^^^^ Description shouldn't start with the cask name.
      end
    RUBY

    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foobar' do
        desc 'Foo-Bar program'
              ^^^^^^^ Description shouldn't start with the cask name.
      end
    RUBY

    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foo-bar' do
        desc 'Foo bar program'
              ^^^^^^^ Description shouldn't start with the cask name.
      end
    RUBY

    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foo-bar' do
        desc 'Foo-Bar program'
              ^^^^^^^ Description shouldn't start with the cask name.
      end
    RUBY

    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foo-bar' do
        desc 'Foo Bar'
              ^^^^^^^ Description shouldn't start with the cask name.
      end
    RUBY
  end

  it "does not contain the platform" do
    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foo-bar' do
        desc 'macOS status bar monitor'
              ^^^^^ Description shouldn't contain the platform.
      end
    RUBY

    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foo-bar' do
        desc 'Toggles dark mode on macOS Catalina'
                                   ^^^^^ Description shouldn't contain the platform.
      end
    RUBY

    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foo-bar' do
        desc 'Better input source switcher for OS X'
                                               ^^^^ Description shouldn't contain the platform.
      end
    RUBY

    expect_offense <<~RUBY, "/homebrew-cask/Casks/foo.rb"
      cask 'foo-bar' do
        desc 'Media Manager for Mac OS X'
                                ^^^^^^^^ Description shouldn't contain the platform.
      end
    RUBY

    expect_no_offenses <<~RUBY
      cask 'foo' do
        desc 'Application for managing macOS virtual machines'
      end
    RUBY

    expect_offense <<~RUBY
      cask 'foo' do
        desc 'Application for managing macOS virtual machines on macOS'
                                                                 ^^^^^ Description shouldn't contain the platform.
      end
    RUBY

    expect_offense <<~RUBY
      cask 'foo' do
        desc 'Description with a 🍺 symbol'
                                 ^ Description shouldn't contain Unicode emojis or symbols.
      end
    RUBY

    expect_no_offenses <<~RUBY
      cask 'foo' do
        desc 'MAC address changer'
      end
    RUBY
  end
end
