/**
   * their node has no assigned id (id == 0) and is semantically equal to one of my nodes with id ==
   * 0
   *
   * <p>=> merge it onto my node.
   */
  @Test
  public void nodeSimple_NoIdSemanticallyEqual() {

    Calendar cal = GregorianCalendar.getInstance();
    User myUser = User.createOsmUser(1111, "my");

    User theirUser = User.createOsmUser(222, "their");

    Node n = new Node();
    n.setCoor(new LatLon(0, 0));
    n.put("key1", "value1");
    n.setUser(myUser);
    n.setTimestamp(cal.getTime());

    my.addPrimitive(n);

    Node n1 = new Node();
    n1.setCoor(new LatLon(0, 0));
    n1.put("key1", "value1");
    cal.add(Calendar.HOUR, 1);
    Date timestamp = cal.getTime();
    n1.setTimestamp(timestamp);
    n1.setUser(theirUser);
    their.addPrimitive(n1);

    DataSetMerger visitor = new DataSetMerger(my, their);
    visitor.merge();

    Node n2 = my.getNodes().iterator().next();
    assertEquals(0, visitor.getConflicts().size());
    assertEquals("value1", n2.get("key1"));
    assertEquals(n1.getRawTimestamp(), n2.getRawTimestamp());
    assertEquals(theirUser, n2.getUser());
    assertSame(n2, n);
    assertNotSame(n2, n1);
    assertSame(n2.getDataSet(), my);
  }
  /**
   * my node is incomplete, their node is complete
   *
   * <p>=> merge it onto my node. My node becomes complete
   */
  @Test
  public void nodeSimple_IncompleteNode() {

    Node n = new Node(1);
    my.addPrimitive(n);

    Node n1 = new Node();
    n1.setCoor(new LatLon(0, 0));
    n1.setOsmId(1, 1);
    n1.put("key1", "value1");
    Date timestamp = new Date();
    n1.setTimestamp(timestamp);
    their.addPrimitive(n1);

    DataSetMerger visitor = new DataSetMerger(my, their);
    visitor.merge();

    Node n2 = my.getNodes().iterator().next();
    assertEquals(0, visitor.getConflicts().size());
    assertEquals("value1", n2.get("key1"));
    assertEquals(n1.getRawTimestamp(), n2.getRawTimestamp());
    assertFalse(n2.isIncomplete());
    assertSame(n2, n);
  }