fixes a number of issues

This commit is contained in:
2026-05-26 23:20:31 -07:00
parent 78bd1d92e0
commit 4fca49bff0
6 changed files with 199 additions and 63 deletions

View File

@@ -15,13 +15,8 @@ async function openEditModal(page: any, transactionIndex: number = 0) {
await page.waitForSelector('#modal-holder[x-show="open"]', { state: 'visible' });
await page.waitForSelector('#wizardmodal');
// Click Next to go to the links step (button says "Transaction Actions")
await page.click('button:has-text("Transaction Actions")');
// Wait for the links step to load
await page.waitForSelector('text=Transaction Actions', { state: 'visible' });
// Click on "Manual" tab
// The modal is now single-page (Edit Transaction). Click "Manual" tab to ensure
// the manual account coding form is active.
await page.click('button:has-text("Manual")');
// Wait for the manual form to appear
@@ -383,6 +378,83 @@ async function openEditModalForTransaction(page: any, description: string) {
await page.waitForSelector('text=Transaction Actions', { state: 'visible' });
}
async function selectVendorFromTypeahead(page: any, vendorName: string) {
const testInfo = await getTestInfo(page);
const vendorId = testInfo.accounts.vendor;
if (!vendorId) {
throw new Error(`Could not find vendor with name ${vendorName}`);
}
const vendorContainer = page.locator('div[hx-post*="edit-vendor-changed"]').first();
const vendorHidden = vendorContainer.locator('input[type="hidden"]').first();
await vendorHidden.evaluate((el: HTMLInputElement, value: string) => {
const newInput = document.createElement('input');
newInput.type = 'hidden';
newInput.name = el.name;
newInput.value = value;
el.parentNode.replaceChild(newInput, el);
}, vendorId.toString());
await vendorContainer.evaluate((el: HTMLElement) => {
el.dispatchEvent(new Event('change', { bubbles: true }));
});
await page.waitForResponse(response => response.url().includes('/edit-vendor-changed') && response.status() === 200);
await page.waitForTimeout(500);
}
test.describe('Transaction Edit Vendor Pre-population', () => {
test('should start with no account rows when transaction has no accounts', async ({ page }) => {
await openEditModal(page, 3);
await page.click('button:has-text("Manual")');
await page.waitForSelector('#account-grid-body');
// Remove any existing accounts from previous tests
await removeAllAccounts(page);
await page.waitForTimeout(1000);
const accountRows = page.locator('#account-grid-body tbody tr.account-row');
const rowCount = await accountRows.count();
expect(rowCount).toBe(0);
});
test('should pre-populate default account when vendor is selected', async ({ page }) => {
await openEditModal(page, 3);
await page.click('button:has-text("Manual")');
await page.waitForSelector('#account-grid-body');
// Remove any existing accounts from previous tests
await removeAllAccounts(page);
await page.waitForTimeout(1000);
const accountRows = page.locator('#account-grid-body tbody tr.account-row');
const initialRowCount = await accountRows.count();
expect(initialRowCount).toBe(0);
await selectVendorFromTypeahead(page, 'Test Vendor');
const rowsAfterVendor = page.locator('#account-grid-body tbody tr.account-row');
const rowCountAfter = await rowsAfterVendor.count();
expect(rowCountAfter).toBe(1);
const accountHidden = page.locator('input[type="hidden"][name*="transaction-account/account"]').first();
const accountValue = await accountHidden.inputValue();
const testInfo = await getTestInfo(page);
expect(accountValue).toBe(testInfo.accounts['test-account'].toString());
const amountInput = page.locator('.account-amount-field').first();
const amountValue = await amountInput.inputValue();
expect(parseFloat(amountValue)).toBeCloseTo(400.0, 1);
});
});
test.describe('Transaction Link Date Display', () => {
test('should show payment date when linking to payment', async ({ page }) => {
await openEditModalForTransaction(page, 'Transaction for payment link');