require 'test_helper'

class TicketTest < ActiveSupport::TestCase
  #test "the truth" do
  #  assert true
  #end

  setup do
    @sample = Ticket.new
  end

  test "validity" do
    t = Ticket.create :title => 'test title', :email => 'blah@blah.com'
    assert t.valid?
    assert_equal t.title, 'test title'

    assert t.is_open
    t.close
    assert !t.is_open
    t.reopen
    assert t.is_open
    #user = LeapWebHelp::User.new(User.valid_attributes_hash)
    #user = LeapWebUsers::User.create

    #t.user = user

    #t.email = '' #invalid
    #assert !t.valid?
    #t.email = 'blah@blah.com, bb@jjj.org'
    #assert t.valid?
    t.email = 'bdlfjlkasfjklasjf' #invalid
    #p t.email_address
    #p t.email_address.strip =~ RFC822::EmailAddress
    assert !t.valid?
    t.reload.destroy
  end

  test "creation validated" do
    assert !@sample.is_creator_validated?
    #p current_user
    @sample.created_by = 22 #current_user
    assert @sample.is_creator_validated?
  end

=begin
# TODO: do once have current_user stuff in order
  test "code if & only if not creator-validated" do
    User.current_test = nil
    t1 = Ticket.create :title => 'test title'
    assert_not_nil t1.code
    assert_nil t1.created_by

    User.current_test = 4
    t2 = Ticket.create :title => 'test title'
    assert_nil t2.code
    assert_not_nil t2.created_by
  end
=end


  test "find tickets user commented on" do

    # clear old tickets just in case
    # this will cause RestClient::ResourceNotFound errors if there are multiple copies of the same ticket returned
    Ticket.by_includes_post_by.key('123').each {|t| t.destroy}
    # TODO: the by_includes_post_by view is only used for tests. Maybe we should get rid of it and change the test to including ordering?


    testticket = Ticket.create :title => "test retrieving commented tickets"
    comment = TicketComment.new :body => "my email broke", :posted_by => "123"
    assert_equal 0, testticket.comments.count
    assert_equal [], Ticket.by_includes_post_by.key('123').all

    testticket.comments << comment
    testticket.save
    assert_equal 1, testticket.reload.comments.count
    assert_equal [testticket], Ticket.by_includes_post_by.key('123').all

    comment = TicketComment.new :body => "another comment", :posted_by => "123"
    testticket.comments << comment
    testticket.save

    # this will ensure that the ticket is only included once, even though the user has commented on the ticket twice:
    assert_equal [testticket], Ticket.by_includes_post_by.key('123').all

    testticket.destroy
    assert_equal [], Ticket.by_includes_post_by.key('123').all;
  end

end