@@ -483,6 +483,82 @@ public void testChangedCustomMetadataSet() {
483483 assertThat (event .changedCustomProjectMetadataSet (), containsInAnyOrder (customProjectMetadata .getWriteableName ()));
484484 }
485485
486+ public void testChangedCustomProjectMetadataSet () {
487+ final CustomProjectMetadata custom1 = new CustomProjectMetadata ("custom1" );
488+ final CustomProjectMetadata custom2 = new CustomProjectMetadata ("custom2" );
489+ final ProjectMetadata project1 = ProjectMetadata .builder (randomUniqueProjectId ())
490+ .putCustom (custom1 .getWriteableName (), custom1 ).build ();
491+ final ProjectMetadata project2 = ProjectMetadata .builder (randomUniqueProjectId ())
492+ .putCustom (custom2 .getWriteableName (), custom2 ).build ();
493+
494+ final ClusterState originalState = ClusterState .builder (TEST_CLUSTER_NAME )
495+ .metadata (Metadata .builder ().put (project1 ).build ())
496+ .build ();
497+
498+ // No changes
499+ {
500+ ClusterState newState = ClusterState .builder (originalState ).build ();
501+ ClusterChangedEvent event = new ClusterChangedEvent ("_na_" , newState , originalState );
502+ // existing project
503+ assertTrue (event .changedCustomProjectMetadataSet (project1 .id ()).isEmpty ());
504+ // non-existing project
505+ assertTrue (event .changedCustomProjectMetadataSet (project2 .id ()).isEmpty ());
506+ }
507+
508+ // Add custom to existing project
509+ {
510+ ClusterState newState = ClusterState .builder (originalState )
511+ .putProjectMetadata (ProjectMetadata .builder (project1 ).putCustom (custom2 .getWriteableName (), custom2 ).build ())
512+ .build ();
513+ ClusterChangedEvent event = new ClusterChangedEvent ("_na_" , newState , originalState );
514+ assertEquals (Set .of (custom2 .getWriteableName ()), event .changedCustomProjectMetadataSet (project1 .id ()));
515+ }
516+
517+ // Remove custom from existing project
518+ {
519+ ClusterState newState = ClusterState .builder (originalState )
520+ .putProjectMetadata (ProjectMetadata .builder (project1 ).removeCustom (custom1 .getWriteableName ()).build ())
521+ .build ();
522+ ClusterChangedEvent event = new ClusterChangedEvent ("_na_" , newState , originalState );
523+ assertEquals (Set .of (custom1 .getWriteableName ()), event .changedCustomProjectMetadataSet (project1 .id ()));
524+ }
525+
526+ // Add new project with custom
527+ {
528+ ClusterState newState = ClusterState .builder (originalState )
529+ .putProjectMetadata (ProjectMetadata .builder (project2 ).build ())
530+ .build ();
531+ ClusterChangedEvent event = new ClusterChangedEvent ("_na_" , newState , originalState );
532+ assertEquals (Set .of (IndexGraveyard .TYPE , custom2 .getWriteableName ()), event .changedCustomProjectMetadataSet (project2 .id ()));
533+ // No change to other project
534+ assertTrue (event .changedCustomProjectMetadataSet (project1 .id ()).isEmpty ());
535+ }
536+
537+ // remove project
538+ {
539+ ClusterState oldState = ClusterState .builder (originalState ).putProjectMetadata (ProjectMetadata .builder (project2 ).build ())
540+ .build ();
541+ // project2 is removed
542+ ClusterState newState = originalState ;
543+ ClusterChangedEvent event = new ClusterChangedEvent ("_na_" , newState , oldState );
544+ assertEquals (Set .of (IndexGraveyard .TYPE , custom2 .getWriteableName ()), event .changedCustomProjectMetadataSet (project2 .id ()));
545+ // No change to other project
546+ assertTrue (event .changedCustomProjectMetadataSet (project1 .id ()).isEmpty ());
547+ }
548+
549+ // add custom to project1 + remove project2
550+ {
551+ ClusterState oldState = ClusterState .builder (originalState ).putProjectMetadata (ProjectMetadata .builder (project2 ).build ())
552+ .build ();
553+ ClusterState newState = ClusterState .builder (originalState )
554+ .putProjectMetadata (ProjectMetadata .builder (project1 ).putCustom (custom2 .getWriteableName (), custom2 ).build ())
555+ .build ();
556+ ClusterChangedEvent event = new ClusterChangedEvent ("_na_" , newState , oldState );
557+ assertEquals (Set .of (IndexGraveyard .TYPE , custom2 .getWriteableName ()), event .changedCustomProjectMetadataSet (project2 .id ()));
558+ assertEquals (Set .of (custom2 .getWriteableName ()), event .changedCustomProjectMetadataSet (project1 .id ()));
559+ }
560+ }
561+
486562 public void testChangedCustomMetadataSetMultiProject () {
487563 final CustomProjectMetadata project1Custom = new CustomProjectMetadata ("project1" );
488564 final CustomProjectMetadata project2Custom = new CustomProjectMetadata ("project2" );
0 commit comments