require 'test_helper'

module Workarea
  module Admin
    class ReleaseCalendarViewModelTest < TestCase
      setup :set_release

      def set_release
        @release = create_release
      end

      def test_days_returns_a_month_hash_containing_published_releases_by_day
        @release.published_at = Time.current
        @release.save!

        view_model = ReleaseCalendarViewModel.new(@release)
        day = view_model.days[Time.current.strftime('%Y-%m-%d').to_s]

        assert_equal(1, day.length)
        assert_equal(@release.id, day.first.id)
      end

      def test_days_returns_a_month_hash_containing_scheduled_releases_by_day
        @release.publish_at = Time.current + 1.day
        @release.save!

        view_model = ReleaseCalendarViewModel.new(@release)
        day = view_model.days[(Time.current + 1.day).strftime('%Y-%m-%d').to_s]

        assert_equal(1, day.length)
        assert_equal(@release.id, day.first.id)
      end

      def test_prev_week
        view_model = ReleaseCalendarViewModel.new(@release)
        assert_equal(Time.zone.today - 1.week, view_model.prev_week)
      end

      def test_next_week
        view_model = ReleaseCalendarViewModel.new(@release)
        assert_equal(Time.zone.today + 1.week, view_model.next_week)
      end

      def test_weekdays
        view_model = ReleaseCalendarViewModel.new(@release)

        assert_equal(7, view_model.weekdays.length)
        assert_equal('Sun', view_model.weekdays.first)
        assert_equal('Sat', view_model.weekdays.last)
      end

      def test_start_date_returns_today_s_date_if_no_start_date_supplied
        view_model = ReleaseCalendarViewModel.new(@release)
        assert_equal(Time.zone.today, view_model.start_date)
      end

      def test_start_date_returns_the_supplied_start_date
        options = { start_date: Time.zone.today + 1.month }
        view_model = ReleaseCalendarViewModel.new(@release, options)

        assert_equal(Time.zone.today + 1.month, view_model.start_date)
      end

      def test_unscheduled
        view_model = ReleaseCalendarViewModel.new(@release)

        assert_equal(1, view_model.unscheduled.length)
        assert_equal('Content Release', view_model.unscheduled.first.name)
      end
    end
  end
end