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