44import React from 'react' ;
55import { render } from '@testing-library/react' ;
66import { activateAnalyticsMetadata , getAnalyticsMetadataAttribute , METADATA_ATTRIBUTE } from '../attributes' ;
7- import { findLogicalParent , isNodeComponent , findComponentUp } from '../dom-utils' ;
7+ import { findLogicalParent , isNodeComponent , findComponentUp , findSelectorUp } from '../dom-utils' ;
88
99beforeAll ( ( ) => {
1010 activateAnalyticsMetadata ( true ) ;
@@ -18,7 +18,7 @@ describe('findLogicalParent', () => {
1818 </ div >
1919 ) ;
2020 const child = container . querySelector ( '#child' ) ;
21- expect ( findLogicalParent ( child as HTMLElement ) ? .id ) . toEqual ( 'parent' ) ;
21+ expect ( findLogicalParent ( child as HTMLElement ) ! . id ) . toEqual ( 'parent' ) ;
2222 } ) ;
2323 test ( 'returns null when child does not exist' , ( ) => {
2424 const { container } = render (
@@ -88,7 +88,7 @@ describe('findComponentUp', () => {
8888 < div id = "target-element" > </ div >
8989 </ div >
9090 ) ;
91- expect ( findComponentUp ( container . querySelector ( '#target-element' ) ) ? .id ) . toBe ( 'component-element' ) ;
91+ expect ( findComponentUp ( container . querySelector ( '#target-element' ) ) ! . id ) . toBe ( 'component-element' ) ;
9292 } ) ;
9393 test ( 'returns parent component element with portals' , ( ) => {
9494 const { container } = render (
@@ -101,7 +101,7 @@ describe('findComponentUp', () => {
101101 </ div >
102102 </ div >
103103 ) ;
104- expect ( findComponentUp ( container . querySelector ( '#target-element' ) ) ? .id ) . toBe ( 'component-element' ) ;
104+ expect ( findComponentUp ( container . querySelector ( '#target-element' ) ) ! . id ) . toBe ( 'component-element' ) ;
105105 } ) ;
106106 test ( 'returns null when element has no parent component' , ( ) => {
107107 const { container } = render (
@@ -112,3 +112,44 @@ describe('findComponentUp', () => {
112112 expect ( findComponentUp ( container . querySelector ( '#target-element' ) ) ) . toBeNull ( ) ;
113113 } ) ;
114114} ) ;
115+
116+ describe ( 'findSelectorUp' , ( ) => {
117+ test ( 'returns null when the node is null or the className is invalid' , ( ) => {
118+ expect ( findSelectorUp ( null , 'abcd' ) ) . toBeNull ( ) ;
119+ const { container } = render (
120+ < div id = "root-element" >
121+ < div id = "target-element" > </ div >
122+ </ div >
123+ ) ;
124+ expect ( findSelectorUp ( container . querySelector ( '#target-element' ) , '.dummy' ) ) . toBeNull ( ) ;
125+ } ) ;
126+ test ( 'returns root element' , ( ) => {
127+ const { container } = render (
128+ < div id = "root-element" className = "test-class" >
129+ < div id = "target-element" > </ div >
130+ </ div >
131+ ) ;
132+ expect ( findSelectorUp ( container . querySelector ( '#target-element' ) , '.test-class' ) ! . id ) . toBe ( 'root-element' ) ;
133+ } ) ;
134+ test ( 'returns parent component element with portals' , ( ) => {
135+ const { container } = render (
136+ < div >
137+ < div id = "root-element" className = "test-class" >
138+ < div id = ":rr5:" > </ div >
139+ </ div >
140+ < div data-awsui-referrer-id = ":rr5:" >
141+ < div id = "target-element" > </ div >
142+ </ div >
143+ </ div >
144+ ) ;
145+ expect ( findSelectorUp ( container . querySelector ( '#target-element' ) , '.test-class' ) ! . id ) . toBe ( 'root-element' ) ;
146+ } ) ;
147+ test ( 'returns null when element has no parent element with className' , ( ) => {
148+ const { container } = render (
149+ < div >
150+ < div id = "target-element" > </ div >
151+ </ div >
152+ ) ;
153+ expect ( findSelectorUp ( container . querySelector ( '#target-element' ) , '.test-class' ) ) . toBeNull ( ) ;
154+ } ) ;
155+ } ) ;
0 commit comments