# Code Review plugin for Redmine
# Copyright (C) 2009-2022  Haruyuki Iida
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')

class CodeReviewTest < ActiveSupport::TestCase
  fixtures :code_reviews, :projects, :users, :repositories, :changesets,
    :changes, :issues, :issue_statuses, :enumerations, :issue_categories,
    :trackers, :projects_trackers, :attachments

  # Create new object.
  def test_create
    code_review = CodeReview.new
    code_review.issue = Issue.new
    assert !code_review.save
    code_review.project_id = 1
    code_review.issue.project_id = 1
    code_review.comment = "aaa"
    code_review.user_id = 1
    code_review.change_id = 1
    code_review.updated_by_id = 1
    code_review.subject = "aaa"
    code_review.action_type = 'diff'
    code_review.line = 20

    assert code_review.save

    code_review.destroy
  end

  def test_close
    code_review = newreview
    assert !code_review.is_closed?
    code_review.close
    assert code_review.is_closed?
  end

  def test_reopen
    code_review = newreview
    code_review.close
    assert code_review.is_closed?
    code_review.reopen
    assert !code_review.is_closed?
  end

  def test_committer
    code_review = CodeReview.find(1)
    assert_equal(3, code_review.committer.id)
  end

  def test_path
    code_review = CodeReview.find(1)
    assert_equal("/test/some/path/in/the/repo", code_review.path)

    code_review = CodeReview.new
    attachment = Attachment.find(1)
    code_review.attachment = attachment
    assert_equal("error281.txt", code_review.path)
  end

  def test_revision
    code_review = CodeReview.find(1)
    assert_equal("1", code_review.revision)
  end

  def test_repository
    code_review = CodeReview.find(1)
    assert_equal(10, code_review.repository.id)
  end

  def test_is_closed?
    review = CodeReview.find(9)
    assert !review.is_closed?
    review.status_id = 5
    review.save!
    review.issue.save!
    review = CodeReview.find(9)
    assert review.is_closed?
  end

  def test_subject
    review = CodeReview.find(9)
    assert_equal(review.subject, review.issue.subject)
    review.subject = "aaaa"
    assert_equal("aaaa", review.issue.subject)
  end

  def test_status_id
    review = CodeReview.find(9)
    assert_equal(review.status_id, review.issue.status_id)
    review.status_id = 5
    assert_equal(5, review.issue.status_id)
  end

  def test_user
    review = CodeReview.find(10)
    user = User.find(2)
    review.user = user
    issue = review.issue
    assert_equal(issue.author_id, 2)
  end

  def test_repository_identifier
    review = newreview
    review.change.changeset.repository_id = 10
    assert_equal("10", review.repository_identifier)
    review.repository_id = "testparam"
    assert_equal("testparam", review.repository_id)
  end

  private

  def newreview
    code_review = CodeReview.new
    code_review.issue = Issue.new
    code_review.project_id = 1
    code_review.comment = "aaa"
    code_review.user_id = 1
    code_review.change_id = 1
    code_review.updated_by_id = 1
    return code_review
  end
end
