@org.junit.Test
  public void testRetrieveRelatedOffering() throws Exception {
    prodSpecTarget =
        new AtomicProductSpecification("1", "11 Pounds MacBook Air", "apple", "Mac", validForSpec);
    ProductOffering offeringTarget =
        new SimpleProductOffering(
            "0002",
            "11 pound MacBook Air 6,288",
            "1.6GHz Intel Core i5 process��Turbo Boost 2.7GHz",
            validFor,
            prodSpecTarget);
    ProductOffering offeringTargetTwo =
        new SimpleProductOffering(
            "0003",
            "11 pound MacBook Air 6,288",
            "1.6GHz Intel Core i5 process��Turbo Boost 2.7GHz",
            validFor,
            prodSpecTarget);
    ProductOffering offeringTargetThree =
        new SimpleProductOffering(
            "0004",
            "11 pound MacBook Air 6,288",
            "1.6GHz Intel Core i5 process��Turbo Boost 2.7GHz",
            validFor,
            prodSpecTarget);
    offering.associate(
        offeringTarget, ProdOfferingEnum.OfferingRelationshipType.AGGREGATION.getValue(), validFor);
    offering.associate(
        offeringTargetTwo,
        ProdOfferingEnum.OfferingRelationshipType.AGGREGATION.getValue(),
        validFor);
    offering.associate(
        offeringTargetThree,
        ProdOfferingEnum.OfferingRelationshipType.DEPENDENCY.getValue(),
        validFor);

    // relationType is null
    try {
      offering.retrieveRelatedOffering(null);
      fail("relationType is null, no check.");
    } catch (Exception e) {

    }

    // retrieve
    List<ProductOffering> productOffering =
        offering.retrieveRelatedOffering(
            ProdOfferingEnum.OfferingRelationshipType.AGGREGATION.getValue());
    assertEquals("retrieve productOfferingRelationship", 2, productOffering.size());
  }
  @org.junit.Test
  public void testAssociate() throws Exception {
    prodSpecTarget =
        new AtomicProductSpecification("1", "11 Pounds MacBook Air", "apple", "Mac", validForSpec);

    // offeringTarget is null
    ProductOffering offeringTargetNull = null;
    BusinessCode rtnCode =
        offering.associate(
            offeringTargetNull,
            ProdOfferingEnum.OfferingRelationshipType.AGGREGATION.getValue(),
            validFor);
    assertEquals("target offering is null", 0, offering.getProdOfferingRelationship().size());
    assertEquals(
        "target offering is null", BusinessCode.PROD_OFFERING_IS_NULL.getCode(), rtnCode.getCode());

    // type of relationship is null
    ProductOffering offeringTarget =
        new SimpleProductOffering(
            "0002",
            "11 pound MacBook Air 6,288",
            "1.6GHz Intel Core i5 process��Turbo Boost 2.7GHz",
            validFor,
            prodSpecTarget);
    rtnCode = offering.associate(offeringTarget, null, validFor);
    assertEquals("type of relationship is null", 0, offering.getProdOfferingRelationship().size());
    assertEquals(
        "type of relationship is null",
        BusinessCode.PROD_OFFERING_RELATIONSHIP_TYPE_IS_NULL_OR_EMPTY.getCode(),
        rtnCode.getCode());

    // type of relationship is empty
    rtnCode = offering.associate(offeringTarget, "", validFor);
    assertEquals("type of relationship is null", 0, offering.getProdOfferingRelationship().size());
    assertEquals(
        "type of relationship is null",
        BusinessCode.PROD_OFFERING_RELATIONSHIP_TYPE_IS_NULL_OR_EMPTY.getCode(),
        rtnCode.getCode());

    // validFor is null
    rtnCode =
        offering.associate(
            offeringTarget, ProdOfferingEnum.OfferingRelationshipType.AGGREGATION.getValue(), null);
    assertEquals("validFor is null", 0, offering.getProdOfferingRelationship().size());
    assertEquals(
        "validFor is null",
        BusinessCode.PROD_OFFERING_VALIDPERIOD_IS_NULL.getCode(),
        rtnCode.getCode());

    // can't create relationship to itself
    ProductOffering offeringTargetItself =
        new SimpleProductOffering(
            "0001",
            "11 pound MacBook Air 6,288",
            "1.6GHz Intel Core i5 process��Turbo Boost 2.7GHz",
            validFor,
            prodSpec);
    rtnCode =
        offering.associate(
            offeringTargetItself,
            ProdOfferingEnum.OfferingRelationshipType.AGGREGATION.getValue(),
            validFor);
    assertEquals(
        "can't create relationship to itself", 0, offering.getProdOfferingRelationship().size());
    assertEquals(
        "can't create relationship to itself",
        BusinessCode.PROD_OFFERING_ASSOCIATE_WITH_ITSELF.getCode(),
        rtnCode.getCode());

    // normal
    offering.associate(
        offeringTarget, ProdOfferingEnum.OfferingRelationshipType.AGGREGATION.getValue(), validFor);
    assertEquals(
        "is success to add an relationship", 1, offering.getProdOfferingRelationship().size());
    ProductOfferingRelationship offeringRelationship =
        new ProductOfferingRelationship(
            offering,
            offeringTarget,
            ProdOfferingEnum.OfferingRelationshipType.AGGREGATION.getValue(),
            validFor);
    List<ProductOfferingRelationship> prodOfferingRelationship =
        new ArrayList<ProductOfferingRelationship>();
    prodOfferingRelationship.add(offeringRelationship);
    assertEquals(
        "is success to add an relationship",
        offeringRelationship,
        offering.getProdOfferingRelationship().get(0));
    assertEquals(
        "is success to add an relationship",
        prodOfferingRelationship,
        offering.getProdOfferingRelationship());
  }