@Test
  public void testExampleJson() throws Exception {
    String json = FileUtil.readFileFromClasspath("json-examples/agreement-updated-example.json");
    JsonMessage jsonMessage = new JsonMessage(json);
    ServiceResult serviceResult = new ServiceResult();
    serviceResult.setRawData(jsonMessage);

    ServiceResult result = (ServiceResult) transformer.doTransform(serviceResult, "UTF-8");
    AgreementUpdated agreementUpdated =
        (AgreementUpdated) result.getIntegrationMessage().getDomainObject();

    Agreement agreement = agreementUpdated.getAgreement();

    collector.checkThat(agreement.getCurrencyCode().getCurrencyCode(), is("SEK"));
    collector.checkThat(
        agreement.getDocumentLink(), is("\\\\someserver\\somefolder\\somefile.pdf"));
    collector.checkThat(agreement.getClientId(), is("Cl42824050"));
    collector.checkThat(agreement.getDescription(), is("Agreement Name Example"));
    collector.checkThat(agreement.getSourceSystemAgreementId(), is("1-1234567896"));
    collector.checkThat(
        agreement.getValidFrom().getTimestamp(), is("2012-06-25T15:30:01.999+02:00"));
    collector.checkThat(agreement.getValidTo(), nullValue());
    collector.checkThat(
        agreement.getInvoicingRuleId().getGuid(), is("3f2504e0-4f89-11d3-9a0c-0305e82c3401"));
    collector.checkThat(agreement.getMarketId().getOrganizationId(), is(51));
    collector.checkThat(agreement.getProductType().getValue(), is(3));
  }
  @Test
  public void testEmptyJson() throws Exception {
    JsonMessage jsonMessage = new JsonMessage("");
    ServiceResult serviceResult = new ServiceResult();
    serviceResult.setRawData(jsonMessage);

    ServiceResult result = (ServiceResult) transformer.doTransform(serviceResult, "UTF-8");
    assertNull(result.getIntegrationMessage());
    collector.checkThat(result.isBugDisturbance(), is(true));
    collector.checkThat(
        result.getErrorMessage(),
        is("Was not able to transform class class com.tradedoubler.billing.domain.ClientUpdated"));
  }
  @Test
  public void testExampleJson() throws Exception {
    String json =
        FileUtil.readFileFromClasspath("json-examples/invoicing-rule-updated-example.json");
    JsonMessage jsonMessage = new JsonMessage(json);
    ServiceResult serviceResult = new ServiceResult();
    serviceResult.setRawData(jsonMessage);

    ServiceResult result = (ServiceResult) transformer.doTransform(serviceResult, "UTF-8");
    InvoicingRuleUpdated invoicingRuleCreated =
        (InvoicingRuleUpdated) result.getIntegrationMessage().getDomainObject();

    MetaData metaData = invoicingRuleCreated.getMetaData();

    InvoicingRule invoicingRule = invoicingRuleCreated.getInvoicingRule();

    List<InvoiceRecipient> invoiceRecipients = invoicingRule.getInvoiceRecipients();
    collector.checkThat(invoiceRecipients.size(), is(3));

    InvoiceRecipient invoiceRecipient = invoiceRecipients.get(0);

    Address registeredAddressInvoiceRecipient = invoiceRecipient.getRegisteredAddress();

    List<SplittingRule> splittingRules = invoiceRecipients.get(2).getSplittingRules();
    collector.checkThat(splittingRules.size(), is(3));
    SplittingRule splittingRule = splittingRules.get(0);

    List<PurchaseOrder> purchaseOrders = invoicingRule.getPurchaseOrders();
    collector.checkThat(purchaseOrders.size(), is(3));
    PurchaseOrder purchaseOrder = purchaseOrders.get(0);

    List<InvoicingRuleMessageRule> invoiceMessageRules = invoicingRule.getInvoiceMessageRules();
    collector.checkThat(invoiceMessageRules.size(), is(1));
    InvoicingRuleMessageRule invoiceMessageRule = invoiceMessageRules.get(0);

    collector.checkThat(metaData.getMessageType(), is("UpdateInvoicingRule"));
    collector.checkThat(
        metaData.getMessageId().getGuid(), is("28b62635-15a0-b15e-c5f4-5442b66d1059"));
    collector.checkThat(
        metaData.getCreationTime().getTimestamp(), is("2012-07-05T13:21:00.000+02:00"));
    collector.checkThat(metaData.getVersion(), is("1.0"));
    collector.checkThat(metaData.getSourceSystem(), is("CRM"));

    collector.checkThat(invoicingRule.getClientId(), is("TELIA"));
    collector.checkThat(invoicingRule.getMarketId().getOrganizationId(), is(51));
    collector.checkThat(
        invoicingRule.getInvoicingRuleId().getGuid(), is("3f2504e0-4f89-11d3-9a0c-0305e82c3405"));
    collector.checkThat(invoicingRule.getInvoicingRuleName(), is("Volvo - do not edit"));
    collector.checkThat(invoicingRule.getDescription(), is("Used in unit tests - do not edit"));
    collector.checkThat(invoicingRule.getIssuerReference(), is("Maria Lind"));
    collector.checkThat(invoicingRule.getClientReference(), is("Lasse Volvosson"));
    collector.checkThat(invoicingRule.getCurrencyCode().getCurrencyCode(), is("EUR"));
    collector.checkThat(invoicingRule.getDistributionMode().getValue(), is(1));
    collector.checkThat(invoicingRule.getTermsOfPayment().getDays(), is(30));
    collector.checkThat(invoicingRule.getPostingProfile().getValue(), is(1));
    collector.checkThat(invoicingRule.isDisplayTradeDoublerCommission(), is(true));
    collector.checkThat(invoicingRule.getRevenueType().getValue(), is(1));
    collector.checkThat(invoicingRule.getPaymentMethod().getValue(), is(2));
    collector.checkThat(invoicingRule.isDeviatingExchangeRate(), is(false));

    collector.checkThat(
        invoiceRecipient.getInvoiceRecipientId().getGuid(),
        is("703b123f-6329-4d79-bfaa-60762a5f6cf4"));
    collector.checkThat(
        invoiceRecipient.getInvoicingRuleId().getGuid(),
        is("3f2504e0-4f89-11d3-9a0c-0305e82c3405"));
    collector.checkThat(invoiceRecipient.getAttentionRow1(), is("Attention of default recipient!"));
    collector.checkThat(invoiceRecipient.getAttentionRow2(), nullValue());
    collector.checkThat(invoiceRecipient.getEmailAddress(), nullValue());
    collector.checkThat(invoiceRecipient.isDefaultRecipient(), is(true));

    collector.checkThat(registeredAddressInvoiceRecipient.getLine1(), is("AVD. 50090 HB3S"));
    collector.checkThat(registeredAddressInvoiceRecipient.getLine2(), nullValue());
    collector.checkThat(registeredAddressInvoiceRecipient.getCity(), is("Göteborg"));
    collector.checkThat(registeredAddressInvoiceRecipient.getCounty(), nullValue());
    collector.checkThat(registeredAddressInvoiceRecipient.getPostalCode(), is("40531"));
    collector.checkThat(registeredAddressInvoiceRecipient.getCountryCode().getValue(), is("SE"));
    collector.checkThat(registeredAddressInvoiceRecipient.getAddressType().getValue(), is(1));

    collector.checkThat(
        splittingRule.getSplittingRuleId().getGuid(), is("8f756919-c9ed-e111-8b5b-005056b45da6"));
    collector.checkThat(
        splittingRule.getInvoiceRecipientId().getGuid(),
        is("3ac9520d-c9ed-e111-8b5b-005056b45da6"));
    collector.checkThat(splittingRule.getSplitter(), is("kjhh567855"));

    collector.checkThat(
        purchaseOrder.getInvoicingRuleId().getGuid(), is("3f2504e0-4f89-11d3-9a0c-0305e82c3405"));
    collector.checkThat(purchaseOrder.getPoNumber(), is("234 - do not edit"));
    collector.checkThat(
        purchaseOrder.getPurchaseOrderId().getGuid(), is("00000000-0000-0000-4000-100000000001"));
    collector.checkThat(
        purchaseOrder.getValidFrom().getTimestamp(), is("2012-08-15T00:00:00.000+02:00"));
    collector.checkThat(
        purchaseOrder.getValidTo().getTimestamp(), is("2012-08-17T00:00:00.000+02:00"));

    collector.checkThat(
        invoiceMessageRule.getInvoiceMessageRuleId().getGuid(),
        is("00000000-0000-0000-3000-100000000001"));
    collector.checkThat(
        invoiceMessageRule.getInvoicingRuleId().getGuid(),
        is("3f2504e0-4f89-11d3-9a0c-0305e82c3405"));
    collector.checkThat(
        invoiceMessageRule.getMessageText(),
        is("This is a text to be printed on all invoices for this invoicing rule"));
    collector.checkThat(
        invoiceMessageRule.getValidFrom().getTimestamp(), is("2012-08-13T00:00:00.000+02:00"));
    collector.checkThat(
        invoiceMessageRule.getValidTo().getTimestamp(), is("2012-08-30T00:00:00.000+02:00"));
  }
  @Test
  public void testExampleJson() throws Exception {
    String json = FileUtil.readFileFromClasspath("json-examples/client-updated-example.json");
    JsonMessage jsonMessage = new JsonMessage(json);
    ServiceResult serviceResult = new ServiceResult();
    serviceResult.setRawData(jsonMessage);

    ServiceResult transformedServiceResult =
        (ServiceResult) transformer.doTransform(serviceResult, "UTF-8");
    ClientUpdated clientUpdated =
        (ClientUpdated) transformedServiceResult.getIntegrationMessage().getDomainObject();

    MetaData metaData = clientUpdated.getMetaData();

    collector.checkThat(metaData.getMessageType(), is("UpdateClient"));
    collector.checkThat(
        metaData.getMessageId().getGuid(), is("54d7887f-481a-62f6-5b41-3f33f46ec478"));
    collector.checkThat(
        metaData.getCreationTime().getTimestamp(), is("2012-07-07T12:52:20.000+02:00"));
    collector.checkThat(metaData.getVersion(), is("1.0"));
    collector.checkThat(metaData.getSourceSystem(), is("CRM"));

    Client client = clientUpdated.getClient();

    collector.checkThat(client.getClientId(), is("Cl42824050"));
    collector.checkThat(client.getBusinessFormCode(), is(""));
    collector.checkThat(client.getCompanyRegistrationNumber(), is("556284-2319"));
    collector.checkThat(client.getInvoiceLanguage().getLanguageCode(), is("SV"));
    collector.checkThat(client.getRegisteredCompanyName(), is("Kentor IT AB"));
    collector.checkThat(client.getVatNumber(), is("SE556284231901"));
    collector.checkThat(client.getClientType(), is(ClientType.ADVERTISER));

    List<Bank> bankAccounts = client.getBankAccounts();
    collector.checkThat(bankAccounts.size(), is(1));
    Bank bank = bankAccounts.get(0);

    collector.checkThat(bank.getAccountOwner(), is("Account Owner Example"));
    collector.checkThat(bank.getBankAccount(), is("4242424242"));
    collector.checkThat(bank.getBankCode(), is("SWEDSESS"));
    collector.checkThat(bank.getClientId(), is("Cl42824050"));
    collector.checkThat(bank.getMarketId().getOrganizationId(), is(51));

    List<ClientMessageRule> invoiceMessageRules = client.getInvoiceMessageRules();
    collector.checkThat(invoiceMessageRules.size(), is(1));
    ClientMessageRule clientMessageRule = invoiceMessageRules.get(0);

    collector.checkThat(clientMessageRule.getClientId(), is("Cl42824050"));
    collector.checkThat(
        clientMessageRule.getInvoiceMessageRuleId().getGuid(),
        is("face8421-11f1-4684-1769-3478152e5597"));
    collector.checkThat(
        clientMessageRule.getMessageText(),
        is("This is a text to be printed on all invoices for this client"));
    collector.checkThat(
        clientMessageRule.getValidFrom().toString(), is("2012-06-25T00:00:00.000+01:00"));
    collector.checkThat(
        clientMessageRule.getValidTo().toString(), is("2012-08-30T00:00:00.000+01:00"));

    List<Market> marketIds = client.getMarketIds();
    collector.checkThat(marketIds.size(), is(1));
    collector.checkThat(marketIds.get(0).getOrganizationId(), is(51));

    Address registeredAddress = client.getRegisteredAddress();

    collector.checkThat(registeredAddress.getCity(), is("Stockholm"));
    collector.checkThat(registeredAddress.getCountryCode().getValue(), is("SE"));
    collector.checkThat(registeredAddress.getLine1(), is("Vasagatan 38"));
    collector.checkThat(registeredAddress.getLine2(), is("hejsan"));
    collector.checkThat(registeredAddress.getPostalCode(), is("11120"));
    collector.checkThat(registeredAddress.getAddressType().getValue(), is(3));
    collector.checkThat(registeredAddress.getCounty(), nullValue());
  }