Search in sources :

Example 1 with PaymentErrorInternalEvent

use of org.killbill.billing.events.PaymentErrorInternalEvent in project killbill by killbill.

the class TestBeatrixListener method testPaymentError.

@Test(groups = "fast")
public void testPaymentError() throws Exception {
    PaymentErrorInternalEvent event = mock(PaymentErrorInternalEvent.class);
    provideCommonBusEventInfo(event);
    when(event.getBusEventType()).thenReturn(BusInternalEventType.PAYMENT_ERROR);
    when(event.getPaymentId()).thenReturn(OBJECT_ID);
    when(event.getAccountId()).thenReturn(ACCOUNT_ID);
    provideCommonPaymentInfo(event);
    ArgumentCaptor<PaymentMetadata> metadataCaptor = ArgumentCaptor.forClass(PaymentMetadata.class);
    when(objectMapper.writeValueAsString(metadataCaptor.capture())).thenReturn(METADATA);
    ArgumentCaptor<BusEvent> eventCaptor = ArgumentCaptor.forClass(BusEvent.class);
    beatrixListener.handleAllInternalKillbillEvents(event);
    verify(externalBus).post(eventCaptor.capture());
    DefaultBusExternalEvent postedEvent = (DefaultBusExternalEvent) eventCaptor.getValue();
    assertEquals(postedEvent.getObjectId(), OBJECT_ID);
    assertEquals(postedEvent.getObjectType(), ObjectType.PAYMENT);
    assertEquals(postedEvent.getEventType(), ExtBusEventType.PAYMENT_FAILED);
    assertEquals(postedEvent.getMetaData(), METADATA);
    assertCommonFieldsWithAccountId(postedEvent);
    PaymentMetadata paymentMetadata = metadataCaptor.getValue();
    assertPaymentMetadataFields(paymentMetadata);
}
Also used : PaymentErrorInternalEvent(org.killbill.billing.events.PaymentErrorInternalEvent) InvoicePaymentErrorInternalEvent(org.killbill.billing.events.InvoicePaymentErrorInternalEvent) PaymentMetadata(org.killbill.billing.notification.plugin.api.PaymentMetadata) InvoicePaymentMetadata(org.killbill.billing.notification.plugin.api.InvoicePaymentMetadata) BusEvent(org.killbill.bus.api.BusEvent) Test(org.testng.annotations.Test)

Example 2 with PaymentErrorInternalEvent

use of org.killbill.billing.events.PaymentErrorInternalEvent in project killbill by killbill.

the class BeatrixListener method computeExtBusEventEntryFromBusInternalEvent.

private BusEvent computeExtBusEventEntryFromBusInternalEvent(final BusInternalEvent event, final InternalCallContext context) throws JsonProcessingException {
    ObjectType objectType = null;
    UUID objectId = null;
    ExtBusEventType eventBusType = null;
    String metaData = null;
    UUID accountId = null;
    switch(event.getBusEventType()) {
        case ACCOUNT_CREATE:
            final AccountCreationInternalEvent realEventACR = (AccountCreationInternalEvent) event;
            objectType = ObjectType.ACCOUNT;
            objectId = realEventACR.getId();
            eventBusType = ExtBusEventType.ACCOUNT_CREATION;
            break;
        case ACCOUNT_CHANGE:
            final AccountChangeInternalEvent realEventACH = (AccountChangeInternalEvent) event;
            objectType = ObjectType.ACCOUNT;
            objectId = realEventACH.getAccountId();
            eventBusType = ExtBusEventType.ACCOUNT_CHANGE;
            break;
        case SUBSCRIPTION_TRANSITION:
            final SubscriptionInternalEvent realEventST = (SubscriptionInternalEvent) event;
            objectType = ObjectType.SUBSCRIPTION;
            objectId = realEventST.getSubscriptionId();
            if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.CREATE || realEventST.getTransitionType() == SubscriptionBaseTransitionType.TRANSFER) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_CREATION;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.CANCEL) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_CANCEL;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.PHASE) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_PHASE;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.CHANGE) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_CHANGE;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.UNDO_CHANGE) {
                // We map UNDO_CHANGE as a SUBSCRIPTION_CHANGE as we don't have such ext event
                eventBusType = ExtBusEventType.SUBSCRIPTION_CHANGE;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.UNCANCEL) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_UNCANCEL;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.BCD_CHANGE) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_BCD_CHANGE;
            }
            SubscriptionMetadata.ActionType actionType = (event instanceof EffectiveSubscriptionInternalEvent) ? ActionType.EFFECTIVE : ActionType.REQUESTED;
            final SubscriptionMetadata subscriptionMetadataObj = new SubscriptionMetadata(actionType, realEventST.getBundleExternalKey());
            metaData = objectMapper.writeValueAsString(subscriptionMetadataObj);
            break;
        case BLOCKING_STATE:
            final BlockingTransitionInternalEvent realEventBS = (BlockingTransitionInternalEvent) event;
            if (realEventBS.getBlockingType() == BlockingStateType.ACCOUNT) {
                objectType = ObjectType.ACCOUNT;
            } else if (realEventBS.getBlockingType() == BlockingStateType.SUBSCRIPTION_BUNDLE) {
                objectType = ObjectType.BUNDLE;
            } else if (realEventBS.getBlockingType() == BlockingStateType.SUBSCRIPTION) {
                objectType = ObjectType.SUBSCRIPTION;
            }
            objectId = realEventBS.getBlockableId();
            if (KILLBILL_SERVICES.ENTITLEMENT_SERVICE.getServiceName().equals(realEventBS.getService())) {
                if (DefaultEntitlementApi.ENT_STATE_START.equals(realEventBS.getStateName())) {
                    eventBusType = ExtBusEventType.ENTITLEMENT_CREATION;
                } else if (DefaultEntitlementApi.ENT_STATE_BLOCKED.equals(realEventBS.getStateName())) {
                    eventBusType = ExtBusEventType.BUNDLE_PAUSE;
                } else if (DefaultEntitlementApi.ENT_STATE_CLEAR.equals(realEventBS.getStateName())) {
                    eventBusType = ExtBusEventType.BUNDLE_RESUME;
                } else if (DefaultEntitlementApi.ENT_STATE_CANCELLED.equals(realEventBS.getStateName())) {
                    eventBusType = ExtBusEventType.ENTITLEMENT_CANCEL;
                }
            } else {
                eventBusType = ExtBusEventType.BLOCKING_STATE;
                final BlockingStateMetadata blockingStateMetadata = new BlockingStateMetadata(realEventBS.getBlockableId(), realEventBS.getService(), realEventBS.getStateName(), realEventBS.getBlockingType(), realEventBS.getEffectiveDate(), realEventBS.isTransitionedToBlockedBilling(), realEventBS.isTransitionedToUnblockedBilling(), realEventBS.isTransitionedToBlockedEntitlement(), realEventBS.isTransitionedToUnblockedEntitlement());
                metaData = objectMapper.writeValueAsString(blockingStateMetadata);
            }
            break;
        case INVOICE_CREATION:
            final InvoiceCreationInternalEvent realEventInv = (InvoiceCreationInternalEvent) event;
            objectType = ObjectType.INVOICE;
            objectId = realEventInv.getInvoiceId();
            eventBusType = ExtBusEventType.INVOICE_CREATION;
            break;
        case INVOICE_NOTIFICATION:
            final InvoiceNotificationInternalEvent realEventInvNotification = (InvoiceNotificationInternalEvent) event;
            objectType = ObjectType.INVOICE;
            objectId = null;
            // has to be set here because objectId is null with a dryRun Invoice
            accountId = realEventInvNotification.getAccountId();
            eventBusType = ExtBusEventType.INVOICE_NOTIFICATION;
            final InvoiceNotificationMetadata invoiceNotificationMetadata = new InvoiceNotificationMetadata(realEventInvNotification.getTargetDate(), realEventInvNotification.getAmountOwed(), realEventInvNotification.getCurrency());
            metaData = objectMapper.writeValueAsString(invoiceNotificationMetadata);
            break;
        case INVOICE_ADJUSTMENT:
            final InvoiceAdjustmentInternalEvent realEventInvAdj = (InvoiceAdjustmentInternalEvent) event;
            objectType = ObjectType.INVOICE;
            objectId = realEventInvAdj.getInvoiceId();
            eventBusType = ExtBusEventType.INVOICE_ADJUSTMENT;
            break;
        case INVOICE_PAYMENT_INFO:
            final InvoicePaymentInfoInternalEvent realEventInvPay = (InvoicePaymentInfoInternalEvent) event;
            objectType = ObjectType.INVOICE;
            objectId = realEventInvPay.getInvoiceId();
            eventBusType = ExtBusEventType.INVOICE_PAYMENT_SUCCESS;
            final InvoicePaymentMetadata invoicePaymentInfoMetaDataObj = new InvoicePaymentMetadata(realEventInvPay.getPaymentId(), realEventInvPay.getPaymentAttemptId(), realEventInvPay.getType(), realEventInvPay.getPaymentDate(), realEventInvPay.getAmount(), realEventInvPay.getCurrency(), realEventInvPay.getLinkedInvoicePaymentId(), realEventInvPay.getPaymentCookieId(), realEventInvPay.getProcessedCurrency());
            metaData = objectMapper.writeValueAsString(invoicePaymentInfoMetaDataObj);
            break;
        case INVOICE_PAYMENT_ERROR:
            final InvoicePaymentErrorInternalEvent realEventInvPayErr = (InvoicePaymentErrorInternalEvent) event;
            objectType = ObjectType.INVOICE;
            objectId = realEventInvPayErr.getInvoiceId();
            eventBusType = ExtBusEventType.INVOICE_PAYMENT_FAILED;
            final InvoicePaymentMetadata invoicePaymentErrorMetaDataObj = new InvoicePaymentMetadata(realEventInvPayErr.getPaymentId(), realEventInvPayErr.getPaymentAttemptId(), realEventInvPayErr.getType(), realEventInvPayErr.getPaymentDate(), realEventInvPayErr.getAmount(), realEventInvPayErr.getCurrency(), realEventInvPayErr.getLinkedInvoicePaymentId(), realEventInvPayErr.getPaymentCookieId(), realEventInvPayErr.getProcessedCurrency());
            metaData = objectMapper.writeValueAsString(invoicePaymentErrorMetaDataObj);
            break;
        case PAYMENT_INFO:
            final PaymentInfoInternalEvent realEventPay = (PaymentInfoInternalEvent) event;
            objectType = ObjectType.PAYMENT;
            objectId = realEventPay.getPaymentId();
            eventBusType = ExtBusEventType.PAYMENT_SUCCESS;
            final PaymentMetadata paymentInfoMetaDataObj = new PaymentMetadata(realEventPay.getPaymentTransactionId(), realEventPay.getAmount(), realEventPay.getCurrency(), realEventPay.getStatus(), realEventPay.getTransactionType(), realEventPay.getEffectiveDate());
            metaData = objectMapper.writeValueAsString(paymentInfoMetaDataObj);
            break;
        case PAYMENT_ERROR:
            final PaymentErrorInternalEvent realEventPayErr = (PaymentErrorInternalEvent) event;
            objectType = ObjectType.PAYMENT;
            objectId = realEventPayErr.getPaymentId();
            eventBusType = ExtBusEventType.PAYMENT_FAILED;
            accountId = realEventPayErr.getAccountId();
            final PaymentMetadata paymentErrorMetaDataObj = new PaymentMetadata(realEventPayErr.getPaymentTransactionId(), realEventPayErr.getAmount(), realEventPayErr.getCurrency(), realEventPayErr.getStatus(), realEventPayErr.getTransactionType(), realEventPayErr.getEffectiveDate());
            metaData = objectMapper.writeValueAsString(paymentErrorMetaDataObj);
            break;
        case PAYMENT_PLUGIN_ERROR:
            final PaymentPluginErrorInternalEvent realEventPayPluginErr = (PaymentPluginErrorInternalEvent) event;
            objectType = ObjectType.PAYMENT;
            objectId = realEventPayPluginErr.getPaymentId();
            eventBusType = ExtBusEventType.PAYMENT_FAILED;
            final PaymentMetadata pluginErrorMetaDataObj = new PaymentMetadata(realEventPayPluginErr.getPaymentTransactionId(), realEventPayPluginErr.getAmount(), realEventPayPluginErr.getCurrency(), realEventPayPluginErr.getStatus(), realEventPayPluginErr.getTransactionType(), realEventPayPluginErr.getEffectiveDate());
            metaData = objectMapper.writeValueAsString(pluginErrorMetaDataObj);
            break;
        case OVERDUE_CHANGE:
            final OverdueChangeInternalEvent realEventOC = (OverdueChangeInternalEvent) event;
            objectType = ObjectType.ACCOUNT;
            objectId = realEventOC.getOverdueObjectId();
            eventBusType = ExtBusEventType.OVERDUE_CHANGE;
            break;
        case USER_TAG_CREATION:
            final UserTagCreationInternalEvent realUserTagEventCr = (UserTagCreationInternalEvent) event;
            objectType = ObjectType.TAG;
            objectId = realUserTagEventCr.getTagId();
            eventBusType = ExtBusEventType.TAG_CREATION;
            metaData = realUserTagEventCr.getTagDefinition().getName();
            break;
        case CONTROL_TAG_CREATION:
            final ControlTagCreationInternalEvent realTagEventCr = (ControlTagCreationInternalEvent) event;
            objectType = ObjectType.TAG;
            objectId = realTagEventCr.getTagId();
            eventBusType = ExtBusEventType.TAG_CREATION;
            metaData = realTagEventCr.getTagDefinition().getName();
            break;
        case USER_TAG_DELETION:
            final UserTagDeletionInternalEvent realUserTagEventDel = (UserTagDeletionInternalEvent) event;
            objectType = ObjectType.TAG;
            objectId = realUserTagEventDel.getTagId();
            eventBusType = ExtBusEventType.TAG_DELETION;
            metaData = realUserTagEventDel.getTagDefinition().getName();
            break;
        case CONTROL_TAG_DELETION:
            final ControlTagDeletionInternalEvent realTagEventDel = (ControlTagDeletionInternalEvent) event;
            objectType = ObjectType.TAG;
            objectId = realTagEventDel.getTagId();
            eventBusType = ExtBusEventType.TAG_DELETION;
            metaData = realTagEventDel.getTagDefinition().getName();
            break;
        case CUSTOM_FIELD_CREATION:
            final CustomFieldCreationEvent realCustomFieldEventCr = (CustomFieldCreationEvent) event;
            objectType = ObjectType.CUSTOM_FIELD;
            objectId = realCustomFieldEventCr.getCustomFieldId();
            eventBusType = ExtBusEventType.CUSTOM_FIELD_CREATION;
            break;
        case CUSTOM_FIELD_DELETION:
            final CustomFieldDeletionEvent realCustomFieldEventDel = (CustomFieldDeletionEvent) event;
            objectType = ObjectType.CUSTOM_FIELD;
            objectId = realCustomFieldEventDel.getCustomFieldId();
            eventBusType = ExtBusEventType.CUSTOM_FIELD_DELETION;
            break;
        case TENANT_CONFIG_CHANGE:
            final TenantConfigChangeInternalEvent realTenantConfigEventChg = (TenantConfigChangeInternalEvent) event;
            objectType = ObjectType.TENANT_KVS;
            objectId = realTenantConfigEventChg.getId();
            eventBusType = ExtBusEventType.TENANT_CONFIG_CHANGE;
            metaData = realTenantConfigEventChg.getKey();
            break;
        case TENANT_CONFIG_DELETION:
            final TenantConfigDeletionInternalEvent realTenantConfigEventDel = (TenantConfigDeletionInternalEvent) event;
            objectType = ObjectType.TENANT_KVS;
            objectId = null;
            eventBusType = ExtBusEventType.TENANT_CONFIG_DELETION;
            metaData = realTenantConfigEventDel.getKey();
            break;
        case BROADCAST_SERVICE:
            final BroadcastInternalEvent realBroadcastEvent = (BroadcastInternalEvent) event;
            objectType = ObjectType.SERVICE_BROADCAST;
            objectId = null;
            eventBusType = ExtBusEventType.BROADCAST_SERVICE;
            final BroadcastMetadata broadcastMetadata = new BroadcastMetadata(realBroadcastEvent.getServiceName(), realBroadcastEvent.getType(), realBroadcastEvent.getJsonEvent());
            metaData = objectMapper.writeValueAsString(broadcastMetadata);
            break;
        default:
    }
    final TenantContext tenantContext = internalCallContextFactory.createTenantContext(context);
    // See #275
    accountId = (accountId == null) ? getAccountId(event.getBusEventType(), objectId, objectType, tenantContext) : accountId;
    return eventBusType != null ? new DefaultBusExternalEvent(objectId, objectType, eventBusType, accountId, tenantContext.getTenantId(), metaData, context.getAccountRecordId(), context.getTenantRecordId(), context.getUserToken()) : null;
}
Also used : BlockingStateMetadata(org.killbill.billing.notification.plugin.api.BlockingStateMetadata) CustomFieldDeletionEvent(org.killbill.billing.events.CustomFieldDeletionEvent) InvoicePaymentInfoInternalEvent(org.killbill.billing.events.InvoicePaymentInfoInternalEvent) PaymentInfoInternalEvent(org.killbill.billing.events.PaymentInfoInternalEvent) CustomFieldCreationEvent(org.killbill.billing.events.CustomFieldCreationEvent) TenantContext(org.killbill.billing.util.callcontext.TenantContext) PaymentMetadata(org.killbill.billing.notification.plugin.api.PaymentMetadata) InvoicePaymentMetadata(org.killbill.billing.notification.plugin.api.InvoicePaymentMetadata) EffectiveSubscriptionInternalEvent(org.killbill.billing.events.EffectiveSubscriptionInternalEvent) SubscriptionInternalEvent(org.killbill.billing.events.SubscriptionInternalEvent) BroadcastMetadata(org.killbill.billing.notification.plugin.api.BroadcastMetadata) BlockingTransitionInternalEvent(org.killbill.billing.events.BlockingTransitionInternalEvent) InvoiceNotificationMetadata(org.killbill.billing.notification.plugin.api.InvoiceNotificationMetadata) ObjectType(org.killbill.billing.ObjectType) UserTagCreationInternalEvent(org.killbill.billing.events.UserTagCreationInternalEvent) BroadcastInternalEvent(org.killbill.billing.events.BroadcastInternalEvent) UUID(java.util.UUID) InvoiceAdjustmentInternalEvent(org.killbill.billing.events.InvoiceAdjustmentInternalEvent) TenantConfigChangeInternalEvent(org.killbill.billing.events.TenantConfigChangeInternalEvent) AccountCreationInternalEvent(org.killbill.billing.events.AccountCreationInternalEvent) TenantConfigDeletionInternalEvent(org.killbill.billing.events.TenantConfigDeletionInternalEvent) ActionType(org.killbill.billing.notification.plugin.api.SubscriptionMetadata.ActionType) AccountChangeInternalEvent(org.killbill.billing.events.AccountChangeInternalEvent) InvoicePaymentInfoInternalEvent(org.killbill.billing.events.InvoicePaymentInfoInternalEvent) UserTagDeletionInternalEvent(org.killbill.billing.events.UserTagDeletionInternalEvent) EffectiveSubscriptionInternalEvent(org.killbill.billing.events.EffectiveSubscriptionInternalEvent) InvoicePaymentErrorInternalEvent(org.killbill.billing.events.InvoicePaymentErrorInternalEvent) OverdueChangeInternalEvent(org.killbill.billing.events.OverdueChangeInternalEvent) ControlTagCreationInternalEvent(org.killbill.billing.events.ControlTagCreationInternalEvent) ExtBusEventType(org.killbill.billing.notification.plugin.api.ExtBusEventType) InvoicePaymentMetadata(org.killbill.billing.notification.plugin.api.InvoicePaymentMetadata) ControlTagDeletionInternalEvent(org.killbill.billing.events.ControlTagDeletionInternalEvent) PaymentPluginErrorInternalEvent(org.killbill.billing.events.PaymentPluginErrorInternalEvent) SubscriptionMetadata(org.killbill.billing.notification.plugin.api.SubscriptionMetadata) PaymentErrorInternalEvent(org.killbill.billing.events.PaymentErrorInternalEvent) InvoicePaymentErrorInternalEvent(org.killbill.billing.events.InvoicePaymentErrorInternalEvent) InvoiceCreationInternalEvent(org.killbill.billing.events.InvoiceCreationInternalEvent) InvoiceNotificationInternalEvent(org.killbill.billing.events.InvoiceNotificationInternalEvent)

Example 3 with PaymentErrorInternalEvent

use of org.killbill.billing.events.PaymentErrorInternalEvent in project killbill by killbill.

the class TestEventJson method testPaymentErrorEvent.

@Test(groups = "fast")
public void testPaymentErrorEvent() throws Exception {
    final PaymentErrorInternalEvent e = new DefaultPaymentErrorEvent(UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), BigDecimal.ONE, Currency.USD, TransactionStatus.SUCCESS, TransactionType.PURCHASE, new DateTime(), true, "no message", 1L, 2L, UUID.randomUUID());
    final String json = mapper.writeValueAsString(e);
    final Class<?> claz = Class.forName(DefaultPaymentErrorEvent.class.getName());
    final Object obj = mapper.readValue(json, claz);
    Assert.assertTrue(obj.equals(e));
}
Also used : PaymentErrorInternalEvent(org.killbill.billing.events.PaymentErrorInternalEvent) DateTime(org.joda.time.DateTime) Test(org.testng.annotations.Test)

Aggregations

PaymentErrorInternalEvent (org.killbill.billing.events.PaymentErrorInternalEvent)3 InvoicePaymentErrorInternalEvent (org.killbill.billing.events.InvoicePaymentErrorInternalEvent)2 InvoicePaymentMetadata (org.killbill.billing.notification.plugin.api.InvoicePaymentMetadata)2 PaymentMetadata (org.killbill.billing.notification.plugin.api.PaymentMetadata)2 Test (org.testng.annotations.Test)2 UUID (java.util.UUID)1 DateTime (org.joda.time.DateTime)1 ObjectType (org.killbill.billing.ObjectType)1 AccountChangeInternalEvent (org.killbill.billing.events.AccountChangeInternalEvent)1 AccountCreationInternalEvent (org.killbill.billing.events.AccountCreationInternalEvent)1 BlockingTransitionInternalEvent (org.killbill.billing.events.BlockingTransitionInternalEvent)1 BroadcastInternalEvent (org.killbill.billing.events.BroadcastInternalEvent)1 ControlTagCreationInternalEvent (org.killbill.billing.events.ControlTagCreationInternalEvent)1 ControlTagDeletionInternalEvent (org.killbill.billing.events.ControlTagDeletionInternalEvent)1 CustomFieldCreationEvent (org.killbill.billing.events.CustomFieldCreationEvent)1 CustomFieldDeletionEvent (org.killbill.billing.events.CustomFieldDeletionEvent)1 EffectiveSubscriptionInternalEvent (org.killbill.billing.events.EffectiveSubscriptionInternalEvent)1 InvoiceAdjustmentInternalEvent (org.killbill.billing.events.InvoiceAdjustmentInternalEvent)1 InvoiceCreationInternalEvent (org.killbill.billing.events.InvoiceCreationInternalEvent)1 InvoiceNotificationInternalEvent (org.killbill.billing.events.InvoiceNotificationInternalEvent)1