@Test
public void testGetEffectiveCheckSpecs() throws Exception {

    ChecklistPlanner planner = new ChecklistPlanner(Arrays.asList(CKL_NAME_ALPHA, CKL_NAME_BRAVO_1));
    planner.provideChecklists(constructIndivChecklists());
    List<CheckSpec> effNoOverrides = planner.getEffectiveCheckSpecs(null);
    assertEquals("effective checks size should be", 2, effNoOverrides.size());
    assertEquals("first should be alpha", CKL_NAME_ALPHA + "/pathy", effNoOverrides.get(0).getName());
    assertEquals("second should be bravo/bravo-1", CKL_ID_BRAVO_1 + "/pathy", effNoOverrides.get(1).getName());
    final CheckSpec pathyOverride = new CheckSpec();
    pathyOverride.setName("pathy");
    pathyOverride.setSkip(true);
    List<CheckSpec> effOneOverride = planner.getEffectiveCheckSpecs(Collections.singletonList(pathyOverride));
    assertEquals("effective checks size should be", 0, effOneOverride.size());
    final CheckSpec alphaPathyOverride = new CheckSpec();
    alphaPathyOverride.setName("alpha/pathy");
    alphaPathyOverride.setSkip(true);
    List<CheckSpec> effOneAlphaOverride = planner.getEffectiveCheckSpecs(Collections.singletonList(alphaPathyOverride));
    assertEquals("effective checks size should be", 1, effOneAlphaOverride.size());
    final CheckSpec alphaPathy2Override = new CheckSpec();
    alphaPathy2Override.setName("pathy2");
    alphaPathy2Override.setTemplate("alpha/pathy");
    List<CheckSpec> effOneAlphaInherit = planner.getEffectiveCheckSpecs(Arrays.asList(alphaPathyOverride, alphaPathy2Override));
    assertEquals("effective checks size should be", 2, effOneAlphaInherit.size());
    final CheckSpec implSpec = new CheckSpec();
    implSpec.setImpl("foo");
    List<CheckSpec> effWithImplSpec = planner.getEffectiveCheckSpecs(Arrays.asList(alphaPathyOverride, alphaPathy2Override, implSpec));
    assertEquals("effective checks size should be", 3, effWithImplSpec.size());
}