Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions __tests__/components/__snapshots__/components.test.js.snap
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`test Collect And Reveal Elements Components test CardHolderNameElement component 1`] = `
exports[`test Collect Elements Components test CardHolderNameElement component 1`] = `
<View>
<Text
style={Object {}}
Expand Down Expand Up @@ -31,7 +31,7 @@ exports[`test Collect And Reveal Elements Components test CardHolderNameElement
</View>
`;

exports[`test Collect And Reveal Elements Components test CardNumberElement component 1`] = `
exports[`test Collect Elements Components test CardNumberElement component 1`] = `
<View>
<Text
style={Object {}}
Expand Down Expand Up @@ -95,7 +95,7 @@ exports[`test Collect And Reveal Elements Components test CardNumberElement comp
</View>
`;

exports[`test Collect And Reveal Elements Components test CvvElement component 1`] = `
exports[`test Collect Elements Components test CvvElement component 1`] = `
<View>
<Text
style={Object {}}
Expand Down Expand Up @@ -128,7 +128,7 @@ exports[`test Collect And Reveal Elements Components test CvvElement component 1
</View>
`;

exports[`test Collect And Reveal Elements Components test ExpirationDateElement component 1`] = `
exports[`test Collect Elements Components test ExpirationDateElement component 1`] = `
<View>
<Text
style={Object {}}
Expand Down Expand Up @@ -161,7 +161,7 @@ exports[`test Collect And Reveal Elements Components test ExpirationDateElement
</View>
`;

exports[`test Collect And Reveal Elements Components test ExpirationMonthElement component 1`] = `
exports[`test Collect Elements Components test ExpirationMonthElement component 1`] = `
<View>
<Text
style={Object {}}
Expand Down Expand Up @@ -194,7 +194,7 @@ exports[`test Collect And Reveal Elements Components test ExpirationMonthElement
</View>
`;

exports[`test Collect And Reveal Elements Components test ExpirationYearElement component 1`] = `
exports[`test Collect Elements Components test ExpirationYearElement component 1`] = `
<View>
<Text
style={Object {}}
Expand Down Expand Up @@ -227,7 +227,7 @@ exports[`test Collect And Reveal Elements Components test ExpirationYearElement
</View>
`;

exports[`test Collect And Reveal Elements Components test InputFieldElement component 1`] = `
exports[`test Collect Elements Components test InputFieldElement component 1`] = `
<View>
<Text
style={Object {}}
Expand Down Expand Up @@ -258,7 +258,7 @@ exports[`test Collect And Reveal Elements Components test InputFieldElement comp
</View>
`;

exports[`test Collect And Reveal Elements Components test PinElement component 1`] = `
exports[`test Collect Elements Components test PinElement component 1`] = `
<View>
<Text
style={Object {}}
Expand Down Expand Up @@ -291,7 +291,7 @@ exports[`test Collect And Reveal Elements Components test PinElement component 1
</View>
`;

exports[`test Collect And Reveal Elements Components test RevealElement component 1`] = `
exports[`test Collect Elements Components test Reveal Elements Components renders correctly with the handler & snapshot 1`] = `
Array [
<Text
style={Object {}}
Expand All @@ -311,7 +311,7 @@ Array [
]
`;

exports[`test Collect And Reveal Elements Components test skyflow provider 1`] = `
exports[`test Collect Elements Components test skyflow provider 1`] = `
<Text>
Provider Childern
</Text>
Expand Down
128 changes: 93 additions & 35 deletions __tests__/components/components.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ const changeTrigger = jest.fn();
const foucsTrigger = jest.fn();
const blurTrigger = jest.fn();

describe('test Collect And Reveal Elements Components', () => {
describe('test Collect Elements Components', () => {
let collectContainer;
beforeEach(() => {
jest.clearAllMocks();
Expand Down Expand Up @@ -558,44 +558,102 @@ describe('test Collect And Reveal Elements Components', () => {
}
});

it('test RevealElement component', () => {
const revealSetMethodMock = jest.fn();
const revealContainer = new RevealContainer(testSkyflowClient);
jest.spyOn(revealContainer, 'create').mockImplementation(() => ({
setMethods: revealSetMethodMock,
}));
describe('test Reveal Elements Components', () => {
it('renders correctly with the handler & snapshot', () => {
const revealSetMethodMock = jest.fn();
const revealContainer = new RevealContainer(testSkyflowClient);
jest.spyOn(revealContainer, 'create').mockImplementation(() => ({
setMethods: revealSetMethodMock,
}));

const revealElement = render(
<RevealElement
token={'test_token'}
container={revealContainer}
label={'Card Number'}
altText={'XXXX XXXX XXXX XXXX'}
/>
);

const revealElement = render(
<RevealElement
token={'test_token'}
container={revealContainer}
label={'Card Number'}
altText={'XXXX XXXX XXXX XXXX'}
/>
);
expect(revealElement).toMatchSnapshot();
expect(revealSetMethodMock).toBeCalledTimes(1);

expect(revealElement).toMatchSnapshot();
expect(revealSetMethodMock).toBeCalledTimes(1);
// render without alttext
const revealElement2 = render(
<RevealElement
token={'test_token'}
container={revealContainer}
label={'Card Number'}
/>
);
try {
render(<RevealElement token={'test_token'} label={'Card Number'} />);
} catch (err) {
expect(err).toEqual(
new SkyflowError(
SKYFLOW_ERROR_CODE.CONTAINER_OBJECT_IS_REQUIRED,
['Reveal', 'useRevealContainer()'],
true
)
);
}
});

it('renders formatted value when format is provided', () => {
const revealSetMethodMock = jest.fn();
const revealContainer = new RevealContainer(testSkyflowClient);
jest.spyOn(revealContainer, 'create').mockImplementation(() => ({
setMethods: revealSetMethodMock,
}));

const format = 'XXXX XXXX XXXX XXXX';
const altText = '4111111111111111';

// render without alttext
const revealElement2 = render(
<RevealElement
token={'test_token'}
container={revealContainer}
label={'Card Number'}
/>
);
try {
render(<RevealElement token={'test_token'} label={'Card Number'} />);
} catch (err) {
expect(err).toEqual(
new SkyflowError(
SKYFLOW_ERROR_CODE.CONTAINER_OBJECT_IS_REQUIRED,
['Reveal', 'useRevealContainer()'],
true
)
render(
<RevealElement
token={'test_token'}
container={revealContainer}
label={'Card Number'}
altText={altText}
format={format}
testID="reveal-format"
/>
);
}

// Should format altText using format
expect(screen.getByTestId('reveal-format').props.children).toBe(
'4111 1111 1111 1111'
);
});

it('renders formatted value when format and translation are provided', () => {
const revealSetMethodMock = jest.fn();
const revealContainer = new RevealContainer(testSkyflowClient);
jest.spyOn(revealContainer, 'create').mockImplementation(() => ({
setMethods: revealSetMethodMock,
}));

const format = 'XX-XX-XX-YYZ-ZZX';
const translation = { X: '[0-9]', Y: '[A-Z]' };
const altText = '123456AB7';

render(
<RevealElement
token={'test_token'}
container={revealContainer}
label={'Code'}
altText={altText}
format={format}
translation={translation}
testID="reveal-format-translation"
/>
);

// Should format altText using format and translation
expect(
screen.getByTestId('reveal-format-translation').props.children
).toBe('12-34-56-ABZ-ZZ7');
});
});

it('test skyflow provider', () => {
Expand Down
14 changes: 11 additions & 3 deletions src/components/RevealElement/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,22 @@ import RevealSkyflowElement from "../../core/RevealSkyflowElement";
import { RevealElementProps } from "../../utils/constants"
import SkyflowError from "../../utils/skyflow-error";
import SKYFLOW_ERROR_CODE from "../../utils/skyflow-error-code";
import { formatInputFieldValue } from "../../utils/helpers";
import { DEFAULT_INPUT_FIELD_TRANSLATION } from "../../core/constants";


const RevealElement: React.FC<RevealElementProps> = ({ container, label, ...rest }) => {
const RevealElement: React.FC<RevealElementProps> = ({ container, label, format, translation, ...rest }) => {
const [element, setElement] = React.useState<RevealSkyflowElement>(undefined);
const [errorText, setErrorText] = React.useState<string>('');
const [value, setValue] = React.useState(rest?.altText || rest.token);

const formattedValue = React.useMemo(() => {
if (!format) return value;
const valueTranslation = translation ?? DEFAULT_INPUT_FIELD_TRANSLATION;
const formattedText = formatInputFieldValue(value, format, valueTranslation);
return formattedText ? formattedText : value;
}, [value, format, translation]);

useEffect(() => {
if (container) {
const revealElement = container.create(rest);
Expand All @@ -22,12 +31,11 @@ const RevealElement: React.FC<RevealElementProps> = ({ container, label, ...rest
} else {
throw new SkyflowError(SKYFLOW_ERROR_CODE.CONTAINER_OBJECT_IS_REQUIRED, ['Reveal', 'useRevealContainer()'], true)
}

}, []);

return <>
<Text style={rest.labelStyles?.base || {}}>{label}</Text>
<Text selectable style={rest?.inputStyles?.base || {}} testID={rest?.testID}>{value}</Text>
<Text selectable style={rest?.inputStyles?.base || {}} testID={rest?.testID}>{formattedValue}</Text>
<Text style={rest?.errorTextStyles?.base || {}} testID={`${label}-error`}>{errorText}</Text>
</>

Expand Down
2 changes: 2 additions & 0 deletions src/utils/constants/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ export interface RevealElementInput {
export interface RevealElementProps {
token: string;
container: RevealContainer;
format?: string
translation?: Record<string, string>;
label?: string;
altText?: string;
inputStyles?: StylesBaseVariant;
Expand Down