Implemented the GetMeEndpoint endpoint.

This commit is contained in:
Javier Cicchelli 2022-12-04 01:41:32 +01:00
parent 8a6940ee8d
commit bfb47ea0f8
6 changed files with 144 additions and 2 deletions

View File

@ -0,0 +1,33 @@
//
// GetMeEndpoint.swift
// APIService
//
// Created by Javier Cicchelli on 03/12/2022.
// Copyright © 2022 Röck+Cöde. All rights reserved.
//
struct GetMeEndpoint: Endpoint {
let path: String
let method: RequestMethod
let credentials: BasicCredentials
let headers: [String : String]
let body: [String : String]?
}
// MARK: - Initialisers
extension GetMeEndpoint {
init(
username: String,
password: String
) {
self.path = "/me"
self.method = .get
self.credentials = .init(
username: username,
password: password
)
self.headers = [.Header.Keys.contentType: .Header.Values.contentTypeJSON]
self.body = nil
}
}

View File

@ -0,0 +1,20 @@
//
// String+Headers.swift
// APIService
//
// Created by Javier Cicchelli on 03/12/2022.
// Copyright © 2022 Röck+Cöde. All rights reserved.
//
extension String {
enum Header {
enum Keys {
static let authorization = "Authorization"
static let contentType = "Content-Type"
}
enum Values {
static let contentTypeJSON = "application/json"
}
}
}

View File

@ -0,0 +1,13 @@
//
// String+Hosts.swift
// APIService
//
// Created by Javier Cicchelli on 04/12/2022.
// Copyright © 2022 Röck+Cöde. All rights reserved.
//
extension String {
enum Hosts {
static let `default` = "163.172.147.216:8080"
}
}

View File

@ -0,0 +1,13 @@
//
// String+Schemes.swift
// APIService
//
// Created by Javier Cicchelli on 04/12/2022.
// Copyright © 2022 Röck+Cöde. All rights reserved.
//
extension String {
enum Schemes {
static let http = "http"
}
}

View File

@ -19,8 +19,8 @@ protocol Endpoint {
// MARK: - Defaults // MARK: - Defaults
extension Endpoint { extension Endpoint {
var scheme: String { "http" } var scheme: String { .Schemes.http }
var host: String { "163.172.147.216:8080" } var host: String { .Hosts.default }
var authorizationHeader: [String: String] { var authorizationHeader: [String: String] {
let makeAuthHeader = MakeAuthorizationHeaderUseCase() let makeAuthHeader = MakeAuthorizationHeaderUseCase()

View File

@ -0,0 +1,63 @@
//
// GetMeEndpoint+InitTests.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 GetMeEndpointInitTests: XCTestCase {
// MARK: Properties
var endpoint: GetMeEndpoint!
var username: String!
var password: String!
// MARK: Test cases
func test_withProperUsernameAndPassword() throws {
// GIVEN
username = "username"
password = "password"
// WHEN
endpoint = .init(username: username, password: password)
// THEN
XCTAssertEqual(endpoint.scheme, .Schemes.http)
XCTAssertEqual(endpoint.host, .Hosts.default)
XCTAssertEqual(endpoint.path, "/me")
XCTAssertEqual(endpoint.method, .get)
XCTAssertEqual(endpoint.credentials.username, username)
XCTAssertEqual(endpoint.credentials.password, password)
XCTAssertEqual(endpoint.headers, [.Header.Keys.contentType: .Header.Values.contentTypeJSON])
XCTAssertEqual(endpoint.authorizationHeader, [.Header.Keys.authorization: "Basic dXNlcm5hbWU6cGFzc3dvcmQ="])
XCTAssertNil(endpoint.body)
}
func test_withEmptyUsernameOrPassword() async throws {
// GIVEN
username = ""
password = "password"
// WHEN
endpoint = .init(username: username, password: password)
// THEN
XCTAssertEqual(endpoint.scheme, .Schemes.http)
XCTAssertEqual(endpoint.host, .Hosts.default)
XCTAssertEqual(endpoint.path, "/me")
XCTAssertEqual(endpoint.method, .get)
XCTAssertEqual(endpoint.credentials.username, username)
XCTAssertEqual(endpoint.credentials.password, password)
XCTAssertEqual(endpoint.headers, [.Header.Keys.contentType: .Header.Values.contentTypeJSON])
XCTAssertEqual(endpoint.authorizationHeader, [:])
XCTAssertNil(endpoint.body)
}
}