require File.dirname(__FILE__) + '/../test_helper'

module Physical
  class DoTimesOverlapTestCase < Test::Unit::TestCase

    def setup
      @start_1 = Time.new
      @end_1 = @start_1 + 1.hour

      @before = @start_1 - 15.minutes
      @between = @start_1 + 15.minutes
      @between2 = @start_1 + 30.minutes
      @after = @end_1 + 15.minutes
      @after2 = @end_1 + 30.minutes
    end

    def do_times_overlap?(s1, e1, s2, e2)
      result = ActiveRecord::Base.connection.select_value("
        select do_times_overlap('#{s1}', '#{e1}', '#{s2}', '#{e2}')
      ")
      return (result == "t")
    end

    def test_do_times_overlap
    
      # przypadek 0 - emisje rozczne
      assert !do_times_overlap?(@start_1, @end_1, @after1, @after2)
     
      # przypadek 1 - druga emisja rozpoczyna si w trakcie pierwszej
      assert do_times_overlap?(@start_1, @end_1, @between, @after)

      # przypadek 2 - druga emisja koczy si w trakcie pierwszej
      assert do_times_overlap?(@start_1, @end_1, @before, @between)

      # przypadek 3 - druga emisja rozpoczyna si i koczy w trakcie pierwszej
      assert do_times_overlap?(@start_1, @end_1, @between, @between2)
    
      # przypadek 4 - pierwsza emisja rozpoczyna si i koczy w trakcie drugiej
      assert do_times_overlap?(@start_1, @end_1, @before, @after)

      # przypadek 5 - druga emisja rozpoczyna si bezporednio po zakoczeniu pierwszej
      assert !do_times_overlap?(@start_1, @end_1, @end_1, @after)

      # przypadek 6 - pierwsza emisja rozpoczyna si bezporednio po zakoczeniu drugiej
      assert !do_times_overlap?(@start_1, @end_1, @before, @start_1)
    end  

    def test_exceptional_cases_caught
      test_for_db_error("Bezsensowne wartoci parametrw pierwszej emisji") do
        do_times_overlap?(@end_1, @start_1, @before, @start_1)
      end
    end

    def test_exceptional_cases_caught_2
      test_for_db_error("Bezsensowne wartoci parametrw drugiej emisji") do
        do_times_overlap?(@start_1, @end_1, @after, @before)
      end
    end
  end
end  

