Skip to content

Commit fc4e714

Browse files
committed
Merge branch 'hotfix/hide-pia-in-prod-url-fix' into release/v4.8.0
2 parents 799249c + d2d396b commit fc4e714

File tree

4 files changed

+420
-22
lines changed

4 files changed

+420
-22
lines changed

tdrs-frontend/src/components/Reports/FRAReports.test.js

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1505,4 +1505,140 @@ describe('FRA Reports Page', () => {
15051505
})
15061506
})
15071507
})
1508+
1509+
describe('URL parameter validation', () => {
1510+
const adminState = {
1511+
...initialState,
1512+
auth: {
1513+
authenticated: true,
1514+
user: {
1515+
email: 'hi@bye.com',
1516+
stt: null,
1517+
roles: [{ id: 1, name: 'OFA System Admin', permission: [] }],
1518+
account_approval_status: 'Approved',
1519+
},
1520+
},
1521+
}
1522+
1523+
it('should accept valid URL parameters', async () => {
1524+
const store = mockStore(adminState)
1525+
const { getByLabelText } = render(
1526+
<Provider store={store}>
1527+
<MemoryRouter
1528+
initialEntries={[
1529+
'/?fy=2023&q=Q1&type=workOutcomesOfTanfExiters&stt=Alabama',
1530+
]}
1531+
>
1532+
<FRAReports />
1533+
</MemoryRouter>
1534+
</Provider>
1535+
)
1536+
1537+
await waitFor(() => {
1538+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1539+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1540+
expect(yearSelect.value).toBe('2023')
1541+
expect(quarterSelect.value).toBe('Q1')
1542+
})
1543+
})
1544+
1545+
it('should clear only fiscal year when it is invalid', async () => {
1546+
const store = mockStore(adminState)
1547+
const { getByLabelText } = render(
1548+
<Provider store={store}>
1549+
<MemoryRouter
1550+
initialEntries={[
1551+
'/?fy=2019&q=Q1&type=workOutcomesOfTanfExiters&stt=Alabama',
1552+
]}
1553+
>
1554+
<FRAReports />
1555+
</MemoryRouter>
1556+
</Provider>
1557+
)
1558+
1559+
await waitFor(() => {
1560+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1561+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1562+
// Only fy should be cleared, other valid params kept
1563+
expect(yearSelect.value).toBe('')
1564+
expect(quarterSelect.value).toBe('Q1')
1565+
})
1566+
})
1567+
1568+
it('should clear only quarter when it is invalid', async () => {
1569+
const store = mockStore(adminState)
1570+
const { getByLabelText } = render(
1571+
<Provider store={store}>
1572+
<MemoryRouter
1573+
initialEntries={[
1574+
'/?fy=2023&q=Q5&type=workOutcomesOfTanfExiters&stt=Alabama',
1575+
]}
1576+
>
1577+
<FRAReports />
1578+
</MemoryRouter>
1579+
</Provider>
1580+
)
1581+
1582+
await waitFor(() => {
1583+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1584+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1585+
// Only quarter should be cleared, other valid params kept
1586+
expect(yearSelect.value).toBe('2023')
1587+
expect(quarterSelect.value).toBe('')
1588+
})
1589+
})
1590+
1591+
it('should reset file type to default when it is invalid for FRA', async () => {
1592+
const store = mockStore(adminState)
1593+
const { getByLabelText } = render(
1594+
<Provider store={store}>
1595+
<MemoryRouter
1596+
initialEntries={['/?fy=2023&q=Q1&type=tanf&stt=Alabama']}
1597+
>
1598+
<FRAReports />
1599+
</MemoryRouter>
1600+
</Provider>
1601+
)
1602+
1603+
await waitFor(() => {
1604+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1605+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1606+
// Year and quarter should be kept, type resets to default
1607+
expect(yearSelect.value).toBe('2023')
1608+
expect(quarterSelect.value).toBe('Q1')
1609+
// Work Outcomes radio should be selected (default for FRA)
1610+
const workOutcomesRadio = getByLabelText(
1611+
'Work Outcomes of TANF Exiters'
1612+
)
1613+
expect(workOutcomesRadio.checked).toBe(true)
1614+
})
1615+
})
1616+
1617+
it('should clear only STT when it is invalid', async () => {
1618+
const store = mockStore(adminState)
1619+
const { getByLabelText } = render(
1620+
<Provider store={store}>
1621+
<MemoryRouter
1622+
initialEntries={[
1623+
'/?fy=2023&q=Q1&type=workOutcomesOfTanfExiters&stt=NonExistentSTT',
1624+
]}
1625+
>
1626+
<FRAReports />
1627+
</MemoryRouter>
1628+
</Provider>
1629+
)
1630+
1631+
await waitFor(() => {
1632+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1633+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1634+
const sttInput = getByLabelText('State, Tribe, or Territory*', {
1635+
selector: 'input',
1636+
})
1637+
// Only STT should be cleared, other valid params kept
1638+
expect(yearSelect.value).toBe('2023')
1639+
expect(quarterSelect.value).toBe('Q1')
1640+
expect(sttInput.value).toBe('')
1641+
})
1642+
})
1643+
})
15081644
})

tdrs-frontend/src/components/Reports/Reports.test.js

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1527,4 +1527,152 @@ describe('Reports', () => {
15271527
})
15281528
})
15291529
})
1530+
1531+
describe('URL parameter validation', () => {
1532+
it('should accept valid URL parameters', async () => {
1533+
const store = mockStore(initialState)
1534+
const { getByLabelText } = render(
1535+
<Provider store={store}>
1536+
<MemoryRouter initialEntries={['/?fy=2023&q=Q1&type=tanf']}>
1537+
<Reports />
1538+
</MemoryRouter>
1539+
</Provider>
1540+
)
1541+
1542+
await waitFor(() => {
1543+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1544+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1545+
expect(yearSelect.value).toBe('2023')
1546+
expect(quarterSelect.value).toBe('Q1')
1547+
})
1548+
})
1549+
1550+
it('should clear only fiscal year when it is invalid', async () => {
1551+
const store = mockStore(initialState)
1552+
const { getByLabelText } = render(
1553+
<Provider store={store}>
1554+
<MemoryRouter initialEntries={['/?fy=2019&q=Q1&type=tanf']}>
1555+
<Reports />
1556+
</MemoryRouter>
1557+
</Provider>
1558+
)
1559+
1560+
await waitFor(() => {
1561+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1562+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1563+
// Only fy should be cleared, other valid params kept
1564+
expect(yearSelect.value).toBe('')
1565+
expect(quarterSelect.value).toBe('Q1')
1566+
})
1567+
})
1568+
1569+
it('should clear only quarter when it is invalid', async () => {
1570+
const store = mockStore(initialState)
1571+
const { getByLabelText } = render(
1572+
<Provider store={store}>
1573+
<MemoryRouter initialEntries={['/?fy=2023&q=Q5&type=tanf']}>
1574+
<Reports />
1575+
</MemoryRouter>
1576+
</Provider>
1577+
)
1578+
1579+
await waitFor(() => {
1580+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1581+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1582+
// Only quarter should be cleared, other valid params kept
1583+
expect(yearSelect.value).toBe('2023')
1584+
expect(quarterSelect.value).toBe('')
1585+
})
1586+
})
1587+
1588+
it('should reset file type to default when it is invalid', async () => {
1589+
const store = mockStore(initialState)
1590+
const { getByLabelText } = render(
1591+
<Provider store={store}>
1592+
<MemoryRouter initialEntries={['/?fy=2023&q=Q1&type=invalid-type']}>
1593+
<Reports />
1594+
</MemoryRouter>
1595+
</Provider>
1596+
)
1597+
1598+
await waitFor(() => {
1599+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1600+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1601+
// Year and quarter should be kept, type resets to default (tanf)
1602+
expect(yearSelect.value).toBe('2023')
1603+
expect(quarterSelect.value).toBe('Q1')
1604+
// TANF radio should be selected (default) - check by label text
1605+
const tanfRadio = getByLabelText('TANF')
1606+
expect(tanfRadio.checked).toBe(true)
1607+
})
1608+
})
1609+
1610+
it('should clear only STT when it is invalid', async () => {
1611+
const store = mockStore(initialState)
1612+
const { getByLabelText } = render(
1613+
<Provider store={store}>
1614+
<MemoryRouter
1615+
initialEntries={['/?fy=2023&q=Q1&type=tanf&stt=NonExistentSTT']}
1616+
>
1617+
<Reports />
1618+
</MemoryRouter>
1619+
</Provider>
1620+
)
1621+
1622+
await waitFor(() => {
1623+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1624+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1625+
const sttInput = getByLabelText('State, Tribe, or Territory*', {
1626+
selector: 'input',
1627+
})
1628+
// Only STT should be cleared, other valid params kept
1629+
expect(yearSelect.value).toBe('2023')
1630+
expect(quarterSelect.value).toBe('Q1')
1631+
expect(sttInput.value).toBe('')
1632+
})
1633+
})
1634+
1635+
it('should accept valid STT', async () => {
1636+
const store = mockStore(initialState)
1637+
const { getByLabelText } = render(
1638+
<Provider store={store}>
1639+
<MemoryRouter
1640+
initialEntries={['/?fy=2023&q=Q1&type=tanf&stt=California']}
1641+
>
1642+
<Reports />
1643+
</MemoryRouter>
1644+
</Provider>
1645+
)
1646+
1647+
await waitFor(() => {
1648+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1649+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1650+
const sttInput = getByLabelText('State, Tribe, or Territory*', {
1651+
selector: 'input',
1652+
})
1653+
expect(yearSelect.value).toBe('2023')
1654+
expect(quarterSelect.value).toBe('Q1')
1655+
expect(sttInput.value).toBe('California')
1656+
})
1657+
})
1658+
1659+
it('should clear only fiscal year when it is non-numeric', async () => {
1660+
const store = mockStore(initialState)
1661+
const { getByLabelText } = render(
1662+
<Provider store={store}>
1663+
<MemoryRouter initialEntries={['/?fy=abc&q=Q1&type=tanf']}>
1664+
<Reports />
1665+
</MemoryRouter>
1666+
</Provider>
1667+
)
1668+
1669+
await waitFor(() => {
1670+
const yearSelect = getByLabelText('Fiscal Year (October - September)*')
1671+
const quarterSelect = getByLabelText('Fiscal Quarter*')
1672+
// Only fy should be cleared, other valid params kept
1673+
expect(yearSelect.value).toBe('')
1674+
expect(quarterSelect.value).toBe('Q1')
1675+
})
1676+
})
1677+
})
15301678
})

0 commit comments

Comments
 (0)