Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion spec/factories/fees.rb
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
factory :minimum_commitment_fee, class: "Fee" do
invoice
fee_type { "commitment" }
subscription
subscription { invoice&.subscriptions&.first || association(:subscription) }

organization { invoice&.organization || association(:organization) }
billing_entity { invoice&.billing_entity || association(:billing_entity) }
Expand Down
32 changes: 32 additions & 0 deletions spec/factories/integration_collection_mappings.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
association :integration, factory: :netsuite_integration
mapping_type { %i[fallback_item coupon subscription_fee minimum_commitment tax prepaid_credit].sample }
organization { integration&.organization || association(:organization) }
billing_entity { nil }

settings do
{
Expand All @@ -22,6 +23,7 @@
association :integration, factory: :xero_integration
mapping_type { %i[fallback_item coupon subscription_fee minimum_commitment tax prepaid_credit account].sample }
organization { integration&.organization || association(:organization) }
billing_entity { nil }

settings do
{
Expand All @@ -31,4 +33,34 @@
}
end
end

factory :anrok_collection_mapping, class: "IntegrationCollectionMappings::AnrokCollectionMapping" do
association :integration, factory: :anrok_integration
mapping_type { %i[fallback_item coupon subscription_fee minimum_commitment tax prepaid_credit account].sample }
organization { integration&.organization || association(:organization) }
billing_entity { nil }

settings do
{
external_id: "anrok-123",
external_account_code: "anrok-code-1",
external_name: "Credits and Discounts"
}
end
end

factory :avalara_collection_mapping, class: "IntegrationCollectionMappings::AvalaraCollectionMapping" do
association :integration, factory: :avalara_integration
mapping_type { %i[fallback_item coupon subscription_fee minimum_commitment tax prepaid_credit account].sample }
organization { integration&.organization || association(:organization) }
billing_entity { nil }

settings do
{
external_id: "avalara-123",
external_account_code: "avalara-code-1",
external_name: "Credits and Discounts"
}
end
end
end
42 changes: 18 additions & 24 deletions spec/factories/integration_mappings.rb
Original file line number Diff line number Diff line change
@@ -1,31 +1,25 @@
# frozen_string_literal: true

FactoryBot.define do
factory :netsuite_mapping, class: "IntegrationMappings::NetsuiteMapping" do
association :integration, factory: :netsuite_integration
association :mappable, factory: :add_on
organization { integration&.organization || association(:organization) }
[
:netsuite,
:xero,
:anrok,
:avalara
].each do |integration_type|
factory "#{integration_type}_mapping", class: "IntegrationMappings::#{integration_type.to_s.classify}Mapping" do
association :integration, factory: "#{integration_type}_integration"
association :mappable, factory: :add_on
organization { integration&.organization || association(:organization) }
billing_entity { nil }

settings do
{
external_id: "netsuite-123",
external_account_code: "netsuite-code-1",
external_name: "Credits and Discounts"
}
end
end

factory :xero_mapping, class: "IntegrationMappings::XeroMapping" do
association :integration, factory: :xero_integration
association :mappable, factory: :add_on
organization { integration&.organization || association(:organization) }

settings do
{
external_id: "xero-123",
external_account_code: "xero-code-1",
external_name: "Credits and Discounts"
}
settings do
{
external_id: "#{integration_type}-123",
external_account_code: "#{integration_type}-code-1",
external_name: "Credits and Discounts"
}
end
end
end
end
2 changes: 1 addition & 1 deletion spec/factories/invoices.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@

trait :with_subscriptions do
transient do
subscriptions { [create(:subscription)] }
subscriptions { [create(:subscription, organization:)] }
end

after :create do |invoice, evaluator|
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# frozen_string_literal: true

require "rails_helper"

RSpec.describe Integrations::Aggregator::CreditNotes::Payloads::Anrok do
describe "#body" do
subject(:payload) { described_class.new(integration_customer:, credit_note:).body }

it_behaves_like "an integration payload", :anrok do
def build_expected_payload(mapping_codes)
[
{
"currency" => "EUR",
"external_contact_id" => integration_customer.external_customer_id,
"fees" =>
[
{
"account_code" => mapping_codes.dig(:add_on, :external_account_code),
"description" => "Add-on Fee",
"external_id" => mapping_codes.dig(:add_on, :external_id),
"precise_unit_amount" => 1.9,
"taxes_amount_cents" => 0.0,
"units" => 1
},
{
"account_code" => mapping_codes.dig(:billable_metric, :external_account_code),
"description" => "Standard Charge Fee",
"external_id" => mapping_codes.dig(:billable_metric, :external_id),
"precise_unit_amount" => 1.8,
"taxes_amount_cents" => 0.0,
"units" => 1
},
{
"account_code" => mapping_codes.dig(:minimum_commitment, :external_account_code),
"description" => "Minimum Commitment Fee",
"external_id" => mapping_codes.dig(:minimum_commitment, :external_id),
"precise_unit_amount" => 1.7,
"taxes_amount_cents" => 0.0,
"units" => 1
},
{
"account_code" => mapping_codes.dig(:subscription, :external_account_code),
"description" => "Subscription",
"external_id" => mapping_codes.dig(:subscription, :external_id),
"precise_unit_amount" => 1.6,
"taxes_amount_cents" => 0.0,
"units" => 1
}
],
"issuing_date" => "2024-07-08T00:00:00Z",
"number" => credit_note.number,
"status" => "AUTHORISED",
"type" => "ACCRECCREDIT"
}
]
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# frozen_string_literal: true

require "rails_helper"

RSpec.describe Integrations::Aggregator::CreditNotes::Payloads::Netsuite do
describe "#body" do
subject(:payload) { described_class.new(integration_customer:, credit_note:).body }

it_behaves_like "an integration payload", :netsuite do
def build_expected_payload(mapping_codes)
{
"columns" => {
"custbody_ava_disable_tax_calculation" => true,
"custbody_lago_id" => credit_note.id,
"entity" => integration_customer.external_customer_id,
"otherrefnum" => credit_note.number,
"taxdetailsoverride" => true,
"taxregoverride" => true,
"tranId" => credit_note.id,
"tranid" => credit_note.number
},
"isDynamic" => true,
"lines" => [
{
"lineItems" => [
{
"account" => mapping_codes.dig(:add_on, :external_account_code),
"description" => "Add-on",
"item" => mapping_codes.dig(:add_on, :external_id),
"quantity" => 1,
"rate" => 1.9,
"taxdetailsreference" => add_on_credit_note_item.id
},
{
"account" => mapping_codes.dig(:billable_metric, :external_account_code),
"description" => "Billable Metric",
"item" => mapping_codes.dig(:billable_metric, :external_id),
"quantity" => 1,
"rate" => 1.8,
"taxdetailsreference" => billable_metric_credit_note_item.id
},
{
"account" => mapping_codes.dig(:minimum_commitment, :external_account_code),
"description" => "Plan",
"item" => mapping_codes.dig(:minimum_commitment, :external_id),
"quantity" => 1,
"rate" => 1.7,
"taxdetailsreference" => minimum_commitment_credit_note_item.id
},
{"account" => mapping_codes.dig(:subscription, :external_account_code),
"description" => "Plan",
"item" => mapping_codes.dig(:subscription, :external_id),
"quantity" => 1,
"rate" => 1.6,
"taxdetailsreference" => subscription_credit_note_item.id}
],
"sublistId" => "item"
}
],
"options" => {"ignoreMandatoryFields" => false},
"type" => "creditmemo"
}
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# frozen_string_literal: true

require "rails_helper"

RSpec.describe Integrations::Aggregator::CreditNotes::Payloads::Xero do
describe "#body" do
subject(:payload) { described_class.new(integration_customer:, credit_note:).body }

it_behaves_like "an integration payload", :xero do
def build_expected_payload(mapping_codes)
[
{
"currency" => "EUR",
"external_contact_id" => integration_customer.external_customer_id,
"fees" =>
[
{
"account_code" => mapping_codes.dig(:add_on, :external_account_code),
"description" => "Add-on Fee",
"external_id" => mapping_codes.dig(:add_on, :external_id),
"precise_unit_amount" => 1.9,
"taxes_amount_cents" => 0.0,
"units" => 1
},
{
"account_code" => mapping_codes.dig(:billable_metric, :external_account_code),
"description" => "Standard Charge Fee",
"external_id" => mapping_codes.dig(:billable_metric, :external_id),
"precise_unit_amount" => 1.8,
"taxes_amount_cents" => 0.0,
"units" => 1
},
{
"account_code" => mapping_codes.dig(:minimum_commitment, :external_account_code),
"description" => "Minimum Commitment Fee",
"external_id" => mapping_codes.dig(:minimum_commitment, :external_id),
"precise_unit_amount" => 1.7,
"taxes_amount_cents" => 0.0,
"units" => 1
},
{
"account_code" => mapping_codes.dig(:subscription, :external_account_code),
"description" => "Subscription",
"external_id" => mapping_codes.dig(:subscription, :external_id),
"precise_unit_amount" => 1.6,
"taxes_amount_cents" => 0.0,
"units" => 1
}
],
"issuing_date" => "2024-07-08T00:00:00Z",
"number" => credit_note.number,
"status" => "AUTHORISED",
"type" => "ACCRECCREDIT"
}
]
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# frozen_string_literal: true

require "rails_helper"

RSpec.describe Integrations::Aggregator::Invoices::Payloads::Anrok do
describe "#body" do
subject(:payload) { described_class.new(integration_customer:, invoice:).body }

it_behaves_like "an integration payload", :anrok do
def build_expected_payload(mapping_codes)
[
{
"external_contact_id" => integration_customer.external_customer_id,
"status" => "AUTHORISED",
"issuing_date" => "2024-07-08T00:00:00Z",
"payment_due_date" => "2024-07-08T00:00:00Z",
"number" => invoice.number,
"currency" => "EUR",
"type" => "ACCREC",
"fees" =>
[
{
"account_code" => mapping_codes.dig(:add_on, :external_account_code),
"description" => "Add-on Fee",
"external_id" => mapping_codes.dig(:add_on, :external_id),
"precise_unit_amount" => 100.0,
"taxes_amount_cents" => 2,
"units" => 0.2e1
},
{
"account_code" => mapping_codes.dig(:billable_metric, :external_account_code),
"description" => "Standard Charge Fee",
"external_id" => mapping_codes.dig(:billable_metric, :external_id),
"precise_unit_amount" => 100.0,
"taxes_amount_cents" => 2,
"units" => 0.3e1
},
{
"account_code" => mapping_codes.dig(:minimum_commitment, :external_account_code),
"description" => "Minimum Commitment Fee",
"external_id" => mapping_codes.dig(:minimum_commitment, :external_id),
"precise_unit_amount" => 100.0,
"taxes_amount_cents" => 2,
"units" => 0.4e1
},
{
"account_code" => mapping_codes.dig(:subscription, :external_account_code),
"description" => "Subscription",
"external_id" => mapping_codes.dig(:subscription, :external_id),
"precise_unit_amount" => 100.0,
"taxes_amount_cents" => 2,
"units" => 0.5e1
},
{
"account_code" => mapping_codes.dig(:coupon, :external_account_code),
"description" => "Coupons",
"external_id" => mapping_codes.dig(:coupon, :external_id),
"precise_unit_amount" => -2.0,
"taxes_amount_cents" => -292,
"units" => 1
},
{
"account_code" => mapping_codes.dig(:prepaid_credit, :external_account_code),
"description" => "Prepaid credit",
"external_id" => mapping_codes.dig(:prepaid_credit, :external_id),
"precise_unit_amount" => -3.0,
"taxes_amount_cents" => 0,
"units" => 1
},
{
"account_code" => mapping_codes.dig(:prepaid_credit, :external_account_code),
"description" => "Usage already billed",
"external_id" => mapping_codes.dig(:prepaid_credit, :external_id),
"precise_unit_amount" => -1.0,
"taxes_amount_cents" => 0,
"units" => 1
},
{
"account_code" => mapping_codes.dig(:credit_note, :external_account_code),
"description" => "Credit note",
"external_id" => mapping_codes.dig(:credit_note, :external_id),
"precise_unit_amount" => -5.0,
"taxes_amount_cents" => 0,
"units" => 1
}
]
}
]
end
end
end
end
Loading
Loading