Skip to content

Commit

Permalink
[#39] Split cascade test case and fix invalid parent id
Browse files Browse the repository at this point in the history
  • Loading branch information
ifirmawan committed Jul 31, 2023
1 parent 5f92efc commit 775db50
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 17 deletions.
8 changes: 5 additions & 3 deletions app/src/form/fields/TypeCascade.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,11 @@ const TypeCascade = ({
const finalValues =
updatedItems.length !== dropdownValues.length ? null : dropdownValues.map((dd) => dd.value);
onChange(id, finalValues);

if (finalValues) {
const { options: selectedOptions, value: selectedValue } = dropdownValues.pop();
const findSelected = selectedOptions?.find((o) => o.id === selectedValue) || [];
const cascadeName = findSelected?.name || null;

FormState.update((s) => {
s.dataPointName = s.dataPointName.map((dn) =>
dn.type === 'cascade' ? { ...dn, value: cascadeName } : dn,
Expand All @@ -74,12 +74,14 @@ const TypeCascade = ({

useEffect(() => {
const parentID = source?.parent_id || 0;
const filterDs = dataSource.filter(
let filterDs = dataSource.filter(
(ds) =>
ds?.id === parentID ||
ds?.parent === parentID ||
(values[id] && (values[id].includes(ds?.id) || values[id].includes(ds?.parent))),
);
if (filterDs.length === 0) {
filterDs = dataSource.filter((ds) => ds?.id === parentID);
}
if (dropdownItems.length === 0 && dataSource.length && filterDs.length) {
const groupedDs = groupBy(filterDs, 'parent');
const initialDropdowns = Object.values(groupedDs).map((options, ox) => {
Expand Down
34 changes: 20 additions & 14 deletions app/src/form/fields/__test__/TypeCascade.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -480,9 +480,7 @@ describe('TypeCascade', () => {
const dropdown1 = getByTestId('dropdown-cascade-0');
expect(dropdown1).toBeDefined();

const dropdown2 = getByTestId('dropdown-cascade-1');
expect(dropdown2).toBeDefined();
fireEvent.press(dropdown2);
fireEvent.press(dropdown1);

const selectedText = getByText('Sabdodadi');
fireEvent.press(selectedText);
Expand Down Expand Up @@ -537,10 +535,7 @@ describe('TypeCascade', () => {

const dropdown1 = getByTestId('dropdown-cascade-0');
expect(dropdown1).toBeDefined();

const dropdown2 = getByTestId('dropdown-cascade-1');
expect(dropdown2).toBeDefined();
fireEvent.press(dropdown2);
fireEvent.press(dropdown1);

const selectedText = getByText('Bantul');
fireEvent.press(selectedText);
Expand All @@ -561,17 +556,26 @@ describe('TypeCascade', () => {
expect(dpName).toBe('');
expect(values[fieldID]).toEqual([107, 108]);
});
});

it('Should not get cascade name as datapoint name when there is no cascade type', async () => {
act(() => {
FormState.update((s) => {
s.dataPointName = [
{ type: 'text', value: 'Example' },
{ types: 'geo', value: null },
];
s.dataPointName = [{ type: 'text', value: 'Example' }, { value: 'Data' }];
});
});

rerender(
const fieldID = 'location';
const fieldName = 'Location';
const initialValue = null;
const values = { [fieldID]: initialValue };

const mockedOnChange = jest.fn((fieldName, value) => {
values[fieldName] = value;
});

const questionSource = { file: 'file.sqlite', parent_id: 107 };
const { getByTestId, getByText, rerender } = render(
<TypeCascade
onChange={mockedOnChange}
id={fieldID}
Expand All @@ -582,7 +586,9 @@ describe('TypeCascade', () => {
/>,
);

fireEvent.press(dropdown2);
const dropdown1 = getByTestId('dropdown-cascade-0');
expect(dropdown1).toBeDefined();
fireEvent.press(dropdown1);

const selectedText2 = getByText('Sabdodadi');
fireEvent.press(selectedText2);
Expand All @@ -600,7 +606,7 @@ describe('TypeCascade', () => {
await waitFor(() => {
const { result } = renderHook(() => FormState.useState((s) => s.dataPointName));
const { dpName } = generateDataPointName(result.current);
expect(dpName).toBe('Example');
expect(dpName).toBe('Example - Data');
expect(values[fieldID]).toEqual([107, 109]);
});
});
Expand Down

0 comments on commit 775db50

Please sign in to comment.