app-reviews/Libraries/iTunes/Test/Tests/Services/iTunesServiceTests.swift

109 lines
2.7 KiB
Swift
Raw Permalink Normal View History

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