@Test
  public void testChangeOriginFromMetedata() {

    metadataStore.write("test/repo", "other/repo");
    assertEquals("test/repo", metadatas.get("/test/repo.metadata").getName());
    assertEquals("other/repo", metadatas.get("/test/repo.metadata").getOrigin());
    assertEquals("other/repo", metadatas.get("/other/repo.metadata").getName());

    metadataStore.write("test/repo", "other/otherOrigin");
    assertEquals("other/otherOrigin", metadatas.get("/test/repo.metadata").getOrigin());
    assertEquals(0, metadatas.get("/other/repo.metadata").getForks().size());
  }
  @Test
  public void testComplexForkTracking() {

    metadataStore.write("b/repo", "a/repo");
    metadataStore.write("c/repo", "b/repo");
    metadataStore.write("d/repo", "c/repo");

    assertEquals("c/repo", metadataStore.read("d/repo").get().getOrigin());
    assertEquals("b/repo", metadataStore.read("c/repo").get().getOrigin());
    assertEquals("a/repo", metadataStore.read("b/repo").get().getOrigin());

    assertEquals("b/repo", metadataStore.read("a/repo").get().getForks().get(0));
    assertEquals("c/repo", metadataStore.read("b/repo").get().getForks().get(0));
    assertEquals("d/repo", metadataStore.read("c/repo").get().getForks().get(0));
  }
  @Test
  public void testComplexDelete() {

    metadataStore.write("b/repo", "a/repo");
    metadataStore.write("c/repo", "b/repo");
    metadataStore.write("d/repo", "c/repo");

    metadataStore.delete("c/repo");

    assertEquals("", metadataStore.read("d/repo").get().getOrigin());
    assertEquals("a/repo", metadataStore.read("b/repo").get().getOrigin());

    assertEquals("b/repo", metadataStore.read("a/repo").get().getForks().get(0));
    assertEquals(0, metadataStore.read("b/repo").get().getForks().size());
    assertFalse(metadataStore.read("c/repo").isPresent());
  }
  @Test
  public void testWriteNewMetadataWithOrigin() {

    metadataStore.write("test/repo", "other/repo");

    assertEquals("test/repo", metadatas.get("/test/repo.metadata").getName());
    assertEquals("other/repo", metadatas.get("/other/repo.metadata").getName());
  }
  @Test
  public void testSimpleDelete() {

    metadataStore.write("a/repo", "");
    assertEquals("", metadataStore.read("a/repo").get().getOrigin());

    metadataStore.delete("a/repo");
    assertFalse(metadataStore.read("a/repo").isPresent());
  }
  @Test
  public void testWriteTwoForks() {

    metadataStore.write("test/repo", "origin/repo");
    metadataStore.write("fork/repo", "origin/repo");

    assertEquals(3, metadatas.size());
    assertEquals("test/repo", metadatas.get("/test/repo.metadata").getName());
    assertEquals("fork/repo", metadatas.get("/fork/repo.metadata").getName());
    assertEquals("origin/repo", metadatas.get("/origin/repo.metadata").getName());

    assertEquals(2, metadatas.get("/origin/repo.metadata").getForks().size());
  }
 @Test
 public void testFixRightPathToSave() {
   metadataStore.write("/test/repo", "");
   verify(storage).write(eq("/test/repo.metadata"), anyObject());
 }
  @Test
  public void testWriteWithNullOrigin() {

    metadataStore.write("test/repo", null);
    assertEquals("test/repo", metadatas.get("/test/repo.metadata").getName());
  }