Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
9e2b983
SK-2126 insert unformatted card number to vault (#107)
skyflow-shravan Jun 30, 2025
dbbc6f1
[AUTOMATED] Private Release 1.9.0-dev.9e2b983
skyflow-shravan Jun 30, 2025
dde97df
SK-2131 fix expiry date validation (#109)
raushan-skyflow Jul 8, 2025
c040c47
[AUTOMATED] Private Release 1.9.0-dev.dde97df
raushan-skyflow Jul 8, 2025
915c8c9
SK-2157 custom input formatting for collect elements (#108)
raushan-skyflow Jul 8, 2025
e797cf6
[AUTOMATED] Private Release 1.9.0-dev.915c8c9
raushan-skyflow Jul 8, 2025
f3edc4a
SK-2173 support input formatting in reveal elements (#110)
raushan-skyflow Jul 11, 2025
044185e
[AUTOMATED] Private Release 1.9.0-dev.f3edc4a
raushan-skyflow Jul 11, 2025
40c7b7d
SK-2173 fix card number regex (#111)
raushan-skyflow Jul 17, 2025
d365d2a
[AUTOMATED] Private Release 1.9.0-dev.40c7b7d
raushan-skyflow Jul 17, 2025
4e22480
SK-2173 revert unformatted card no insertion to vault (#112)
raushan-skyflow Jul 18, 2025
ffdb6b4
[AUTOMATED] Private Release 1.9.0-dev.4e22480
raushan-skyflow Jul 18, 2025
80b44eb
SK-2167 fix critical vulnerabilities (#113)
raushan-skyflow Jul 22, 2025
5968122
[AUTOMATED] Private Release 1.9.0-dev.80b44eb
raushan-skyflow Jul 22, 2025
7036b45
SK-2050: Add Set Token in Reveal Element (#117)
saileshwar-skyflow Dec 19, 2025
48cf8c6
[AUTOMATED] Private Release 1.9.0-dev.7036b45
saileshwar-skyflow Dec 19, 2025
896cf63
SK-2050: Merge branch 'release/25.6.1' into release/25.12.0
saileshwar-skyflow Dec 20, 2025
999b188
[AUTOMATED] Private Release 1.9.0-dev.896cf63
saileshwar-skyflow Dec 20, 2025
ef764b9
SK-2050: add SkyflowRevealElementRef type
saileshwar-skyflow Dec 22, 2025
155c908
[AUTOMATED] Private Release 1.9.0-dev.ef764b9
saileshwar-skyflow Dec 22, 2025
58de833
SK-2050: fix types issue in the build
saileshwar-skyflow Dec 22, 2025
8b6b4ce
[AUTOMATED] Private Release 1.9.0-dev.58de833
saileshwar-skyflow Dec 22, 2025
28f5536
SK-2050: update metro config
saileshwar-skyflow Dec 23, 2025
ad5f53c
[AUTOMATED] Private Release 1.9.0-dev.28f5536
saileshwar-skyflow Dec 23, 2025
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
51 changes: 40 additions & 11 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 All @@ -26,11 +26,12 @@ exports[`test Collect And Reveal Elements Components test CardHolderNameElement
/>
<Text
style={Object {}}
testID="name-error"
/>
</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 @@ -89,11 +90,12 @@ exports[`test Collect And Reveal Elements Components test CardNumberElement comp
</View>
<Text
style={Object {}}
testID="cardnumber-error"
/>
</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 @@ -121,11 +123,12 @@ exports[`test Collect And Reveal Elements Components test CvvElement component 1
/>
<Text
style={Object {}}
testID="cvv-error"
/>
</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 @@ -153,11 +156,12 @@ exports[`test Collect And Reveal Elements Components test ExpirationDateElement
/>
<Text
style={Object {}}
testID="date-error"
/>
</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 @@ -185,11 +189,12 @@ exports[`test Collect And Reveal Elements Components test ExpirationMonthElement
/>
<Text
style={Object {}}
testID="month-error"
/>
</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 @@ -217,11 +222,12 @@ exports[`test Collect And Reveal Elements Components test ExpirationYearElement
/>
<Text
style={Object {}}
testID="year-error"
/>
</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 All @@ -247,11 +253,12 @@ exports[`test Collect And Reveal Elements Components test InputFieldElement comp
/>
<Text
style={Object {}}
testID="inputfield-error"
/>
</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 @@ -279,11 +286,12 @@ exports[`test Collect And Reveal Elements Components test PinElement component 1
/>
<Text
style={Object {}}
testID="pin-error"
/>
</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 @@ -298,12 +306,33 @@ Array [
</Text>,
<Text
style={Object {}}
testID="Card Number-error"
/>,
]
`;

exports[`test Collect And Reveal Elements Components test skyflow provider 1`] = `
exports[`test Collect Elements Components test RevealElement component rendering 1`] = `
Array [
<Text
style={Object {}}
>
Card Number
</Text>,
<Text
selectable={true}
style={Object {}}
>
XXXX XXXX XXXX XXXX
</Text>,
<Text
style={Object {}}
testID="Card Number-error"
/>,
]
`;

exports[`test Collect Elements Components test skyflow provider 1`] = `
<Text>
Provider Childern
Provider Children
</Text>
`;
149 changes: 143 additions & 6 deletions __tests__/components/components.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { Text } from 'react-native';
import SkyflowError from '../../src/utils/skyflow-error';
import SKYFLOW_ERROR_CODE from '../../src/utils/skyflow-error-code';
import { ContainerType, ElementType } from '../../src/utils/constants';
import { act } from 'react-test-renderer';

const testSkyflowClient = new Skyflow({
vaultID: '1234',
Expand All @@ -37,7 +38,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,11 +559,112 @@ describe('test Collect And Reveal Elements Components', () => {
}
});

it('test RevealElement component', () => {
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'}
/>
);

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(
<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 RevealElement component rendering', () => {
const revealSetMethodMock = jest.fn();
const revealSetTokenMock = jest.fn();
const revealContainer = new RevealContainer(testSkyflowClient);

jest.spyOn(revealContainer, 'create').mockImplementation(() => ({
setMethods: revealSetMethodMock,
setToken: revealSetTokenMock,
}));

const revealElement = render(
Expand All @@ -577,14 +679,15 @@ describe('test Collect And Reveal Elements Components', () => {
expect(revealElement).toMatchSnapshot();
expect(revealSetMethodMock).toBeCalledTimes(1);

// render without alttext
const revealElement2 = render(
render(
<RevealElement
token={'test_token'}
token={'test_token_no_alt'}
container={revealContainer}
label={'Card Number'}
/>
);
expect(screen.getByText('test_token_no_alt')).toBeTruthy();

try {
render(<RevealElement token={'test_token'} label={'Card Number'} />);
} catch (err) {
Expand All @@ -598,6 +701,40 @@ describe('test Collect And Reveal Elements Components', () => {
}
});

it('test RevealElement setToken via ref updates UI and internal element', () => {
const revealSetMethodMock = jest.fn();
const revealSetTokenMock = jest.fn();
const revealContainer = new RevealContainer(testSkyflowClient);

jest.spyOn(revealContainer, 'create').mockImplementation(() => ({
setMethods: revealSetMethodMock,
setToken: revealSetTokenMock,
}));

const ref = React.createRef();
const initialToken = 'initial_token_123';
const newToken = 'updated_token_456';

const { getByText } = render(
<RevealElement
ref={ref}
token={initialToken}
container={revealContainer}
label={'Card Number'}
/>
);

expect(getByText(initialToken)).toBeTruthy();

act(() => {
ref.current.setToken(newToken);
});

expect(revealSetTokenMock).toHaveBeenCalledWith(newToken);

expect(getByText(newToken)).toBeTruthy();
});

it('test skyflow provider', () => {
const testSkyflowConfig = {
vaultID: '1234',
Expand All @@ -607,7 +744,7 @@ describe('test Collect And Reveal Elements Components', () => {

const providerElement = render(
<SkyflowProvider config={testSkyflowConfig}>
<Text>Provider Childern</Text>
<Text>Provider Children</Text>
</SkyflowProvider>
);
expect(providerElement).toMatchSnapshot();
Expand Down
Loading