# frozen_string_literal: true

require_relative 'book_test_helper'
class PartTest < Test::Unit::TestCase
  include BookTestHelper

  def test_initialize
    book = Book::Base.new
    part = Book::Part.new(book, nil, nil)
    assert_equal nil, part.number
    assert_equal nil, part.chapters
    assert_equal '', part.name

    part = Book::Part.new(book, 123, [], 'name')
    assert_equal 123, part.number
    assert_equal [], part.chapters
    assert_equal 'name', part.name
  end

  def test_each_chapter
    part = Book::Part.new(nil, nil, [1, 2, 3])

    tmp = []
    part.each_chapter { |ch| tmp << ch }
    assert_equal [1, 2, 3], tmp
  end

  def test_volume
    book = Book::Base.new
    part = Book::Part.new(book, nil, [])
    assert part.volume
    assert_equal 0, part.volume.bytes
    assert_equal 0, part.volume.chars
    assert_equal 0, part.volume.lines

    chs = []
    tfs = [] ## prevent from removing Tempfile
    Tempfile.open('part_test') do |o|
      o.print '12345'
      chs << Book::Chapter.new(book, nil, nil, o.path)
      tfs << o
    end
    Tempfile.open('part_test') do |o|
      o.print '67890'
      chs << Book::Chapter.new(book, nil, nil, o.path)
      tfs << o
    end

    part = Book::Part.new(book, nil, chs)
    assert part.volume
    assert part.volume.bytes == 0
    assert part.volume.chars == 0
    assert part.volume.lines == 0
  end
end
