Implemented the MakeAuthorizationHeaderUseCase use case.

This commit is contained in:
Javier Cicchelli 2022-12-04 01:13:35 +01:00
parent eb5d25dc90
commit c6c5447500
3 changed files with 120 additions and 0 deletions

View File

@ -4,6 +4,7 @@ import PackageDescription
let package = Package(
name: "Libraries",
platforms: [.iOS(.v15)],
products: [
.library(
name: "Libraries",

View File

@ -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 %@"
}
}

View File

@ -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)
}
}
}