Skip to content

Commit 94eef37

Browse files
SK-2049: fix error message for collect elements (#121)
1 parent 76ae0a1 commit 94eef37

4 files changed

Lines changed: 134 additions & 2 deletions

File tree

__tests__/core/CollectContainer.test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,20 @@ describe('test CollectConatiner Class', () => {
4343
expect(collectElement.getCardType()).toBe(CardType.DEFAULT);
4444
});
4545

46+
it('test create method sets containerType to COLLECT', () => {
47+
const collectElement = collectContainer.create(
48+
{
49+
table: 'table1',
50+
column: 'string1',
51+
type: ElementType.PIN,
52+
},
53+
{ required: false }
54+
);
55+
expect(collectElement).toBeInstanceOf(CollectElement);
56+
const elementInput = collectElement.getElementInput();
57+
expect(elementInput.containerType).toBe('COLLECT');
58+
});
59+
4660
it('test getContext method', () => {
4761
expect(collectContainer.getContext()).toEqual({
4862
env: Env.PROD,

__tests__/core/collectElement.test.js

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,4 +637,122 @@ describe('test Collect Element class', () => {
637637
expect(collectElement.getInternalState().isValid).toBe(true);
638638
});
639639
});
640+
641+
it('test error messages for elements without label in COLLECT container', () => {
642+
const pinElement = new CollectElement(
643+
{
644+
table: 'cards',
645+
column: 'pin',
646+
type: ElementType.PIN,
647+
containerType: ContainerType.COLLECT,
648+
},
649+
{ required: false },
650+
context
651+
);
652+
653+
pinElement.onChangeElement('12'); // Invalid PIN (less than 4 digits)
654+
expect(pinElement.getInternalState().isValid).toBe(false);
655+
expect(pinElement.getErrorText()).toBe(DEFAULT_COLLECT_ELEMENT_ERROR_TEXT); // Should be "Invalid value"
656+
657+
const cvvElement = new CollectElement(
658+
{
659+
table: 'cards',
660+
column: 'cvv',
661+
type: ElementType.CVV,
662+
containerType: ContainerType.COLLECT,
663+
},
664+
{ required: false },
665+
context
666+
);
667+
668+
cvvElement.onChangeElement('12'); // Invalid CVV
669+
expect(cvvElement.getInternalState().isValid).toBe(false);
670+
expect(cvvElement.getErrorText()).toBe(DEFAULT_COLLECT_ELEMENT_ERROR_TEXT); // Should be "Invalid value"
671+
});
672+
673+
it('test error messages for elements without label in COMPOSABLE container', () => {
674+
// Test PIN element without label in COMPOSABLE container
675+
const pinElement = new CollectElement(
676+
{
677+
table: 'cards',
678+
column: 'pin',
679+
type: ElementType.PIN,
680+
containerType: ContainerType.COMPOSABLE,
681+
},
682+
{ required: false },
683+
context
684+
);
685+
686+
pinElement.onChangeElement('12'); // Invalid PIN (less than 4 digits)
687+
expect(pinElement.getInternalState().isValid).toBe(false);
688+
expect(pinElement.getErrorText()).toBe('Invalid pin'); // Should be element-specific error
689+
690+
const cvvElement = new CollectElement(
691+
{
692+
table: 'cards',
693+
column: 'cvv',
694+
type: ElementType.CVV,
695+
containerType: ContainerType.COMPOSABLE,
696+
},
697+
{ required: false },
698+
context
699+
);
700+
701+
cvvElement.onChangeElement('12'); // Invalid CVV
702+
expect(cvvElement.getInternalState().isValid).toBe(false);
703+
expect(cvvElement.getErrorText()).toBe('Invalid cvv'); // Should be element-specific error
704+
});
705+
706+
it('test error messages for elements with label', () => {
707+
// Test PIN element with label
708+
const pinElement = new CollectElement(
709+
{
710+
table: 'cards',
711+
column: 'pin',
712+
type: ElementType.PIN,
713+
label: 'PIN',
714+
containerType: ContainerType.COLLECT,
715+
},
716+
{ required: false },
717+
context
718+
);
719+
720+
pinElement.onChangeElement('12'); // Invalid PIN
721+
expect(pinElement.getInternalState().isValid).toBe(false);
722+
expect(pinElement.getErrorText()).toBe('Invalid PIN'); // Should use label
723+
724+
// Test required field with label when empty
725+
const requiredElement = new CollectElement(
726+
{
727+
table: 'cards',
728+
column: 'cvv',
729+
type: ElementType.CVV,
730+
label: 'CVV',
731+
containerType: ContainerType.COLLECT,
732+
},
733+
{ required: true },
734+
context
735+
);
736+
737+
requiredElement.onChangeElement(''); // Empty required field
738+
expect(requiredElement.getInternalState().isValid).toBe(false);
739+
expect(requiredElement.getErrorText()).toBe('CVV is required'); // Should use label with "is required"
740+
});
741+
742+
it('test error messages for empty required fields without label', () => {
743+
const element = new CollectElement(
744+
{
745+
table: 'cards',
746+
column: 'pin',
747+
type: ElementType.PIN,
748+
containerType: ContainerType.COLLECT,
749+
},
750+
{ required: true },
751+
context
752+
);
753+
754+
element.onChangeElement(''); // Empty required field
755+
expect(element.getInternalState().isValid).toBe(false);
756+
expect(element.getErrorText()).toBe('Field is required'); // Should be generic required message
757+
});
640758
});

src/core/CollectContainer/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class CollectContainer extends Container {
4545

4646
create(elementInput: CollectElementInput, options?: any) {
4747
const element = new CollectElement(
48-
elementInput,
48+
{ ...elementInput, containerType: ContainerType.COLLECT },
4949
options,
5050
this.getContext()
5151
);

src/core/CollectElement/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ class CollectElement extends SkyflowElement {
358358
? DEFAULT_COLLECT_ELEMENT_REQUIRED_TEXT
359359
: this.#containerType === ContainerType.COLLECT
360360
? DEFAULT_COLLECT_ELEMENT_ERROR_TEXT
361-
: DEFAULT_ERROR_TEXT_ELEMENT_TYPES[this.#elementType];
361+
: DEFAULT_ERROR_TEXT_ELEMENT_TYPES[this.#elementType] || DEFAULT_COLLECT_ELEMENT_ERROR_TEXT;
362362
this.hasError = true;
363363
} else {
364364
this.#errorText = '';

0 commit comments

Comments
 (0)