Implemented the MakeURLRequestUseCase use case.
This commit is contained in:
parent
47a8db48ff
commit
a894a9de47
@ -0,0 +1,36 @@
|
|||||||
|
//
|
||||||
|
// MakeURLRequestUseCase.swift
|
||||||
|
// APIService
|
||||||
|
//
|
||||||
|
// Created by Javier Cicchelli on 04/12/2022.
|
||||||
|
// Copyright © 2022 Röck+Cöde. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct MakeURLRequestUseCase {
|
||||||
|
func callAsFunction(endpoint: some Endpoint) throws -> URLRequest {
|
||||||
|
var urlComponents = URLComponents()
|
||||||
|
|
||||||
|
urlComponents.scheme = endpoint.scheme
|
||||||
|
urlComponents.host = endpoint.host
|
||||||
|
urlComponents.port = endpoint.port
|
||||||
|
urlComponents.path = endpoint.path
|
||||||
|
|
||||||
|
guard let url = urlComponents.url else { throw MakeURLRequestError.urlNotCreated }
|
||||||
|
|
||||||
|
var urlRequest = URLRequest(url: url)
|
||||||
|
|
||||||
|
urlRequest.httpMethod = endpoint.method.rawValue
|
||||||
|
urlRequest.httpBody = endpoint.body
|
||||||
|
urlRequest.allHTTPHeaderFields = endpoint.authorizationHeader.merging(endpoint.headers) { first, _ in first }
|
||||||
|
|
||||||
|
return urlRequest
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Errors
|
||||||
|
|
||||||
|
enum MakeURLRequestError: Error {
|
||||||
|
case urlNotCreated
|
||||||
|
}
|
@ -0,0 +1,168 @@
|
|||||||
|
//
|
||||||
|
// 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)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user