@@ -150,4 +150,96 @@ class HttpUtilityIntegrationTests: XCTestCase {
150150
151151 wait ( for: [ expectation] , timeout: 10.0 )
152152 }
153+
154+ func test_MultiPartFormDataUpload_WithSmallRequestBody_Returns_Success( )
155+ {
156+ // ARRANGE
157+ let expectation = XCTestExpectation ( description: " Multipart form data test " )
158+ let requestUrl = URL ( string: " https://api-dev-scus-demo.azurewebsites.net/TestMultiPart " )
159+ let name = " Code "
160+ let lastName = " Cat "
161+
162+ // todo: this code can be improved
163+ let multiPartFormData = HUMultiPartFormData ( )
164+ multiPartFormData. appendInitalBoundary ( ) // what if the developer forgets to add this line?
165+ multiPartFormData. appendBodyPart ( parameterName: " Name " , WithParameterData: name)
166+ multiPartFormData. appendLineBreakForNextParameter ( ) // I don't like this
167+ multiPartFormData. appendBodyPart ( parameterName: " LastName " , WithParameterData: lastName)
168+ multiPartFormData. appendClosingBoundary ( ) // why does the dev has to specify all this???
169+
170+ let request = HURequest ( url: requestUrl!, method: . post)
171+
172+ // ACT
173+ _utility. requestWithMultiPart ( request: request, resultType: TestMultiPartResponse . self, postBody: multiPartFormData) { ( response) in
174+ // ASSERT
175+ switch response
176+ {
177+ case . success( let serviceResponse) :
178+
179+ // ASSERT
180+ XCTAssertNotNil ( serviceResponse)
181+ XCTAssertNotNil ( serviceResponse? . data)
182+ XCTAssertEqual ( name, serviceResponse? . data. name)
183+ XCTAssertEqual ( lastName, serviceResponse? . data. lastName)
184+
185+ case . failure( let error) :
186+ XCTAssertNil ( error. reason)
187+ }
188+ expectation. fulfill ( )
189+ }
190+
191+ wait ( for: [ expectation] , timeout: 10.0 )
192+ }
193+
194+ func test_multiPartFormDataUpload_WithValidRequest_Returns_Success( )
195+ {
196+ // ARRANGE
197+ let expectation = XCTestExpectation ( description: " Multipart form data test " )
198+ let requestUrl = URL ( string: " https://api-dev-scus-demo.azurewebsites.net/api/Employee/MultiPartCodeChallenge " )
199+ let multiPartFormData = HUMultiPartFormData ( )
200+
201+ multiPartFormData. appendInitalBoundary ( )
202+
203+ multiPartFormData. appendBodyPart ( parameterName: " Name " , WithParameterData: " Codecat " )
204+ multiPartFormData. appendLineBreakForNextParameter ( )
205+
206+ multiPartFormData. appendBodyPart ( parameterName: " LastName " , WithParameterData: " HellWorld " )
207+ multiPartFormData. appendLineBreakForNextParameter ( )
208+
209+ multiPartFormData. appendBodyPart ( parameterName: " DateofJoining " , WithParameterData: " 12-12-2012 " )
210+ multiPartFormData. appendLineBreakForNextParameter ( )
211+
212+ multiPartFormData. appendBodyPart ( parameterName: " DateofBirth " , WithParameterData: " 12-12-1992 " )
213+ multiPartFormData. appendLineBreakForNextParameter ( )
214+
215+ multiPartFormData. appendBodyPart ( parameterName: " Gender " , WithParameterData: " HumanBeing " )
216+ multiPartFormData. appendLineBreakForNextParameter ( )
217+
218+ multiPartFormData. appendBodyPart ( parameterName: " DepartmentName " , WithParameterData: " Technology " )
219+ multiPartFormData. appendLineBreakForNextParameter ( )
220+
221+ multiPartFormData. appendBodyPart ( parameterName: " ManagerName " , WithParameterData: " MyManagerName " )
222+ multiPartFormData. appendClosingBoundary ( )
223+
224+ let request = HURequest ( url: requestUrl!, method: . post)
225+
226+ // ACT
227+ _utility. requestWithMultiPart ( request: request, resultType: MultiPartResponse . self, postBody: multiPartFormData) { ( response) in
228+ // ASSERT
229+ switch response
230+ {
231+ case . success( let serviceResponse) :
232+
233+ // ASSERT
234+ XCTAssertNotNil ( serviceResponse)
235+ XCTAssertNotNil ( serviceResponse? . data)
236+
237+ case . failure( let error) :
238+ XCTAssertNil ( error. reason)
239+ }
240+ expectation. fulfill ( )
241+ }
242+
243+ wait ( for: [ expectation] , timeout: 10.0 )
244+ }
153245}
0 commit comments