UNPKG

@accounter/server

Version:
124 lines (116 loc) 7.49 kB
import { describe, expect, it } from 'vitest'; import { BusinessesProvider } from '../modules/financial-entities/providers/businesses.provider.js'; import { DocumentsProvider } from '../modules/documents/providers/documents.provider.js'; import { IssuedDocumentsProvider } from '../modules/documents/providers/issued-documents.provider.js'; import { DividendsProvider } from '../modules/dividends/providers/dividends.provider.js'; import { DynamicReportProvider } from '../modules/reports/providers/dynamic-report.provider.js'; import { VatReportProvider } from '../modules/reports/providers/vat-report.provider.js'; import { MiscExpensesProvider } from '../modules/misc-expenses/providers/misc-expenses.provider.js'; import { CorporateTaxesProvider } from '../modules/corporate-taxes/providers/corporate-taxes.provider.js'; import { FinancialEntitiesProvider } from '../modules/financial-entities/providers/financial-entities.provider.js'; import { TaxCategoriesProvider } from '../modules/financial-entities/providers/tax-categories.provider.js'; import { TransactionsProvider } from '../modules/transactions/providers/transactions.provider.js'; import { FinancialAccountsProvider } from '../modules/financial-accounts/providers/financial-accounts.provider.js'; import { FinancialBankAccountsProvider } from '../modules/financial-accounts/providers/financial-bank-accounts.provider.js'; import { ClientsProvider } from '../modules/financial-entities/providers/clients.provider.js'; import { AdminBusinessesProvider } from '../modules/financial-entities/providers/admin-businesses.provider.js'; import { TagsProvider } from '../modules/tags/providers/tags.provider.js'; import { ChargeTagsProvider } from '../modules/tags/providers/charge-tags.provider.js'; import { DeelInvoicesProvider } from '../modules/deel/providers/deel-invoices.provider.js'; import { ChargesProvider } from '../modules/charges/providers/charges.provider.js'; import { CryptoExchangeProvider } from '../modules/exchange-rates/providers/crypto-exchange.provider.js'; import { LedgerProvider } from '../modules/ledger/providers/ledger.provider.js'; import { BusinessTripExpensesProvider } from '../modules/business-trips/providers/business-trips-expenses.provider.js'; import { BusinessTripCarRentalExpensesProvider } from '../modules/business-trips/providers/business-trips-expenses-car-rental.provider.js'; import { BusinessTripOtherExpensesProvider } from '../modules/business-trips/providers/business-trips-expenses-other.provider.js'; import { BusinessTripTravelAndSubsistenceExpensesProvider } from '../modules/business-trips/providers/business-trips-expenses-travel-and-subsistence.provider.js'; import { BusinessTripExpensesTransactionsMatchProvider } from '../modules/business-trips/providers/business-trips-expenses-transactions-match.provider.js'; import { BusinessTripFlightsExpensesProvider } from '../modules/business-trips/providers/business-trips-expenses-flights.provider.js'; import { BusinessTripAccommodationsExpensesProvider } from '../modules/business-trips/providers/business-trips-expenses-accommodations.provider.js'; import { BusinessTripEmployeePaymentsProvider } from '../modules/business-trips/providers/business-trips-employee-payments.provider.js'; import { BusinessTripAttendeesProvider } from '../modules/business-trips/providers/business-trips-attendees.provider.js'; import { BusinessTripsProvider } from '../modules/business-trips/providers/business-trips.provider.js'; import { AnnualRevenueReportProvider } from '../modules/reports/providers/annual-revenue-report.provider.js'; import { BalanceReportProvider } from '../modules/reports/providers/balance-report.provider.js'; import { BankDepositChargesProvider } from '../modules/bank-deposits/providers/bank-deposit-charges.provider.js'; import { ChargeSpreadProvider } from '../modules/charges/providers/charge-spread.provider.js'; import { DeelContractsProvider } from '../modules/deel/providers/deel-contracts.provider.js'; import { BalanceCancellationProvider } from '../modules/ledger/providers/balance-cancellation.provider.js'; import { UnbalancedBusinessesProvider } from '../modules/ledger/providers/unbalanced-businesses.provider.js'; import { EmployeesProvider } from '../modules/salaries/providers/employees.provider.js'; import { FundsProvider } from '../modules/salaries/providers/funds.provider.js'; import { SalariesProvider } from '../modules/salaries/providers/salaries.provider.js'; import { CreditCardTransactionsProvider } from '../modules/transactions/providers/creditcard-transactions.provider.js'; describe('Cache Isolation Integration', () => { // We expect these providers to be Operation scoped now because they carry tenant data const tenantProviders = [ BusinessesProvider, DocumentsProvider, IssuedDocumentsProvider, DividendsProvider, DynamicReportProvider, VatReportProvider, MiscExpensesProvider, CorporateTaxesProvider, FinancialEntitiesProvider, TaxCategoriesProvider, TransactionsProvider, CreditCardTransactionsProvider, FinancialAccountsProvider, FinancialBankAccountsProvider, ClientsProvider, AdminBusinessesProvider, TagsProvider, ChargeTagsProvider, DeelInvoicesProvider, DeelContractsProvider, ChargesProvider, ChargeSpreadProvider, CryptoExchangeProvider, LedgerProvider, AnnualRevenueReportProvider, BalanceReportProvider, BankDepositChargesProvider, BusinessTripAttendeesProvider, BusinessTripEmployeePaymentsProvider, BusinessTripAccommodationsExpensesProvider, BusinessTripCarRentalExpensesProvider, BusinessTripFlightsExpensesProvider, BusinessTripOtherExpensesProvider, BusinessTripExpensesTransactionsMatchProvider, BusinessTripTravelAndSubsistenceExpensesProvider, BusinessTripExpensesProvider, BusinessTripsProvider, BalanceCancellationProvider, UnbalancedBusinessesProvider, EmployeesProvider, FundsProvider, SalariesProvider, ]; it.each(tenantProviders)('should reflect Operation Scope by creating unique loader instances', (Provider) => { // Mock dependencies. Most providers expect 1-2 args now (DB + maybe Auth/Context) // We pass enough mocks to satisfy internal optional usage if constructor runs logic const mockContext = { adminContext: { defaultLocalCurrency: 'ILS', defaultCryptoConversionFiatCurrency: 'USD' } }; const mockDeps = [mockContext, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]; // Instantiate twice const instance1 = new (Provider as any)(...mockDeps); const instance2 = new (Provider as any)(...mockDeps); // 1. Verify no global "cache" property (it was removed in favor of per-instance behavior) expect(instance1).not.toHaveProperty('cache'); // 2. Find any property ending in 'Loader' const loaderKey = Object.keys(instance1).find(k => k.endsWith('Loader')); if (loaderKey) { const loader1 = (instance1 as any)[loaderKey]; const loader2 = (instance2 as any)[loaderKey]; expect(loader1).toBeDefined(); expect(loader2).toBeDefined(); // Critical check: Loaders must be different references expect(loader1).not.toBe(loader2); } }); });