1616import React from 'react' ;
1717import { render } from '@testing-library/react' ;
1818
19- import { FileAttachmentContainer } from './FileAttachmentContainer' ;
19+ import {
20+ FileAttachmentContainer ,
21+ getTransferItemDirectoryEntry ,
22+ isDirectoryEntry ,
23+ isFileEntry ,
24+ } from './FileAttachmentContainer' ;
2025
2126describe ( 'FileAttachmentContainer' , ( ) => {
2227 test ( 'with single file' , ( ) => {
@@ -29,7 +34,7 @@ describe('FileAttachmentContainer', () => {
2934 ) ;
3035
3136 expect ( document . querySelector ( '.file-upload__container' ) . className ) . toContain ( 'hidden' ) ;
32- expect ( document . querySelector ( '.attached-file__container' ) . textContent ) . toBe ( 'file1.txt' ) ;
37+ expect ( document . querySelector ( '.attached-file__container' ) ) . toHaveTextContent ( 'file1.txt' ) ;
3338 } ) ;
3439
3540 test ( 'with multiple files' , ( ) => {
@@ -46,8 +51,8 @@ describe('FileAttachmentContainer', () => {
4651
4752 expect ( document . querySelector ( '.file-upload__container' ) . className ) . toContain ( 'block' ) ;
4853 expect ( document . querySelectorAll ( '.attached-file__container' ) ) . toHaveLength ( 2 ) ;
49- expect ( document . querySelectorAll ( '.attached-file__container' ) [ 0 ] . textContent ) . toBe ( 'file1.txt' ) ;
50- expect ( document . querySelectorAll ( '.attached-file__container' ) [ 1 ] . textContent ) . toBe ( 'file2.txt' ) ;
54+ expect ( document . querySelectorAll ( '.attached-file__container' ) [ 0 ] ) . toHaveTextContent ( 'file1.txt' ) ;
55+ expect ( document . querySelectorAll ( '.attached-file__container' ) [ 1 ] ) . toHaveTextContent ( 'file2.txt' ) ;
5156
5257 expect ( document . querySelectorAll ( '.file-upload__file-entry-listing' ) ) . toHaveLength ( 1 ) ;
5358 expect ( document . querySelectorAll ( '.file-upload__scroll-footer' ) ) . toHaveLength ( 0 ) ;
@@ -91,7 +96,7 @@ describe('FileAttachmentContainer', () => {
9196 expect ( document . querySelector ( '.file-upload__container' ) . className ) . toContain ( 'block' ) ;
9297 expect ( document . querySelectorAll ( '.attached-file__container' ) ) . toHaveLength ( 2 ) ;
9398 expect ( document . querySelectorAll ( '.file-upload__file-entry-listing' ) ) . toHaveLength ( 1 ) ;
94- expect ( document . querySelector ( '.file-upload__scroll-footer' ) . textContent ) . toBe ( '2 files will be uploaded.' ) ;
99+ expect ( document . querySelector ( '.file-upload__scroll-footer' ) ) . toHaveTextContent ( '2 files will be uploaded.' ) ;
95100 } ) ;
96101
97102 test ( 'fileCountSuffix with single' , ( ) => {
@@ -109,6 +114,92 @@ describe('FileAttachmentContainer', () => {
109114 expect ( document . querySelector ( '.file-upload__container' ) . className ) . toContain ( 'block' ) ;
110115 expect ( document . querySelectorAll ( '.attached-file__container' ) ) . toHaveLength ( 1 ) ;
111116 expect ( document . querySelectorAll ( '.file-upload__file-entry-listing' ) ) . toHaveLength ( 1 ) ;
112- expect ( document . querySelector ( '.file-upload__scroll-footer' ) . textContent ) . toBe ( '1 file will be uploaded.' ) ;
117+ expect ( document . querySelector ( '.file-upload__scroll-footer' ) ) . toHaveTextContent ( '1 file will be uploaded.' ) ;
118+ } ) ;
119+ } ) ;
120+
121+ describe ( 'File System Helper Functions' , ( ) => {
122+ function mockFileSystemEntry ( isDirectory : boolean , isFile : boolean ) : FileSystemEntry {
123+ return {
124+ filesystem : undefined ,
125+ fullPath : undefined ,
126+ isDirectory,
127+ isFile,
128+ name : undefined ,
129+ getParent : jest . fn ( ) ,
130+ } ;
131+ }
132+
133+ function mockDataTransferItemList ( entry : FileSystemEntry ) : DataTransferItemList {
134+ return {
135+ 0 : {
136+ webkitGetAsEntry : jest . fn ( ) . mockReturnValue ( entry ) ,
137+ } ,
138+ } as unknown as DataTransferItemList ;
139+ }
140+
141+ describe ( 'isDirectoryEntry' , ( ) => {
142+ it ( 'should return true when entry is a directory' , ( ) => {
143+ const mockDirEntry = mockFileSystemEntry ( true , false ) ;
144+ expect ( isDirectoryEntry ( mockDirEntry ) ) . toBe ( true ) ;
145+ } ) ;
146+
147+ it ( 'should return false when entry is a file' , ( ) => {
148+ const mockFileEntry = mockFileSystemEntry ( false , true ) ;
149+ expect ( isDirectoryEntry ( mockFileEntry ) ) . toBe ( false ) ;
150+ } ) ;
151+
152+ it ( 'should return false when entry is undefined' , ( ) => {
153+ expect ( isDirectoryEntry ( undefined ) ) . toBe ( false ) ;
154+ expect ( isDirectoryEntry ( null ) ) . toBe ( false ) ;
155+ expect ( isDirectoryEntry ( { } as unknown as FileSystemEntry ) ) . toBe ( false ) ;
156+ } ) ;
157+ } ) ;
158+
159+ describe ( 'isFileEntry' , ( ) => {
160+ it ( 'should return true when entry is a file' , ( ) => {
161+ const mockFileEntry = mockFileSystemEntry ( false , true ) ;
162+ expect ( isFileEntry ( mockFileEntry ) ) . toBe ( true ) ;
163+ } ) ;
164+
165+ it ( 'should return false when entry is a directory' , ( ) => {
166+ const mockDirEntry = mockFileSystemEntry ( true , false ) ;
167+ expect ( isFileEntry ( mockDirEntry ) ) . toBe ( false ) ;
168+ } ) ;
169+
170+ it ( 'should return false when entry is undefined' , ( ) => {
171+ expect ( isFileEntry ( undefined ) ) . toBe ( false ) ;
172+ expect ( isFileEntry ( null ) ) . toBe ( false ) ;
173+ expect ( isFileEntry ( { } as unknown as FileSystemEntry ) ) . toBe ( false ) ;
174+ } ) ;
175+ } ) ;
176+
177+ describe ( 'getTransferItemDirectoryEntry' , ( ) => {
178+ it ( 'should return directory entry when item at index is a directory' , ( ) => {
179+ const mockDirEntry = mockFileSystemEntry ( true , false ) ;
180+ const mockTransferItems = mockDataTransferItemList ( mockDirEntry ) ;
181+
182+ const result = getTransferItemDirectoryEntry ( mockTransferItems , 0 ) ;
183+ expect ( result ) . toBe ( mockDirEntry ) ;
184+ expect ( mockTransferItems [ 0 ] . webkitGetAsEntry ) . toHaveBeenCalledTimes ( 1 ) ;
185+ } ) ;
186+
187+ it ( 'should return undefined when item at index is a file' , ( ) => {
188+ const mockFileEntry = mockFileSystemEntry ( false , true ) ;
189+ const mockTransferItems = mockDataTransferItemList ( mockFileEntry ) ;
190+
191+ const result = getTransferItemDirectoryEntry ( mockTransferItems , 0 ) ;
192+ expect ( result ) . toBeUndefined ( ) ;
193+ } ) ;
194+
195+ it ( 'should return undefined when index is out of bounds' , ( ) => {
196+ expect ( getTransferItemDirectoryEntry ( undefined as DataTransferItemList , 0 ) ) . toBeUndefined ( ) ;
197+ expect ( getTransferItemDirectoryEntry ( { } as DataTransferItemList , 999 ) ) . toBeUndefined ( ) ;
198+ } ) ;
199+
200+ it ( 'should return undefined when webkitGetAsEntry returns null' , ( ) => {
201+ const mockTransferItems = mockDataTransferItemList ( null ) ;
202+ expect ( getTransferItemDirectoryEntry ( mockTransferItems , 0 ) ) . toBeUndefined ( ) ;
203+ } ) ;
113204 } ) ;
114205} ) ;
0 commit comments