@Test
  public void testBadCommandReturnsNoOp() throws Exception {
    final BadCommandFilter mockBadCommandFilter = context.mock(BadCommandFilter.class);
    checking(
        new Expectations() {
          {
            one(mockBadCommandFilter).filterOrThrow(COMMAND);
            will(throwException(new BadCommandException()));
          }
        });

    CommandFactoryBase factory = new CommandFactoryBase();
    factory.setBadCommandFilter(mockBadCommandFilter);
    assertEquals(NoOpCommand.class, factory.createCommand(COMMAND).getClass());
  }
  @Test
  public void testChecksBadCommandFirst() throws Exception {
    final BadCommandFilter mockBadCommandFilter = context.mock(BadCommandFilter.class);
    final FilteredCommand filteredCommand = new FilteredCommand(COMMAND, ARGUMENT);
    final SCMCommandFactory mockScmCommandFactory = context.mock(SCMCommandFactory.class);
    final ProjectAuthorizer mockProjAuth = context.mock(ProjectAuthorizer.class);
    final PathToProjectNameConverter mockPathConverter =
        context.mock(PathToProjectNameConverter.class);
    final Properties mockConfig = context.mock(Properties.class);

    checking(
        new Expectations() {
          {
            one(mockBadCommandFilter).filterOrThrow(COMMAND);
            will(returnValue(filteredCommand));
            one(mockScmCommandFactory)
                .create(filteredCommand, mockProjAuth, mockPathConverter, mockConfig);
          }
        });

    CommandFactoryBase factory = new CommandFactoryBase();
    factory.setBadCommandFilter(mockBadCommandFilter);
    factory.setScmCommandFactory(mockScmCommandFactory);
    factory.setProjectAuthorizor(mockProjAuth);
    factory.setPathToProjectNameConverter(mockPathConverter);
    factory.setConfiguration(mockConfig);
    factory.createCommand(COMMAND);
  }