@@ -396,6 +396,72 @@ def test_enable_v2_versioning__scheduled_changes_exist__converts_published_sched
396396 )
397397
398398
399+ def test_enable_v2_versioning__multi_feature_scheduled_changes__each_efv_matches_feature (
400+ environment : Environment ,
401+ project : Project ,
402+ feature : Feature ,
403+ staff_user : FFAdminUser ,
404+ ) -> None :
405+ # Given
406+ now = timezone .now ()
407+ one_hour_from_now = now + timedelta (hours = 1 )
408+ two_hours_from_now = now + timedelta (hours = 2 )
409+
410+ feature_b = Feature .objects .create (name = "feature_b" , project = project )
411+ feature_c = Feature .objects .create (name = "feature_c" , project = project )
412+
413+ cr_b = ChangeRequest .objects .create (
414+ environment = environment ,
415+ title = "Scheduled change for feature_b" ,
416+ user = staff_user ,
417+ )
418+ scheduled_fs_b = FeatureState .objects .create (
419+ feature = feature_b ,
420+ enabled = True ,
421+ environment = environment ,
422+ live_from = one_hour_from_now ,
423+ change_request = cr_b ,
424+ version = None ,
425+ )
426+ cr_b .commit (staff_user )
427+
428+ cr_c = ChangeRequest .objects .create (
429+ environment = environment ,
430+ title = "Scheduled change for feature_c" ,
431+ user = staff_user ,
432+ )
433+ scheduled_fs_c = FeatureState .objects .create (
434+ feature = feature_c ,
435+ enabled = True ,
436+ environment = environment ,
437+ live_from = two_hours_from_now ,
438+ change_request = cr_c ,
439+ version = None ,
440+ )
441+ cr_c .commit (staff_user )
442+
443+ # When
444+ enable_v2_versioning (environment .id )
445+
446+ # Then
447+ scheduled_fs_b .refresh_from_db ()
448+ scheduled_fs_c .refresh_from_db ()
449+
450+ assert scheduled_fs_b .environment_feature_version is not None
451+ assert scheduled_fs_b .environment_feature_version .feature_id == feature_b .id , (
452+ f"scheduled FS for feature_b is bound to an EFV for "
453+ f"feature_id={ scheduled_fs_b .environment_feature_version .feature_id } ; "
454+ f"expected { feature_b .id } "
455+ )
456+
457+ assert scheduled_fs_c .environment_feature_version is not None
458+ assert scheduled_fs_c .environment_feature_version .feature_id == feature_c .id , (
459+ f"scheduled FS for feature_c is bound to an EFV for "
460+ f"feature_id={ scheduled_fs_c .environment_feature_version .feature_id } ; "
461+ f"expected { feature_c .id } "
462+ )
463+
464+
399465def test_publish_version_change_set__conflict_with_scheduled_change__sends_conflict_email_to_owner (
400466 feature : Feature ,
401467 environment_v2_versioning : Environment ,
0 commit comments