create([ 'client_invoice_id' => $invoice->id, ]); return ClientInvoicePaymentItem::query()->create(array_merge([ 'client_invoice_payment_id' => $payment->id, 'billing_item_types_id' => $billingItemTypeId, ], $attributes)); } beforeEach(function () { BillingItemType::query()->insert([ [ 'id' => 1, 'name' => ClientInvoicePaymentSyncService::MEDIA_SEARCH_NAME, 'nett_contribution' => true, 'fee_type' => 'Media', ], [ 'id' => 2, 'name' => ClientInvoicePaymentSyncService::MANAGEMENT_SEARCH_NAME, 'nett_contribution' => false, 'fee_type' => 'Management', ], ]); }); test('it treats google search management spending on credit card invoices as credit card media spend', function () { $client = Client::factory()->create(); $payToUsInvoice = ClientInvoice::query()->forceCreate([ 'client_id' => $client->id, 'invoice_no' => 'INV-PAY-TO-US', 'is_credit_card' => false, ]); createRemainingAmountPaymentItem($payToUsInvoice, 1, [ 'final_net_amount' => 200, 'spending' => 0, 'is_creditcard' => false, ]); $creditCardInvoice = ClientInvoice::query()->forceCreate([ 'client_id' => $client->id, 'invoice_no' => 'INV-CREDIT-CARD', 'is_credit_card' => true, ]); createRemainingAmountPaymentItem($creditCardInvoice, 2, [ 'spending' => 125, 'is_creditcard' => false, ]); expect($client->latestRemainingAmount())->toBe('200.00'); }); test('it keeps google search management spending billable on non credit card invoices', function () { $client = Client::factory()->create(); $invoice = ClientInvoice::query()->forceCreate([ 'client_id' => $client->id, 'invoice_no' => 'INV-PAY-TO-US', 'is_credit_card' => false, ]); createRemainingAmountPaymentItem($invoice, 1, [ 'final_net_amount' => 200, 'spending' => 0, 'is_creditcard' => false, ]); createRemainingAmountPaymentItem($invoice, 2, [ 'spending' => 125, 'is_creditcard' => false, ]); expect($client->latestRemainingAmount())->toBe('75.00'); });