Skip to content

Commit

Permalink
(test):Common utils test coverage (openmrs#339)
Browse files Browse the repository at this point in the history
* (test):Common utils test coverage

* move obs list to the mocks folder
  • Loading branch information
gitcliff authored and Art-Ndiema committed Aug 8, 2024
1 parent fa30035 commit 60b57b7
Show file tree
Hide file tree
Showing 2 changed files with 173 additions and 0 deletions.
37 changes: 37 additions & 0 deletions __mocks__/forms/rfe-forms/obs-list-data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
export const obsList = [
{
concept: '7e43b05b-b6d8-4eb5-8f37-0b14f5347368',
obsDatetime: '2023-07-01',
obsGroup: null,
groupMembers: [
{
concept: '4c43b05b-b6d8-4eb5-8f37-0b14f5347548',
obsDatetime: '2023-07-02',
obsGroup: null,
groupMembers: [],
comment: '',
location: null,
order: null,
encounter: null,
voided: false,
value: null,
formFieldPath: '',
formFieldNamespace: '',
status: '',
interpretation: '',
uuid: '',
},
],
comment: '',
location: null,
order: null,
encounter: null,
voided: false,
value: null,
formFieldPath: '',
formFieldNamespace: '',
status: '',
interpretation: '',
uuid: '',
},
];
136 changes: 136 additions & 0 deletions src/utils/common-utils.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import { flattenObsList, hasRendering, clearSubmission, gracefullySetSubmission, hasSubmission } from './common-utils';
import { isEmpty } from '../validators/form-validator';
import { type FormField, type OpenmrsObs } from '../types';
import { obsList } from '__mocks__/forms/rfe-forms/obs-list-data';

jest.mock('@openmrs/esm-framework', () => ({
formatDate: jest.fn(),
restBaseUrl: 'http://openmrs.com/rest',
}));

jest.mock('../validators/form-validator', () => ({
isEmpty: jest.fn(),
}));

describe('utils functions', () => {
describe('flattenObsList', () => {
it('should flatten a nested obs list', () => {
const result = flattenObsList(obsList);
expect(result).toHaveLength(2);
});
});

describe('hasRendering', () => {
it('should return true if the field has the specified rendering', () => {
const field: FormField = {
label: 'Test Field',
type: 'obs',
questionOptions: { rendering: 'text' },
id: 'testFieldId',
} as FormField;

expect(hasRendering(field, 'text')).toBe(true);
});

it('should return false if the field does not have the specified rendering', () => {
const field: FormField = {
label: 'Test Field',
type: 'obs',
questionOptions: { rendering: 'textarea' },
id: 'testFieldId',
} as FormField;

expect(hasRendering(field, 'text')).toBe(false);
});
});

describe('clearSubmission', () => {
it('should initialize the submission object if not present and clear values', () => {
const field: FormField = {
label: 'Test Field',
type: 'obs',
questionOptions: {},
id: 'testFieldId',
meta: {},
} as FormField;

clearSubmission(field);

expect(field.meta.submission).toEqual({
voidedValue: null,
newValue: null,
});
});
});

describe('gracefullySetSubmission', () => {
it('should set the newValue and voidedValue correctly', () => {
const field: FormField = {
label: 'Test Field',
type: 'obs',
questionOptions: {},
id: 'testFieldId',
meta: {},
} as FormField;

(isEmpty as jest.Mock).mockReturnValueOnce(false).mockReturnValueOnce(false);

const newValue = 'new value';
const voidedValue = 'voided value';

gracefullySetSubmission(field, newValue, voidedValue);

expect(field.meta.submission).toEqual({
voidedValue: 'voided value',
newValue: 'new value',
});
});

it('should not set values if they are empty', () => {
const field: FormField = {
label: 'Test Field',
type: 'obs',
questionOptions: {},
id: 'testFieldId',
meta: {},
} as FormField;

(isEmpty as jest.Mock).mockReturnValueOnce(true).mockReturnValueOnce(true);

gracefullySetSubmission(field, '', '');

expect(field.meta.submission).toEqual({});
});
});

describe('hasSubmission', () => {
it('should return true if there is a newValue or voidedValue', () => {
const field: FormField = {
label: 'Test Field',
type: 'obs',
questionOptions: {},
id: 'testFieldId',
meta: {
submission: {
newValue: 'new value',
voidedValue: 'voided value',
},
},
} as FormField;

expect(hasSubmission(field)).toBe(true);
});

it('should return false if there is no newValue or voidedValue', () => {
const field: FormField = {
label: 'Test Field',
type: 'obs',
questionOptions: {},
id: 'testFieldId',
meta: {},
} as FormField;

expect(hasSubmission(field)).toBe(false);
});
});
});

0 comments on commit 60b57b7

Please sign in to comment.