@@ -38,6 +38,14 @@ def setUpClass(cls):
3838 ("company_id" , "=" , cls .env .ref ("base.main_company" ).id ),
3939 ]
4040 )[0 ]
41+
42+ cls .bank_journal = cls .env ["account.journal" ].search (
43+ [
44+ ("type" , "=" , "bank" ),
45+ ("company_id" , "=" , cls .env .ref ("base.main_company" ).id ),
46+ ]
47+ )[0 ]
48+
4149 cls .pricelist1 = cls .env ["product.pricelist" ].create (
4250 {
4351 "name" : "pricelist for contract test" ,
@@ -116,6 +124,14 @@ def setUpClass(cls):
116124 }
117125 )
118126
127+ cls .tmpl6 = cls .create_sub_template (
128+ {
129+ "recurring_rule_boundary" : "unlimited" ,
130+ "invoicing_mode" : "invoice_and_payment" ,
131+ "recurring_rule_type" : "years" ,
132+ }
133+ )
134+
119135 cls .stage = cls .env ["sale.subscription.stage" ].create (
120136 {
121137 "name" : "Test Sub Stage" ,
@@ -193,6 +209,14 @@ def setUpClass(cls):
193209 }
194210 )
195211
212+ cls .sub10 = cls .create_sub (
213+ {
214+ "template_id" : cls .tmpl6 .id ,
215+ "recurring_rule_boundary" : False ,
216+ "date_start" : fields .Date .today (),
217+ }
218+ )
219+
196220 cls .sub_line = cls .create_sub_line (cls .sub1 )
197221 cls .sub_line2 = cls .env ["sale.subscription.line" ].create (
198222 {
@@ -210,6 +234,7 @@ def setUpClass(cls):
210234 cls .sub_line52 = cls .create_sub_line (cls .sub5 , cls .product_2 .id )
211235 cls .sub_line71 = cls .create_sub_line (cls .sub7 )
212236 cls .sub_line72 = cls .create_sub_line (cls .sub7 , cls .product_2 .id )
237+ cls .sub_line102 = cls .create_sub_line (cls .sub10 , cls .product_2 .id )
213238
214239 cls .close_reason = cls .env ["sale.subscription.close.reason" ].create (
215240 {
@@ -253,6 +278,44 @@ def setUpClass(cls):
253278 }
254279 )
255280
281+ cls .account_payment_method = cls .env ["account.payment.method" ].create (
282+ {
283+ "name" : "Test Payment Method" ,
284+ "code" : "none" ,
285+ "payment_type" : "inbound" ,
286+ }
287+ )
288+
289+ account_payment_method_line = cls .env ["account.payment.method.line" ].create (
290+ {
291+ "payment_method_id" : cls .account_payment_method .id ,
292+ "company_id" : cls .env .ref ("base.main_company" ).id ,
293+ "name" : "Test Method Line" ,
294+ }
295+ )
296+
297+ cls .journal = cls .env ["account.journal" ].create (
298+ {
299+ "name" : "Test Journal" ,
300+ "type" : "bank" ,
301+ "company_id" : cls .env .ref ("base.main_company" ).id ,
302+ "code" : "TESTJNL" ,
303+ "inbound_payment_method_line_ids" : [
304+ (4 , account_payment_method_line .id )
305+ ],
306+ }
307+ )
308+
309+ cls .provider_test = cls .env ["payment.provider" ].create (
310+ {
311+ "name" : "Test Provider for Subscriptions" ,
312+ "code" : "none" ,
313+ "company_id" : cls .env .ref ("base.main_company" ).id ,
314+ "journal_id" : cls .journal .id ,
315+ "state" : "test" ,
316+ }
317+ )
318+
256319 @classmethod
257320 def create_sub_template (cls , vals ):
258321 code = str (uuid .uuid4 ().hex )
@@ -541,7 +604,7 @@ def test_subscription_oca_sub_stage(self):
541604
542605 def test_x_subscription_oca_pricelist_related (self ):
543606 res = self .partner .read (["subscription_count" , "subscription_ids" ])
544- self .assertEqual (res [0 ]["subscription_count" ], 9 )
607+ self .assertEqual (res [0 ]["subscription_count" ], 10 )
545608 res = self .partner .action_view_subscription_ids ()
546609 self .assertIsInstance (res , dict )
547610 sale_order = self .sub1 .create_sale_order ()
@@ -692,3 +755,24 @@ def _collect_all_sub_test_results(self, subscription):
692755 )
693756 test_res .append (group_stage_ids )
694757 return test_res
758+
759+ def test_subscription_invoice_and_payment (self ):
760+ subscription = self .sub10
761+ subscription .generate_invoice ()
762+ self .assertEqual (len (subscription .invoice_ids ), 1 )
763+ self .assertEqual (subscription .invoice_ids .state , "posted" )
764+ self .env ["payment.token" ].create (
765+ {
766+ "payment_details" : "1234" ,
767+ "provider_id" : self .provider_test .id ,
768+ "partner_id" : self .partner .id ,
769+ "provider_ref" : "provider Ref (TEST)" ,
770+ "active" : True ,
771+ }
772+ )
773+ subscription .generate_invoice ()
774+ self .assertEqual (len (subscription .invoice_ids ), 2 )
775+ last_invoice = subscription .invoice_ids [- 1 ]
776+ self .assertEqual (last_invoice .state , "posted" )
777+ payments = last_invoice .payment_ids
778+ self .assertEqual (len (payments ), 0 )
0 commit comments