new_contents: # Copyright 2022 ACSONE SA/NV
  # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
  
  from freezegun.api import freeze_time
  
  from odoo import fields
  from odoo.tests import Form
  from odoo.tests.common import SavepointCase
  
  from .common import ContractSaleCommon
  
  
  def to_date(date):
      return fields.Date.to_date(date)
  
  
  today = "2020-01-15"
  
  
  class TestContractSale(ContractSaleCommon, SavepointCase):
      @classmethod
      def setUpClass(cls):
          super().setUpClass()
          cls.contract_obj = cls.env["contract.contract"]
  
      @classmethod
      def _create_contract(cls):
          cls.contract = cls.contract.create(
              {
                  "name": "Test Contract",
                  "partner_id": cls.partner.id,
              }
          )
          with Form(cls.contract) as contract_form:
              contract_form.partner_id = cls.partner
              contract_form.generation_type = "sale"
              contract_form.group_id = cls.analytic_account
          cls.contract = contract_form.save()
  
      def test_contract_next_date(self):
          """
          Change recurrence to weekly
          Check the recurring next date value on lines
          """
          with freeze_time(today):
              self._create_contract()
          self.contract.recurring_rule_type = "weekly"
          with freeze_time(today):
              with Form(self.contract) as contract_form:
                  with contract_form.contract_line_ids.new() as line_form:
                      line_form.product_id = self.product_1
                      line_form.name = "Services from #START# to #END#"
                      line_form.quantity = 1
                      line_form.price_unit = 100.0
                      line_form.discount = 50
                      line_form.recurring_rule_type = "weekly"
  
          with freeze_time(today):
              with Form(self.contract) as contract_form:
                  with contract_form.contract_line_ids.new() as line_form:
                      line_form.product_id = self.product_1
                      line_form.name = "Services from #START# to #END#"
                      line_form.quantity = 2
                      line_form.price_unit = 50.0
                      line_form.recurring_rule_type = "weekly"
  
          self.assertEqual(
              fields.Date.to_date("2020-01-15"), self.contract.recurring_next_date
          )
  
          self.contract.recurring_create_sale()
          self.assertEqual(
              fields.Date.to_date("2020-01-22"), self.contract.recurring_next_date
          )
          self.contract.recurring_create_sale()
          self.assertEqual(
              fields.Date.to_date("2020-01-29"), self.contract.recurring_next_date
          )
  
subject: Add tests with another recurrency