@Test
  public void canAddElementNegativ() {
    List<IdLink> listLinks = new ArrayList<IdLink>();
    List<OptionVoraussetzung> listOpVor = new ArrayList<OptionVoraussetzung>();

    // Erzeugen eines Talents:
    // Talent A:
    Talent talentA = createTalent("Voraussetzung");
    Voraussetzung vorausA = new Voraussetzung();
    talentA.setVoraussetzung(vorausA);
    IdLink linkA = new IdLink(null, talentA, null, 3, null);

    // 1. NICHT talent1 auf Wert 5 oder mehr
    listLinks.add(new IdLink(talentA, talent1, null, 5, null));
    OptionVoraussetzung optVor = new OptionVoraussetzung();
    optVor.setLinkList(listLinks);
    listOpVor.add(optVor);
    vorausA.setNegVoraussetzung(listOpVor);

    assertFalse(voraussAdmin.changeCanAddElement(false, linkA));
    assertTrue(voraussAdmin.changeCanAddElement(true, linkA));
    prozessorTalent.updateWert(linkTalent1, 5);
    assertFalse(voraussAdmin.changeCanAddElement(true, linkA));
    prozessorTalent.updateWert(linkTalent1, 4);
    assertTrue(voraussAdmin.changeCanAddElement(true, linkA));
    prozessorTalent.updateWert(linkTalent1, 6);
    assertFalse(voraussAdmin.changeCanAddElement(false, linkA));
    assertFalse(voraussAdmin.changeCanAddElement(true, linkA));

    // 2. talent1 NICHT auf Wert 5+ und talent2 NICHT auf Wert 6+ => talent1 nicht erfüllt
    listLinks.add(new IdLink(talentA, talent2, null, 6, null));
    assertFalse(voraussAdmin.changeCanAddElement(true, linkA));

    // 3. talent1 NICHT auf Wert 5+ und talent2 NICHT auf Wert 6+ => Beide nicht erfüllt
    prozessorTalent.updateWert(linkTalent2, 6);
    assertFalse(voraussAdmin.changeCanAddElement(true, linkA));

    // 4. talent2 NICHT auf Wert 6+ => Nicht erfüllt
    prozessorTalent.updateWert(linkTalent1, 4);
    assertFalse(voraussAdmin.changeCanAddElement(true, linkA));

    // 5. Beide erfüllt
    prozessorTalent.updateWert(linkTalent2, 5);
    assertFalse(voraussAdmin.changeCanAddElement(false, linkA));
    assertTrue(voraussAdmin.changeCanAddElement(true, linkA));

    // 6. Beide erfüllt
    prozessorTalent.updateWert(linkTalent1, 1);
    prozessorTalent.updateWert(linkTalent2, 1);
    assertTrue(voraussAdmin.changeCanAddElement(true, linkA));

    // 7.  talent1 NICHT auf Wert 5+ => Nicht erfüllt
    listLinks.add(new IdLink(talentA, talent1, null, 5, null));
    assertTrue(voraussAdmin.changeCanAddElement(true, linkA));
  }
  /** Ein Maximum ist durch eine Voraussetzung angegeben */
  @Test
  public void canChangeMaxWert() {
    List<IdLink> listLinks = new ArrayList<IdLink>();
    List<OptionVoraussetzung> listOpVor = new ArrayList<OptionVoraussetzung>();

    // Talent A:
    Talent talentA = createTalent("Update-Test A");
    Voraussetzung vorausA = new Voraussetzung();
    talentA.setVoraussetzung(vorausA);
    IdLink linkA = new IdLink(null, talentA, null, 3, null);

    // Talent A: Benötigt talent1 mit Wert KLEINER als 5
    listLinks.add(new IdLink(talentA, talent1, null, 5, null));
    OptionVoraussetzung optVor = new OptionVoraussetzung();
    optVor.setLinkList(listLinks);
    listOpVor.add(optVor);
    vorausA.setNegVoraussetzung(listOpVor);

    // 1. TalentA kann nicht hinzugefügt werden, da talent1 weniger als 5
    assertFalse(voraussAdmin.changeCanAddElement(false, linkA));
    assertTrue(voraussAdmin.changeCanAddElement(true, linkA));

    // 2. TalentA kann nicht hinzugefügt werden, da talent1 auf 7
    this.prozessorTalent.updateWert(this.prozessorTalent.getElementBox().getObjectById(talent1), 7);
    assertFalse(voraussAdmin.changeCanAddElement(false, linkA));
    assertFalse(voraussAdmin.changeCanAddElement(true, linkA));

    // 3. TalentA kann hinzugefügt werden, da talent1 genau 4
    this.prozessorTalent.updateWert(this.prozessorTalent.getElementBox().getObjectById(talent1), 4);
    assertFalse(voraussAdmin.changeCanAddElement(false, linkA));
    assertTrue(voraussAdmin.changeCanAddElement(true, linkA));

    this.prozessorTalent.addNewElement(talentA);

    // 3. Nach oben normal, aber nach unten eine Grenze von 5
    assertEquals(
        5,
        voraussAdmin.changeMaxWert(
            10, this.prozessorTalent.getElementBox().getObjectById(talent1)));
    assertEquals(
        3,
        voraussAdmin.changeMinWert(3, this.prozessorTalent.getElementBox().getObjectById(talent1)));

    assertEquals(
        0,
        voraussAdmin.changeMaxWert(0, this.prozessorTalent.getElementBox().getObjectById(talent1)));
    assertEquals(
        4,
        voraussAdmin.changeMaxWert(4, this.prozessorTalent.getElementBox().getObjectById(talent1)));
    assertEquals(
        5,
        voraussAdmin.changeMaxWert(5, this.prozessorTalent.getElementBox().getObjectById(talent1)));
    assertEquals(
        5,
        voraussAdmin.changeMaxWert(6, this.prozessorTalent.getElementBox().getObjectById(talent1)));
    assertEquals(
        5,
        voraussAdmin.changeMaxWert(7, this.prozessorTalent.getElementBox().getObjectById(talent1)));

    assertTrue(
        voraussAdmin.changeCanRemoveElement(
            true, this.prozessorTalent.getElementBox().getObjectById(talent1)));

    // 4. wieder entfernen,
    this.prozessorTalent.removeElement(this.prozessorTalent.getElementBox().getObjectById(talentA));

    assertEquals(
        10,
        voraussAdmin.changeMaxWert(
            10, this.prozessorTalent.getElementBox().getObjectById(talent1)));
    assertEquals(
        3,
        voraussAdmin.changeMinWert(3, this.prozessorTalent.getElementBox().getObjectById(talent1)));
  }
  /** Kann etwas hinzugefügt werden, dass mit anderen Elementen nicht eineinbar ist? */
  @Test
  public void canAddUnvereinbaresElement() {
    List<IdLink> listLinks = new ArrayList<IdLink>();
    List<OptionVoraussetzung> listOpVor = new ArrayList<OptionVoraussetzung>();

    // Erzeugen eines Talents:
    // Talent A:
    Talent talentA = createTalent("Voraussetzung A");
    Voraussetzung vorausA = new Voraussetzung();
    talentA.setVoraussetzung(vorausA);
    IdLink linkA = new IdLink(null, talentA, null, 3, null);

    // Talent B:
    Talent talentB = createTalent("Voraussetzung B");
    IdLink linkB = new IdLink(null, talentB, null, 1, null);

    // Voraussetzung für Talent 1
    Voraussetzung voraus1 = new Voraussetzung();
    talent1.setVoraussetzung(voraus1);

    // 1. Ohne Voraussetzung: kann hinzugefügt werden
    assertFalse(voraussAdmin.changeCanAddElement(false, linkA));
    assertTrue(voraussAdmin.changeCanAddElement(true, linkA));

    // 2. Mit Voraussetzung: talent1 unvereinbar mit talentA, kann nicht hinzugefügt werden
    listLinks.clear();
    listOpVor.clear();

    listLinks.add(new IdLink(talentA, talent1, null, CharElement.KEIN_WERT, null));
    OptionVoraussetzung optVor = new OptionVoraussetzung();
    optVor.setLinkList(listLinks);
    listOpVor.add(optVor);
    vorausA.setNegVoraussetzung(listOpVor);

    assertFalse(voraussAdmin.changeCanAddElement(false, linkA));
    assertFalse(voraussAdmin.changeCanAddElement(true, linkA));

    // 3. talent1 unvereinbar mit talentB, kann nicht hinzugefügt werden
    listLinks = new ArrayList<IdLink>();
    listOpVor = new ArrayList<OptionVoraussetzung>();

    listLinks.add(new IdLink(talent1, talentB, null, CharElement.KEIN_WERT, null));
    optVor = new OptionVoraussetzung();
    optVor.setLinkList(listLinks);
    listOpVor.add(optVor);
    voraus1.setNegVoraussetzung(listOpVor);
    voraussAdmin.addVoraussetzungLink(linkTalent1);

    assertFalse(voraussAdmin.changeCanAddElement(false, linkB));
    assertFalse(voraussAdmin.changeCanAddElement(true, linkB));
    assertFalse(voraussAdmin.changeCanAddElement(false, linkA));
    assertFalse(voraussAdmin.changeCanAddElement(true, linkA));

    // 4. talent1 unvereinbar mit talentA (beide Richtungen) & talentB, kann nicht hinzugefügt
    // werden
    listLinks.add(new IdLink(talent1, talentA, null, CharElement.KEIN_WERT, null));

    assertFalse(voraussAdmin.changeCanAddElement(false, linkB));
    assertFalse(voraussAdmin.changeCanAddElement(true, linkB));
    assertFalse(voraussAdmin.changeCanAddElement(false, linkA));
    assertFalse(voraussAdmin.changeCanAddElement(true, linkA));

    // 5. talent1 nicht mehr unvereinbar mit TalentB
    listLinks.remove(0);

    assertFalse(voraussAdmin.changeCanAddElement(false, linkB));
    assertTrue(voraussAdmin.changeCanAddElement(true, linkB));
  }