// // MakeURLRequestUseCaseTests.swift // APIServiceTests // // Created by Javier Cicchelli on 04/12/2022. // Copyright © 2022 Röck+Cöde. All rights reserved. // import Foundation import XCTest @testable import APIService final class MakeURLRequestUseCaseTests: XCTestCase { // MARK: Properties private let makeURLRequest = MakeURLRequestUseCase() private var result: URLRequest! // MARK: Test cases func test_withGetMeEndpoint() throws { // GIVEN let endpoint = GetMeEndpoint( username: "username", password: "password" ) // WHEN result = try makeURLRequest(endpoint: endpoint) // THEN XCTAssertNotNil(result) XCTAssertEqual(result.url?.absoluteString, "http://163.172.147.216:8080/me") XCTAssertEqual(result.httpMethod, "GET") XCTAssertEqual(result.allHTTPHeaderFields, [ .Header.Keys.contentType: .Header.Values.contentTypeJSON, .Header.Keys.authorization: "Basic dXNlcm5hbWU6cGFzc3dvcmQ=" ]) XCTAssertNil(result.httpBody) } func test_withGetItemsEndpoint() throws { // GIVEN let itemId = UUID().uuidString let endpoint = GetItemsEndpoint( itemId: itemId, username: "username", password: "password" ) // WHEN result = try makeURLRequest(endpoint: endpoint) // THEN XCTAssertNotNil(result) XCTAssertEqual(result.url?.absoluteString, "http://163.172.147.216:8080/items/\(itemId)") XCTAssertEqual(result.httpMethod, "GET") XCTAssertEqual(result.allHTTPHeaderFields, [ .Header.Keys.contentType: .Header.Values.contentTypeJSON, .Header.Keys.authorization: "Basic dXNlcm5hbWU6cGFzc3dvcmQ=" ]) XCTAssertNil(result.httpBody) } func test_withUploadFileEndpoint() throws { // GIVEN let itemId = UUID().uuidString let fileName = "some-file-name.txt" let fileData = "This is just a line of text to make some test data".data(using: .utf8)! let endpoint = UploadFileEndpoint( itemId: itemId, fileName: fileName, fileData: fileData, username: "username", password: "password" ) // WHEN result = try makeURLRequest(endpoint: endpoint) // THEN XCTAssertNotNil(result) XCTAssertEqual(result.url?.absoluteString, "http://163.172.147.216:8080/items/\(itemId)") XCTAssertEqual(result.httpMethod, "POST") XCTAssertEqual(result.allHTTPHeaderFields, [ .Header.Keys.contentType: .Header.Values.contentTypeOctet, .Header.Keys.contentDisposition: "attachment;filename*=utf-8''\(fileName)", .Header.Keys.authorization: "Basic dXNlcm5hbWU6cGFzc3dvcmQ=" ]) XCTAssertNotNil(result.httpBody) XCTAssertEqual(result.httpBody, fileData) } func test_withCreateFolderEndpoint() throws { // GIVEN let itemId = UUID().uuidString let folderName = "some-folder-name" let endpoint = CreateFolderEndpoint( itemId: itemId, folderName: folderName, username: "username", password: "password" ) let body = "{\"name\":\"\(folderName)\"}".data(using: .utf8) // WHEN result = try makeURLRequest(endpoint: endpoint) // THEN XCTAssertNotNil(result) XCTAssertEqual(result.url?.absoluteString, "http://163.172.147.216:8080/items/\(itemId)") XCTAssertEqual(result.httpMethod, "POST") XCTAssertEqual(result.allHTTPHeaderFields, [ .Header.Keys.contentType: .Header.Values.contentTypeJSON, .Header.Keys.authorization: "Basic dXNlcm5hbWU6cGFzc3dvcmQ=" ]) XCTAssertNotNil(result.httpBody) XCTAssertEqual(result.httpBody, body) } func test_withDeleteItemEndpoint() throws { // GIVEN let itemId = UUID().uuidString let endpoint = DeleteItemEndpoint( itemId: itemId, username: "username", password: "password" ) // WHEN result = try makeURLRequest(endpoint: endpoint) // THEN XCTAssertNotNil(result) XCTAssertEqual(result.url?.absoluteString, "http://163.172.147.216:8080/items/\(itemId)") XCTAssertEqual(result.httpMethod, "DELETE") XCTAssertEqual(result.allHTTPHeaderFields, [ .Header.Keys.authorization: "Basic dXNlcm5hbWU6cGFzc3dvcmQ=" ]) XCTAssertNil(result.httpBody) } func test_withGetDataEndpoint() throws { // GIVEN let itemId = UUID().uuidString let endpoint = GetDataEndpoint( itemId: itemId, username: "username", password: "password" ) // WHEN result = try makeURLRequest(endpoint: endpoint) // THEN XCTAssertNotNil(result) XCTAssertEqual(result.url?.absoluteString, "http://163.172.147.216:8080/items/\(itemId)/data") XCTAssertEqual(result.httpMethod, "GET") XCTAssertEqual(result.allHTTPHeaderFields, [ .Header.Keys.authorization: "Basic dXNlcm5hbWU6cGFzc3dvcmQ=" ]) XCTAssertNil(result.httpBody) } }