@Test
  public void machineShouldBeAddedToTreeWhenItIsJustCreated() {
    MachineStartingEvent startingEvent = mock(MachineStartingEvent.class);

    when(startingEvent.getMachineState()).thenReturn(machineState1);

    presenter.onMachineStarting(startingEvent);

    verify(view).setData(rootNode);
    verify(view).selectNode(machineNode1);

    assertThat(presenter.isMachineRunning(), is(false));
  }
  @Test
  public void requestShouldBeSendToGetMachine() throws Exception {
    presenter.onMachineSelected(machineState1);

    verify(machineState1).getId();

    verify(machinePromise).then(operationMachineCaptor.capture());
    operationMachineCaptor.getValue().apply(machineDescriptor1);

    verify(entityFactory).createMachine(machineDescriptor1);
    verify(appliance).showAppliance(machine1);

    assertThat(machineState1, is(equalTo(presenter.getSelectedMachineState())));
    assertThat(presenter.isMachineRunning(), is(true));
  }
  @Test
  public void machineShouldBeSelectedWhenItIsRunning() {
    MachineStartingEvent startingEvent = mock(MachineStartingEvent.class);

    when(startingEvent.getMachineState()).thenReturn(machineState1);
    when(stateEvent.getMachineState()).thenReturn(machineState1);

    presenter.onMachineStarting(startingEvent);
    reset(view);

    presenter.onMachineRunning(stateEvent);

    verify(view).selectNode(machineNode1);

    assertThat(presenter.isMachineRunning(), is(true));
  }
  @Test
  public void stubShouldBeDisplayedWhenWeTryGetMachineWhichIsNotCreatedYet() throws Exception {
    PromiseError error = mock(PromiseError.class);

    presenter.onMachineSelected(machineState1);

    verify(machinePromise).catchError(errorPromiseCaptor.capture());
    errorPromiseCaptor.getValue().apply(error);

    verify(machineState1).getName();
    verify(locale).unavailableMachineStarting(anyString());
    verify(appliance).showStub(anyString());

    assertThat(presenter.isMachineRunning(), is(false));
    assertThat(machineState1, is(equalTo(presenter.getSelectedMachineState())));
  }
  @Test
  public void machineShouldBeGotFromCacheWhenWeSelectMachineTheSecondTime() throws Exception {
    presenter.onMachineSelected(machineState1);

    verify(machinePromise).then(operationMachineCaptor.capture());
    operationMachineCaptor.getValue().apply(machineDescriptor1);
    reset(service, appliance);

    presenter.onMachineSelected(machineState1);

    verify(appliance).showAppliance(machine1);

    verify(service, never()).getMachine(anyString());

    assertThat(machineState1, is(equalTo(presenter.getSelectedMachineState())));
    assertThat(presenter.isMachineRunning(), is(true));
  }
  @Test
  public void machineShouldBeRemovedFromTreeWhenItIsDestroyed() {
    MachineStartingEvent startingEvent = mock(MachineStartingEvent.class);

    when(startingEvent.getMachineState()).thenReturn(machineState1);
    when(stateEvent.getMachineState()).thenReturn(machineState1);

    presenter.onMachineStarting(startingEvent);
    reset(view);
    presenter.onMachineRunning(stateEvent);

    verify(view).selectNode(machineNode1);

    reset(view);

    presenter.onMachineDestroyed(stateEvent);

    verify(view).setData(rootNode);
    verify(view, never()).selectNode(machineNode1);
  }
  @Test
  public void stubShouldBeDisplayedWhenMachinesNotExist() throws OperationException {
    presenter.showMachines();

    verify(machineStatePromise).then(operationMachineStateCaptor.capture());
    operationMachineStateCaptor.getValue().apply(Collections.<MachineStateDto>emptyList());

    verify(locale).unavailableMachineInfo();
    verify(appliance).showStub(anyString());

    verify(view, never()).setData(rootNode);
  }
  @Test
  public void treeShouldBeDisplayedWithMachines() throws Exception {
    presenter.showMachines();

    verify(service).getMachinesStates(anyString());

    verify(machineStatePromise).then(operationMachineStateCaptor.capture());
    operationMachineStateCaptor.getValue().apply(Collections.singletonList(machineState1));

    verify(entityFactory)
        .createMachineNode(
            isNull(MachineTreeNode.class), eq("root"), Matchers.<List<MachineTreeNode>>anyObject());
    verify(entityFactory).createMachineNode(eq(rootNode), eq(machineState1), eq(null));

    verify(view).setData(Matchers.<MachineTreeNode>anyObject());
    verify(view).selectNode(machineNode1);
  }
  @Test
  public void shouldShowMachinesWhenMachinesPartIsActive() throws Exception {
    ActivePartChangedEvent event = mock(ActivePartChangedEvent.class);
    when(event.getActivePart()).thenReturn(presenter);

    presenter.onActivePartChanged(event);

    verify(event).getActivePart();
    verify(appContext).getWorkspace();
    verify(service).getMachinesStates(anyString());

    verify(machineStatePromise).then(operationMachineStateCaptor.capture());
    operationMachineStateCaptor.getValue().apply(Collections.singletonList(machineState1));

    verify(entityFactory)
        .createMachineNode(
            isNull(MachineTreeNode.class), eq("root"), Matchers.<List<MachineTreeNode>>anyObject());
    verify(entityFactory).createMachineNode(eq(rootNode), eq(machineState1), eq(null));

    verify(view).setData(Matchers.<MachineTreeNode>anyObject());
    verify(view).selectNode(machineNode1);
  }
  @Test
  public void viewShouldBeSetToContainer() {
    presenter.go(container);

    verify(container).setWidget(view);
  }
  @Test
  public void titleTooltipShouldBeReturned() {
    presenter.getTitleToolTip();

    verify(locale).machinePanelTooltip();
  }
  @Test
  public void titleImageShouldBeReturned() {
    ImageResource resource = presenter.getTitleImage();

    assertThat(resource, nullValue(ImageResource.class));
  }