Implemented the MakeAuthorizationHeaderUseCase use case.
This commit is contained in:
parent
eb5d25dc90
commit
c6c5447500
@ -4,6 +4,7 @@ import PackageDescription
|
|||||||
|
|
||||||
let package = Package(
|
let package = Package(
|
||||||
name: "Libraries",
|
name: "Libraries",
|
||||||
|
platforms: [.iOS(.v15)],
|
||||||
products: [
|
products: [
|
||||||
.library(
|
.library(
|
||||||
name: "Libraries",
|
name: "Libraries",
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
//
|
||||||
|
// MakeAuthorizationHeaderUseCase.swift
|
||||||
|
// APIService
|
||||||
|
//
|
||||||
|
// Created by Javier Cicchelli on 04/12/2022.
|
||||||
|
// Copyright © 2022 Röck+Cöde. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct MakeAuthorizationHeaderUseCase {
|
||||||
|
func callAsFunction(
|
||||||
|
username: String,
|
||||||
|
password: String
|
||||||
|
) throws -> [String: String] {
|
||||||
|
guard !username.isEmpty else { throw MakeAuthorizationHeaderError.usernameIsEmpty }
|
||||||
|
guard !password.isEmpty else { throw MakeAuthorizationHeaderError.passwordIsEmpty }
|
||||||
|
|
||||||
|
let loginString = String(format: .Formats.usernameAndPassword, username, password)
|
||||||
|
|
||||||
|
guard let loginData = loginString.data(using: .utf8) else {
|
||||||
|
throw MakeAuthorizationHeaderError.loginDataNotCreated
|
||||||
|
}
|
||||||
|
|
||||||
|
let loginBase64 = loginData.base64EncodedString()
|
||||||
|
|
||||||
|
return [.Header.Keys.authorization: String(format: .Formats.authorizationValue, loginBase64)]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Errors
|
||||||
|
|
||||||
|
enum MakeAuthorizationHeaderError: Error {
|
||||||
|
case usernameIsEmpty
|
||||||
|
case passwordIsEmpty
|
||||||
|
case loginDataNotCreated
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - String+Formats
|
||||||
|
|
||||||
|
private extension String {
|
||||||
|
enum Formats {
|
||||||
|
static let usernameAndPassword = "%@:%@"
|
||||||
|
static let authorizationValue = "Basic %@"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
//
|
||||||
|
// MakeAuthorizationHeaderUseCaseTests.swift
|
||||||
|
// APIServiceTests
|
||||||
|
//
|
||||||
|
// Created by Javier Cicchelli on 04/12/2022.
|
||||||
|
// Copyright © 2022 Röck+Cöde. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import XCTest
|
||||||
|
|
||||||
|
@testable import APIService
|
||||||
|
|
||||||
|
final class MakeAuthorizationHeaderUseCaseTests: XCTestCase {
|
||||||
|
|
||||||
|
// MARK: Properties
|
||||||
|
|
||||||
|
let makeAuthHeader = MakeAuthorizationHeaderUseCase()
|
||||||
|
|
||||||
|
var username: String!
|
||||||
|
var password: String!
|
||||||
|
|
||||||
|
var result: [String: String]!
|
||||||
|
|
||||||
|
// MARK: Test cases
|
||||||
|
|
||||||
|
func test_withCorrectUsernameAndPassword() throws {
|
||||||
|
// GIVEN
|
||||||
|
username = "username"
|
||||||
|
password = "password"
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
|
||||||
|
result = try makeAuthHeader(username: username, password: password)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
XCTAssertEqual(result.count, 1)
|
||||||
|
XCTAssertEqual(result[.Header.Keys.authorization], "Basic dXNlcm5hbWU6cGFzc3dvcmQ=")
|
||||||
|
}
|
||||||
|
|
||||||
|
func test_withEmptyUsername() throws {
|
||||||
|
// GIVEN
|
||||||
|
username = ""
|
||||||
|
password = "password"
|
||||||
|
|
||||||
|
// WHEN & THEN
|
||||||
|
XCTAssertThrowsError(try makeAuthHeader(username: username, password: password)) { error in
|
||||||
|
XCTAssertEqual(error as? MakeAuthorizationHeaderError, .usernameIsEmpty)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func test_withEmptyPassword() throws {
|
||||||
|
// GIVEN
|
||||||
|
username = "username"
|
||||||
|
password = ""
|
||||||
|
|
||||||
|
// WHEN & THEN
|
||||||
|
XCTAssertThrowsError(try makeAuthHeader(username: username, password: password)) { error in
|
||||||
|
XCTAssertEqual(error as? MakeAuthorizationHeaderError, .passwordIsEmpty)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func test_withEmptyUsernameAndPassword() throws {
|
||||||
|
// GIVEN
|
||||||
|
username = ""
|
||||||
|
password = ""
|
||||||
|
|
||||||
|
// WHEN & THEN
|
||||||
|
XCTAssertThrowsError(try makeAuthHeader(username: username, password: password)) { error in
|
||||||
|
XCTAssertEqual(error as? MakeAuthorizationHeaderError, .usernameIsEmpty)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user