@Test
 public void shouldNotUpdateIfNoImageStreamForTrigger() {
   givenAConnection();
   givenTheDeploymentConfigExistFor("myimagename", "v0", NAMESPACE, ResourceKind.IMAGE_STREAM_TAG);
   assertFalse(
       job.updateTriggerIfUpdate(connection, project.getName(), parameters.getResourceName()));
 }
 @Test
 public void shouldNotUpdateIfImageChangeTriggerNameSpaceIsBlank() {
   givenAConnection();
   givenTheImageStreamExistsTo("myimagename");
   givenTheDeploymentConfigExistFor("myimagename", "v0", "", ResourceKind.IMAGE_STREAM_TAG);
   assertFalse(
       job.updateTriggerIfUpdate(connection, project.getName(), parameters.getResourceName()));
 }
 @Test
 public void shouldSkipGeneratingResourcesWhenTheImageIsBeingUpdated() {
   givenAConnection();
   givenTheImageStreamExistsTo("myimagename");
   givenTheDeploymentConfigExistFor("myimagename", "v0", NAMESPACE, ResourceKind.IMAGE_STREAM_TAG);
   doReturn(DOCKER_TAG).when(job).getSourceImage();
   assertThat(job.doRun(monitor)).isEqualTo(Status.OK_STATUS);
   verify(connection, times(0)).createResource(any());
 }
 @Test
 public void shouldNotUpdateIfImageChangeTriggerHasWrongKind() {
   givenAConnection();
   givenTheImageStreamExistsTo("myimagename");
   givenTheDeploymentConfigExistFor(
       "myimagename", "v0", NAMESPACE, "any-not-IMAGE_STREAM_TAG-kind");
   assertFalse(
       job.updateTriggerIfUpdate(connection, project.getName(), parameters.getResourceName()));
 }
  @Test
  public void testStubDeploymentConfig() {
    IImageStream is = givenAnImageStreamTo(project.getName(), DOCKER_TAG);

    IResource resource = job.stubDeploymentConfig(factory, RESOURCE_NAME, DOCKER_TAG, is);
    assertTrue(resource instanceof IDeploymentConfig);
    IDeploymentConfig dc = (IDeploymentConfig) resource;

    assertEquals(
        "Exp. replicas to match incoming params", parameters.getReplicas(), dc.getReplicas());
    assertEquals(
        "Exp. the selector key to be the resourceName",
        RESOURCE_NAME,
        dc.getReplicaSelector().get(DeployImageJob.SELECTOR_KEY));

    IContainer container = dc.getContainer(RESOURCE_NAME);
    assertNotNull("Exp. to find a container with the resource name", container);
    Collection<IDeploymentTrigger> triggers = dc.getTriggers();
    assertTrue(
        "Exp. a config change trigger",
        triggers
            .stream()
            .filter(t -> DeploymentTriggerType.CONFIG_CHANGE.equals(t.getType()))
            .findFirst()
            .isPresent());

    // assert ict matches container spec
    Optional<IDeploymentTrigger> icTrigger =
        triggers
            .stream()
            .filter(t -> DeploymentTriggerType.IMAGE_CHANGE.equals(t.getType()))
            .findFirst();
    assertTrue(icTrigger.isPresent());

    IDeploymentImageChangeTrigger imageChangeTrigger =
        (IDeploymentImageChangeTrigger) icTrigger.get();
    Collection<String> names = imageChangeTrigger.getContainerNames();
    assertEquals(1, names.size());
    assertEquals(
        "Exp. the container and trigger names to match",
        container.getName(),
        names.iterator().next());
    assertTrue(imageChangeTrigger.isAutomatic());
    assertEquals(ResourceKind.IMAGE_STREAM_TAG, imageChangeTrigger.getKind());
    assertEquals(
        "Exp. the trigger to point to the imagestream name",
        new DockerImageURI(null, null, is.getName(), DOCKER_TAG.getTag()),
        imageChangeTrigger.getFrom());
    assertEquals(
        "Exp. the trigger to point to the imagestream name",
        is.getNamespace(),
        imageChangeTrigger.getNamespace());
  }
 @Test
 public void shouldNotUpdateIfNoImageChangeTrigger() {
   givenAConnection();
   givenTheImageStreamExistsTo("myimagename");
   IDeploymentConfig dc = createResource(IDeploymentConfig.class);
   when(dc.getTriggers()).thenReturn(Collections.EMPTY_LIST);
   when(connection.getResource(
           ResourceKind.DEPLOYMENT_CONFIG, project.getName(), parameters.getResourceName()))
       .thenReturn(dc);
   assertFalse(
       job.updateTriggerIfUpdate(connection, project.getName(), parameters.getResourceName()));
 }
  @Test
  public void shouldUpdateImageTagIfItDifferesFromExisting() {
    givenAConnection();
    givenTheImageStreamExistsTo("myimagename");
    givenTheDeploymentConfigExistFor("myimagename", "v0", NAMESPACE, ResourceKind.IMAGE_STREAM_TAG);
    doReturn(DOCKER_NEW_TAG).when(job).getSourceImage();

    IResource resource =
        connection.getResource(
            ResourceKind.DEPLOYMENT_CONFIG, project.getName(), parameters.getResourceName());
    IDeploymentImageChangeTrigger trigger =
        (IDeploymentImageChangeTrigger) ((IDeploymentConfig) resource).getTriggers().toArray()[0];
    assertThat(job.doRun(monitor)).isEqualTo(Status.OK_STATUS);
    verify(trigger, times(1)).setFrom(new DockerImageURI(null, null, "myimagename", "v1"));
  }
 private IImageStream whenStubbingTheImageStream(DockerImageURI uri) {
   return (IImageStream) job.stubImageStream(factory, RESOURCE_NAME, project, uri);
 }