Unroll singly/batch AddReviewerSender tests

Ideally this could be accommodated by the test runner, but this class
hierarchy is annotated with @ConfigSuite and that doesn't play well with
@Parameterized.

We could produce the behavior we want with @ConfigSuite, but we intend
to merge this class with many others, and it doesn't make sense to run
all those methods twice just for the sake of a small subset of
AddReviewerSender tests.

Change-Id: I351c680810d209f1588388292b81211ae71e1062
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/mail/AddReviewerSenderIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/mail/AddReviewerSenderIT.java
index 2625b0e..48bac13 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/mail/AddReviewerSenderIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/mail/AddReviewerSenderIT.java
@@ -20,7 +20,6 @@
 import static com.google.gerrit.extensions.api.changes.NotifyHandling.OWNER_REVIEWERS;
 import static com.google.gerrit.extensions.client.GeneralPreferencesInfo.EmailStrategy.CC_ON_OWN_COMMENTS;
 
-import com.google.common.collect.ImmutableList;
 import com.google.gerrit.acceptance.AbstractNotificationTest;
 import com.google.gerrit.acceptance.TestAccount;
 import com.google.gerrit.common.Nullable;
@@ -31,6 +30,317 @@
 import org.junit.Test;
 
 public class AddReviewerSenderIT extends AbstractNotificationTest {
+  private void addReviewerToReviewableChangeInReviewDb(Adder adder) throws Exception {
+    assume().that(notesMigration.readChanges()).isFalse();
+    StagedChange sc = stageReviewableChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, sc.owner, reviewer.email);
+    assertThat(sender)
+        .sent("newchange", sc)
+        .to(reviewer)
+        .cc(sc.reviewer, sc.ccer)
+        .cc(sc.reviewerByEmail, sc.ccerByEmail)
+        .noOneElse();
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeInReviewDbSingly() throws Exception {
+    addReviewerToReviewableChangeInReviewDb(singly());
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeInReviewDbBatch() throws Exception {
+    addReviewerToReviewableChangeInReviewDb(batch());
+  }
+
+  private void addReviewerToReviewableChangeInNoteDb(Adder adder) throws Exception {
+    assume().that(notesMigration.readChanges()).isTrue();
+    StagedChange sc = stageReviewableChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, sc.owner, reviewer.email);
+    // TODO(logan): Should CCs be included?
+    assertThat(sender)
+        .sent("newchange", sc)
+        .to(reviewer)
+        .cc(sc.reviewer)
+        .cc(sc.reviewerByEmail, sc.ccerByEmail)
+        .noOneElse();
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeInNoteDbSingly() throws Exception {
+    addReviewerToReviewableChangeInNoteDb(singly());
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeInNoteDbBatch() throws Exception {
+    addReviewerToReviewableChangeInNoteDb(batch());
+  }
+
+  private void addReviewerToReviewableChangeByOwnerCcingSelfInNoteDb(Adder adder) throws Exception {
+    assume().that(notesMigration.readChanges()).isTrue();
+    StagedChange sc = stageReviewableChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, sc.owner, reviewer.email, CC_ON_OWN_COMMENTS, null);
+    // TODO(logan): Should CCs be included?
+    assertThat(sender)
+        .sent("newchange", sc)
+        .to(reviewer)
+        .cc(sc.owner, sc.reviewer)
+        .cc(sc.reviewerByEmail, sc.ccerByEmail)
+        .noOneElse();
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeByOwnerCcingSelfInNoteDbSingly() throws Exception {
+    addReviewerToReviewableChangeByOwnerCcingSelfInNoteDb(singly());
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeByOwnerCcingSelfInNoteDbBatch() throws Exception {
+    addReviewerToReviewableChangeByOwnerCcingSelfInNoteDb(batch());
+  }
+
+  private void addReviewerToReviewableChangeByOtherInNoteDb(Adder adder) throws Exception {
+    assume().that(notesMigration.readChanges()).isTrue();
+    TestAccount other = accountCreator.create("other", "other@example.com", "other");
+    StagedChange sc = stageReviewableChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, other, reviewer.email);
+    // TODO(logan): Should CCs be included?
+    assertThat(sender)
+        .sent("newchange", sc)
+        .to(reviewer)
+        .cc(sc.owner, sc.reviewer)
+        .cc(sc.reviewerByEmail, sc.ccerByEmail)
+        .noOneElse();
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeByOtherInNoteDbSingly() throws Exception {
+    addReviewerToReviewableChangeByOtherInNoteDb(singly());
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeByOtherInNoteDbBatch() throws Exception {
+    addReviewerToReviewableChangeByOtherInNoteDb(batch());
+  }
+
+  private void addReviewerToReviewableChangeByOtherCcingSelfInNoteDb(Adder adder) throws Exception {
+    assume().that(notesMigration.readChanges()).isTrue();
+    TestAccount other = accountCreator.create("other", "other@example.com", "other");
+    StagedChange sc = stageReviewableChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, other, reviewer.email, CC_ON_OWN_COMMENTS, null);
+    // TODO(logan): Should CCs be included?
+    assertThat(sender)
+        .sent("newchange", sc)
+        .to(reviewer)
+        .cc(sc.owner, sc.reviewer, other)
+        .cc(sc.reviewerByEmail, sc.ccerByEmail)
+        .noOneElse();
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeByOtherCcingSelfInNoteDbSingly() throws Exception {
+    addReviewerToReviewableChangeByOtherCcingSelfInNoteDb(singly());
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeByOtherCcingSelfInNoteDbBatch() throws Exception {
+    addReviewerToReviewableChangeByOtherCcingSelfInNoteDb(batch());
+  }
+
+  private void addReviewerByEmailToReviewableChangeInReviewDb(Adder adder) throws Exception {
+    assume().that(notesMigration.readChanges()).isFalse();
+    String email = "addedbyemail@example.com";
+    StagedChange sc = stageReviewableChange();
+    addReviewer(adder, sc.changeId, sc.owner, email);
+    assertThat(sender).notSent();
+  }
+
+  @Test
+  public void addReviewerByEmailToReviewableChangeInReviewDbSingly() throws Exception {
+    addReviewerByEmailToReviewableChangeInReviewDb(singly());
+  }
+
+  @Test
+  public void addReviewerByEmailToReviewableChangeInReviewDbBatch() throws Exception {
+    addReviewerByEmailToReviewableChangeInReviewDb(batch());
+  }
+
+  private void addReviewerByEmailToReviewableChangeInNoteDb(Adder adder) throws Exception {
+    assume().that(notesMigration.readChanges()).isTrue();
+    String email = "addedbyemail@example.com";
+    StagedChange sc = stageReviewableChange();
+    addReviewer(adder, sc.changeId, sc.owner, email);
+    // TODO(logan): Should CCs be included?
+    assertThat(sender)
+        .sent("newchange", sc)
+        .to(email)
+        .cc(sc.reviewer)
+        .cc(sc.reviewerByEmail, sc.ccerByEmail)
+        .noOneElse();
+  }
+
+  @Test
+  public void addReviewerByEmailToReviewableChangeInNoteDbSingly() throws Exception {
+    addReviewerByEmailToReviewableChangeInNoteDb(singly());
+  }
+
+  @Test
+  public void addReviewerByEmailToReviewableChangeInNoteDbBatch() throws Exception {
+    addReviewerByEmailToReviewableChangeInNoteDb(batch());
+  }
+
+  private void addReviewerToWipChange(Adder adder) throws Exception {
+    StagedChange sc = stageWipChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, sc.owner, reviewer.email);
+    assertThat(sender).notSent();
+  }
+
+  @Test
+  public void addReviewerToWipChangeSingly() throws Exception {
+    addReviewerToWipChange(singly());
+  }
+
+  @Test
+  public void addReviewerToWipChangeBatch() throws Exception {
+    addReviewerToWipChange(batch());
+  }
+
+  private void addReviewerToReviewableWipChange(Adder adder) throws Exception {
+    StagedChange sc = stageReviewableWipChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, sc.owner, reviewer.email);
+    assertThat(sender).notSent();
+  }
+
+  @Test
+  public void addReviewerToReviewableWipChangeSingly() throws Exception {
+    addReviewerToReviewableWipChange(singly());
+  }
+
+  @Test
+  public void addReviewerToReviewableWipChangeBatch() throws Exception {
+    addReviewerToReviewableWipChange(batch());
+  }
+
+  private void addReviewerToWipChangeInNoteDbNotifyAll(Adder adder) throws Exception {
+    assume().that(notesMigration.readChanges()).isTrue();
+    StagedChange sc = stageWipChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, sc.owner, reviewer.email, NotifyHandling.ALL);
+    // TODO(logan): Should CCs be included?
+    assertThat(sender)
+        .sent("newchange", sc)
+        .to(reviewer)
+        .cc(sc.reviewer)
+        .cc(sc.reviewerByEmail, sc.ccerByEmail)
+        .noOneElse();
+  }
+
+  @Test
+  public void addReviewerToWipChangeInNoteDbNotifyAllSingly() throws Exception {
+    addReviewerToWipChangeInNoteDbNotifyAll(singly());
+  }
+
+  @Test
+  public void addReviewerToWipChangeInNoteDbNotifyAllBatch() throws Exception {
+    addReviewerToWipChangeInNoteDbNotifyAll(batch());
+  }
+
+  private void addReviewerToWipChangeInReviewDbNotifyAll(Adder adder) throws Exception {
+    assume().that(notesMigration.readChanges()).isFalse();
+    StagedChange sc = stageWipChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, sc.owner, reviewer.email, NotifyHandling.ALL);
+    assertThat(sender)
+        .sent("newchange", sc)
+        .to(reviewer)
+        .cc(sc.reviewer, sc.ccer)
+        .cc(sc.reviewerByEmail, sc.ccerByEmail)
+        .noOneElse();
+  }
+
+  @Test
+  public void addReviewerToWipChangeInReviewDbNotifyAllSingly() throws Exception {
+    addReviewerToWipChangeInReviewDbNotifyAll(singly());
+  }
+
+  @Test
+  public void addReviewerToWipChangeInReviewDbNotifyAllBatch() throws Exception {
+    addReviewerToWipChangeInReviewDbNotifyAll(batch());
+  }
+
+  private void addReviewerToReviewableChangeInNoteDbNotifyOwnerReviewers(Adder adder)
+      throws Exception {
+    assume().that(notesMigration.readChanges()).isTrue();
+    StagedChange sc = stageReviewableChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, sc.owner, reviewer.email, OWNER_REVIEWERS);
+    // TODO(logan): Should CCs be included?
+    assertThat(sender)
+        .sent("newchange", sc)
+        .to(reviewer)
+        .cc(sc.reviewer)
+        .cc(sc.reviewerByEmail, sc.ccerByEmail)
+        .noOneElse();
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeInNoteDbNotifyOwnerReviewersSingly() throws Exception {
+    addReviewerToReviewableChangeInNoteDbNotifyOwnerReviewers(singly());
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeInNoteDbNotifyOwnerReviewersBatch() throws Exception {
+    addReviewerToReviewableChangeInNoteDbNotifyOwnerReviewers(batch());
+  }
+
+  private void addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyOwner(Adder adder)
+      throws Exception {
+    assume().that(notesMigration.readChanges()).isTrue();
+    StagedChange sc = stageReviewableChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, sc.owner, reviewer.email, CC_ON_OWN_COMMENTS, OWNER);
+    assertThat(sender).notSent();
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyOwnerSingly()
+      throws Exception {
+    addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyOwner(singly());
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyOwnerBatch()
+      throws Exception {
+    addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyOwner(batch());
+  }
+
+  private void addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyNone(Adder adder)
+      throws Exception {
+    assume().that(notesMigration.readChanges()).isTrue();
+    StagedChange sc = stageReviewableChange();
+    TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
+    addReviewer(adder, sc.changeId, sc.owner, reviewer.email, CC_ON_OWN_COMMENTS, NONE);
+    assertThat(sender).notSent();
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyNoneSingly()
+      throws Exception {
+    addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyNone(singly());
+  }
+
+  @Test
+  public void addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyNoneBatch()
+      throws Exception {
+    addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyNone(batch());
+  }
+
   private interface Adder {
     void addReviewer(String changeId, String reviewer, @Nullable NotifyHandling notify)
         throws Exception;
@@ -58,236 +368,6 @@
     };
   }
 
-  private interface Tester {
-    void test(Adder adder) throws Exception;
-  }
-
-  private void forAll(Tester tester) throws Exception {
-    for (Adder adder : ImmutableList.of(singly(), batch())) {
-      tester.test(adder);
-    }
-  }
-
-  @Test
-  public void addReviewerToReviewableChangeInReviewDb() throws Exception {
-    forAll(
-        adder -> {
-          assume().that(notesMigration.readChanges()).isFalse();
-          StagedChange sc = stageReviewableChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, sc.owner, reviewer.email);
-          assertThat(sender)
-              .sent("newchange", sc)
-              .to(reviewer)
-              .cc(sc.reviewer, sc.ccer)
-              .cc(sc.reviewerByEmail, sc.ccerByEmail)
-              .noOneElse();
-        });
-  }
-
-  @Test
-  public void addReviewerToReviewableChangeInNoteDb() throws Exception {
-    assume().that(notesMigration.readChanges()).isTrue();
-    forAll(
-        adder -> {
-          StagedChange sc = stageReviewableChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, sc.owner, reviewer.email);
-          // TODO(logan): Should CCs be included?
-          assertThat(sender)
-              .sent("newchange", sc)
-              .to(reviewer)
-              .cc(sc.reviewer)
-              .cc(sc.reviewerByEmail, sc.ccerByEmail)
-              .noOneElse();
-        });
-  }
-
-  @Test
-  public void addReviewerToReviewableChangeByOwnerCcingSelfInNoteDb() throws Exception {
-    assume().that(notesMigration.readChanges()).isTrue();
-    forAll(
-        adder -> {
-          StagedChange sc = stageReviewableChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, sc.owner, reviewer.email, CC_ON_OWN_COMMENTS, null);
-          // TODO(logan): Should CCs be included?
-          assertThat(sender)
-              .sent("newchange", sc)
-              .to(reviewer)
-              .cc(sc.owner, sc.reviewer)
-              .cc(sc.reviewerByEmail, sc.ccerByEmail)
-              .noOneElse();
-        });
-  }
-
-  @Test
-  public void addReviewerToReviewableChangeByOtherInNoteDb() throws Exception {
-    assume().that(notesMigration.readChanges()).isTrue();
-    TestAccount other = accountCreator.create("other", "other@example.com", "other");
-    forAll(
-        adder -> {
-          StagedChange sc = stageReviewableChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, other, reviewer.email);
-          // TODO(logan): Should CCs be included?
-          assertThat(sender)
-              .sent("newchange", sc)
-              .to(reviewer)
-              .cc(sc.owner, sc.reviewer)
-              .cc(sc.reviewerByEmail, sc.ccerByEmail)
-              .noOneElse();
-        });
-  }
-
-  @Test
-  public void addReviewerToReviewableChangeByOtherCcingSelfInNoteDb() throws Exception {
-    assume().that(notesMigration.readChanges()).isTrue();
-    TestAccount other = accountCreator.create("other", "other@example.com", "other");
-    forAll(
-        adder -> {
-          StagedChange sc = stageReviewableChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, other, reviewer.email, CC_ON_OWN_COMMENTS, null);
-          // TODO(logan): Should CCs be included?
-          assertThat(sender)
-              .sent("newchange", sc)
-              .to(reviewer)
-              .cc(sc.owner, sc.reviewer, other)
-              .cc(sc.reviewerByEmail, sc.ccerByEmail)
-              .noOneElse();
-        });
-  }
-
-  @Test
-  public void addReviewerByEmailToReviewableChangeInReviewDb() throws Exception {
-    assume().that(notesMigration.readChanges()).isFalse();
-    forAll(
-        adder -> {
-          String email = "addedbyemail@example.com";
-          StagedChange sc = stageReviewableChange();
-          addReviewer(adder, sc.changeId, sc.owner, email);
-          assertThat(sender).notSent();
-        });
-  }
-
-  @Test
-  public void addReviewerByEmailToReviewableChangeInNoteDb() throws Exception {
-    assume().that(notesMigration.readChanges()).isTrue();
-    forAll(
-        adder -> {
-          String email = "addedbyemail@example.com";
-          StagedChange sc = stageReviewableChange();
-          addReviewer(adder, sc.changeId, sc.owner, email);
-          // TODO(logan): Should CCs be included?
-          assertThat(sender)
-              .sent("newchange", sc)
-              .to(email)
-              .cc(sc.reviewer)
-              .cc(sc.reviewerByEmail, sc.ccerByEmail)
-              .noOneElse();
-        });
-  }
-
-  @Test
-  public void addReviewerToWipChange() throws Exception {
-    forAll(
-        adder -> {
-          StagedChange sc = stageWipChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, sc.owner, reviewer.email);
-          assertThat(sender).notSent();
-        });
-  }
-
-  @Test
-  public void addReviewerToReviewableWipChange() throws Exception {
-    forAll(
-        adder -> {
-          StagedChange sc = stageReviewableWipChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, sc.owner, reviewer.email);
-          assertThat(sender).notSent();
-        });
-  }
-
-  @Test
-  public void addReviewerToWipChangeInNoteDbNotifyAll() throws Exception {
-    forAll(
-        adder -> {
-          assume().that(notesMigration.readChanges()).isTrue();
-          StagedChange sc = stageWipChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, sc.owner, reviewer.email, NotifyHandling.ALL);
-          // TODO(logan): Should CCs be included?
-          assertThat(sender)
-              .sent("newchange", sc)
-              .to(reviewer)
-              .cc(sc.reviewer)
-              .cc(sc.reviewerByEmail, sc.ccerByEmail)
-              .noOneElse();
-        });
-  }
-
-  @Test
-  public void addReviewerToWipChangeInReviewDbNotifyAll() throws Exception {
-    forAll(
-        adder -> {
-          assume().that(notesMigration.readChanges()).isFalse();
-          StagedChange sc = stageWipChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, sc.owner, reviewer.email, NotifyHandling.ALL);
-          assertThat(sender)
-              .sent("newchange", sc)
-              .to(reviewer)
-              .cc(sc.reviewer, sc.ccer)
-              .cc(sc.reviewerByEmail, sc.ccerByEmail)
-              .noOneElse();
-        });
-  }
-
-  @Test
-  public void addReviewerToReviewableChangeInNoteDbNotifyOwnerReviewers() throws Exception {
-    assume().that(notesMigration.readChanges()).isTrue();
-    forAll(
-        adder -> {
-          StagedChange sc = stageReviewableChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, sc.owner, reviewer.email, OWNER_REVIEWERS);
-          // TODO(logan): Should CCs be included?
-          assertThat(sender)
-              .sent("newchange", sc)
-              .to(reviewer)
-              .cc(sc.reviewer)
-              .cc(sc.reviewerByEmail, sc.ccerByEmail)
-              .noOneElse();
-        });
-  }
-
-  @Test
-  public void addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyOwner() throws Exception {
-    assume().that(notesMigration.readChanges()).isTrue();
-    forAll(
-        adder -> {
-          StagedChange sc = stageReviewableChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, sc.owner, reviewer.email, CC_ON_OWN_COMMENTS, OWNER);
-          assertThat(sender).notSent();
-        });
-  }
-
-  @Test
-  public void addReviewerToReviewableChangeInNoteDbByOwnerCcingSelfNotifyNone() throws Exception {
-    assume().that(notesMigration.readChanges()).isTrue();
-    forAll(
-        adder -> {
-          StagedChange sc = stageReviewableChange();
-          TestAccount reviewer = accountCreator.create("added", "added@example.com", "added");
-          addReviewer(adder, sc.changeId, sc.owner, reviewer.email, CC_ON_OWN_COMMENTS, NONE);
-          assertThat(sender).notSent();
-        });
-  }
-
   private void addReviewer(Adder adder, String changeId, TestAccount by, String reviewer)
       throws Exception {
     addReviewer(adder, changeId, by, reviewer, EmailStrategy.ENABLED, null);