This PR contains the work done to implement the `iTunesService` service that fetches the reviews from the **Apple App Store**. Reviewed-on: #5 Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
109 lines
2.7 KiB
Swift
109 lines
2.7 KiB
Swift
//
|
|
// iTunesServiceTests.swift
|
|
// ReviewsiTunesTest
|
|
//
|
|
// Created by Javier Cicchelli on 17/03/2024.
|
|
// Copyright © 2024 Röck+Cöde VoF. All rights reserved.
|
|
//
|
|
|
|
import ReviewsFeedKit
|
|
import ReviewsFoundationKit
|
|
import XCTest
|
|
|
|
@testable import ReviewsiTunesKit
|
|
|
|
final class iTunesServiceTests: XCTestCase {
|
|
|
|
// MARK: Properties
|
|
private var sut: iTunesService!
|
|
|
|
// MARK: Setup
|
|
override func setUp() async throws {
|
|
sut = .init(configuration: .init(session: .mock))
|
|
}
|
|
|
|
// MARK: Functions
|
|
func testGetReviews_whenResponseOK_withOneReview() async throws {
|
|
// GIVEN
|
|
let reviews: [Review] = .one
|
|
|
|
MockURLProtocol.response = .init(
|
|
statusCode: 200,
|
|
object: Feed(entries: reviews)
|
|
)
|
|
|
|
// WHEN
|
|
let output = try await sut.getReviews(.init(
|
|
appID: "1234567890",
|
|
countryCode: "abc"
|
|
))
|
|
|
|
// THEN
|
|
XCTAssertFalse(output.reviews.isEmpty)
|
|
XCTAssertEqual(output.reviews.count, reviews.count)
|
|
XCTAssertEqual(output.reviews, reviews)
|
|
}
|
|
|
|
func testGetReviews_whenResponseOK_withManyReview() async throws {
|
|
// GIVEN
|
|
let reviews: [Review] = .many
|
|
|
|
MockURLProtocol.response = .init(
|
|
statusCode: 200,
|
|
object: Feed(entries: reviews)
|
|
)
|
|
|
|
// WHEN
|
|
let output = try await sut.getReviews(.init(
|
|
appID: "1234567890",
|
|
countryCode: "abc"
|
|
))
|
|
|
|
// THEN
|
|
XCTAssertFalse(output.reviews.isEmpty)
|
|
XCTAssertEqual(output.reviews.count, reviews.count)
|
|
XCTAssertEqual(output.reviews, reviews)
|
|
}
|
|
|
|
func testGetReviews_whenResponseOK_withEmptyReview() async throws {
|
|
// GIVEN
|
|
let reviews: [Review] = .empty
|
|
|
|
MockURLProtocol.response = .init(
|
|
statusCode: 200,
|
|
object: Feed(entries: reviews)
|
|
)
|
|
|
|
// WHEN
|
|
let output = try await sut.getReviews(.init(
|
|
appID: "1234567890",
|
|
countryCode: "abc"
|
|
))
|
|
|
|
// THEN
|
|
XCTAssertTrue(output.reviews.isEmpty)
|
|
XCTAssertEqual(output.reviews, reviews)
|
|
}
|
|
|
|
func testGetReviews_whenResponseNotOK() async throws {
|
|
// GIVEN
|
|
let statusCode = 404
|
|
|
|
MockURLProtocol.response = .init(statusCode: statusCode)
|
|
|
|
// WHEN
|
|
// THEN
|
|
do {
|
|
try await sut.getReviews(.init(
|
|
appID: "1234567890",
|
|
countryCode: "abc"
|
|
))
|
|
} catch EndpointError.requestFailed(statusCode: statusCode) {
|
|
XCTAssertTrue(true)
|
|
} catch {
|
|
XCTAssertTrue(false)
|
|
}
|
|
}
|
|
|
|
}
|