@@ -61,5 +61,65 @@ public async Task Verify_file_upload_flow()
6161 Assert . Equal ( "uploaded" , sendResponse . Status ) ;
6262 }
6363 }
64+
65+ [ Fact ]
66+ public async Task Verify_multi_part_file_upload_flow ( )
67+ {
68+ // Create file upload
69+ var createRequest = new CreateFileUploadRequest
70+ {
71+ Mode = FileUploadMode . MultiPart ,
72+ FileName = "notion-logo.png" ,
73+ NumberOfParts = 2
74+ } ;
75+
76+ var createResponse = await Client . FileUploads . CreateAsync ( createRequest ) ;
77+
78+ Assert . NotNull ( createResponse ) ;
79+ Assert . NotNull ( createResponse . Id ) ;
80+ Assert . Equal ( "notion-logo.png" , createResponse . FileName ) ;
81+ Assert . Equal ( "image/png" , createResponse . ContentType ) ;
82+ Assert . Equal ( "pending" , createResponse . Status ) ;
83+
84+ // Send file parts
85+ using ( var fileStream = File . OpenRead ( "assets/notion-logo.png" ) )
86+ {
87+ var splitStreams = StreamSplitExtensions . Split ( fileStream , 2 ) ;
88+
89+ foreach ( var ( partStream , index ) in splitStreams . WithIndex ( ) )
90+ {
91+ var partSendRequest = SendFileUploadRequest . Create (
92+ createResponse . Id ,
93+ new FileData
94+ {
95+ FileName = "notion-logo.png" ,
96+ Data = partStream ,
97+ ContentType = createResponse . ContentType
98+ } ,
99+
100+ partNumber : ( index + 1 ) . ToString ( )
101+ ) ;
102+
103+ var partSendResponse = await Client . FileUploads . SendAsync ( partSendRequest ) ;
104+
105+ Assert . NotNull ( partSendResponse ) ;
106+ Assert . Equal ( createResponse . Id , partSendResponse . Id ) ;
107+ Assert . Equal ( "notion-logo.png" , partSendResponse . FileName ) ;
108+ }
109+
110+ // Complete file upload
111+ var completeRequest = new CompleteFileUploadRequest
112+ {
113+ FileUploadId = createResponse . Id
114+ } ;
115+
116+ var completeResponse = await Client . FileUploads . CompleteAsync ( completeRequest ) ;
117+
118+ Assert . NotNull ( completeResponse ) ;
119+ Assert . Equal ( createResponse . Id , completeResponse . Id ) ;
120+ Assert . Equal ( "notion-logo.png" , completeResponse . FileName ) ;
121+ Assert . Equal ( "completed" , completeResponse . Status ) ;
122+ }
123+ }
64124 }
65125}
0 commit comments