#!/usr/bin/env ruby
gem 'minitest', '>= 5.0.0'
require 'minitest/autorun'
require_relative 'kindergarten_garden'

class GardenTest < Minitest::Test
  def test_alices_garden
    garden = Garden.new("RC\nGG")
    assert_equal [:radishes, :clover, :grass, :grass], garden.alice
  end

  def test_different_garden_for_alice
    skip
    garden = Garden.new("VC\nRC")
    assert_equal [:violets, :clover, :radishes, :clover], garden.alice
  end

  def test_bobs_garden
    skip
    garden = Garden.new("VVCG\nVVRC")
    assert_equal [:clover, :grass, :radishes, :clover], garden.bob
  end

  def test_bob_and_charlies_gardens
    skip
    garden = Garden.new("VVCCGG\nVVCCGG")
    assert_equal [:clover, :clover, :clover, :clover], garden.bob
    assert_equal [:grass, :grass, :grass, :grass], garden.charlie
  end
end

class TestFullGarden < Minitest::Test
  def setup
    skip
    diagram = "VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"
    @garden = Garden.new(diagram)
  end

  attr_reader :garden

  def test_alice
    skip
    assert_equal [:violets, :radishes, :violets, :radishes], garden.alice
  end

  def test_bob
    skip
    assert_equal [:clover, :grass, :clover, :clover], garden.bob
  end

  def test_charlie
    skip
    assert_equal [:violets, :violets, :clover, :grass], garden.charlie
  end

  def test_david
    skip
    assert_equal [:radishes, :violets, :clover, :radishes], garden.david
  end

  def test_eve
    skip
    assert_equal [:clover, :grass, :radishes, :grass], garden.eve
  end

  def test_fred
    skip
    assert_equal [:grass, :clover, :violets, :clover], garden.fred
  end

  def test_ginny
    skip
    assert_equal [:clover, :grass, :grass, :clover], garden.ginny
  end

  def test_harriet
    skip
    assert_equal [:violets, :radishes, :radishes, :violets], garden.harriet
  end

  def test_ileana
    skip
    assert_equal [:grass, :clover, :violets, :clover], garden.ileana
  end

  def test_joseph
    skip
    assert_equal [:violets, :clover, :violets, :grass], garden.joseph
  end

  def test_kincaid
    skip
    assert_equal [:grass, :clover, :clover, :grass], garden.kincaid
  end

  def test_larry
    skip
    assert_equal [:grass, :violets, :clover, :violets], garden.larry
  end
end

class DisorderedTest < Minitest::Test
  def setup
    skip
    diagram = "VCRRGVRG\nRVGCCGCV"
    students = %w(Samantha Patricia Xander Roger)
    @garden = Garden.new(diagram, students)
  end

  attr_reader :garden

  def test_patricia
    skip
    assert_equal [:violets, :clover, :radishes, :violets], garden.patricia
  end

  def test_roger
    skip
    assert_equal [:radishes, :radishes, :grass, :clover], garden.roger
  end

  def test_samantha
    skip
    assert_equal [:grass, :violets, :clover, :grass], garden.samantha
  end

  def test_xander
    skip
    assert_equal [:radishes, :grass, :clover, :violets], garden.xander
  end
end

class TwoGardensDifferentStudents < Minitest::Test
  def diagram
    "VCRRGVRG\nRVGCCGCV"
  end

  def garden_1
    @garden_1 ||= Garden.new(diagram, %w(Alice Bob Charlie Dan))
  end

  def garden_2
    @garden_2 ||= Garden.new(diagram, %w(Bob Charlie Dan Erin))
  end

  def test_bob_and_charlie_per_garden
    skip
    assert_equal [:radishes, :radishes, :grass, :clover], garden_1.bob
    assert_equal [:violets, :clover, :radishes, :violets], garden_2.bob
    assert_equal [:grass, :violets, :clover, :grass], garden_1.charlie
    assert_equal [:radishes, :radishes, :grass, :clover], garden_2.charlie
  end
end