Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨: FetchActivityDetails tests #162

Merged
merged 12 commits into from
Sep 22, 2022
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
988BA51128D0EF330078896C /* FinanceServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988BA51028D0EF330078896C /* FinanceServiceTests.swift */; };
988BA51328D0EF760078896C /* ActivityDetailsViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988BA51228D0EF760078896C /* ActivityDetailsViewModelTests.swift */; };
988BA51528D0EF820078896C /* HomeViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988BA51428D0EF820078896C /* HomeViewModelTests.swift */; };
A20FA93928DBC89400C0271A /* ActivityDetails+Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = A20FA93828DBC89400C0271A /* ActivityDetails+Fixture.swift */; };
FDEA36B528D8C7D4008BB89F /* NetworkClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDEA36B428D8C7D4008BB89F /* NetworkClientTests.swift */; };
FDEA36BD28D8C8F9008BB89F /* ActivityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDEA36BC28D8C8F9008BB89F /* ActivityTests.swift */; };
FDEA36BF28D8C909008BB89F /* Activity.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDEA36BE28D8C909008BB89F /* Activity.swift */; };
Expand Down Expand Up @@ -116,6 +117,7 @@
988BA51028D0EF330078896C /* FinanceServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FinanceServiceTests.swift; sourceTree = "<group>"; };
988BA51228D0EF760078896C /* ActivityDetailsViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityDetailsViewModelTests.swift; sourceTree = "<group>"; };
988BA51428D0EF820078896C /* HomeViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewModelTests.swift; sourceTree = "<group>"; };
A20FA93828DBC89400C0271A /* ActivityDetails+Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActivityDetails+Fixture.swift"; sourceTree = "<group>"; };
FDEA36B428D8C7D4008BB89F /* NetworkClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkClientTests.swift; sourceTree = "<group>"; };
FDEA36BC28D8C8F9008BB89F /* ActivityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityTests.swift; sourceTree = "<group>"; };
FDEA36BE28D8C909008BB89F /* Activity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Activity.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -417,6 +419,7 @@
FDEA36D328D923FE008BB89F /* Fixtures */ = {
isa = PBXGroup;
children = (
A20FA93828DBC89400C0271A /* ActivityDetails+Fixture.swift */,
);
path = Fixtures;
sourceTree = "<group>";
Expand Down Expand Up @@ -570,6 +573,7 @@
988BA51528D0EF820078896C /* HomeViewModelTests.swift in Sources */,
FDEA36CF28D8CCE4008BB89F /* ContactListViewTests.swift in Sources */,
988BA51328D0EF760078896C /* ActivityDetailsViewModelTests.swift in Sources */,
A20FA93928DBC89400C0271A /* ActivityDetails+Fixture.swift in Sources */,
FDEA36B528D8C7D4008BB89F /* NetworkClientTests.swift in Sources */,
FDEA36CA28D8CAD0008BB89F /* NetworkClientSpy.swift in Sources */,
FDEA36BD28D8C8F9008BB89F /* ActivityTests.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import Foundation

struct ActivityDetails: Decodable {
struct ActivityDetails: Decodable, Equatable {

let name: String
let price: Float
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,71 @@

import XCTest

@testable import FinanceApp

final class FinanceServiceTests: XCTestCase {
private let networkClientSpy = NetworkClientSpy()
private lazy var sut = FinanceService(networkClient: networkClientSpy)

func test_fetchActivityDetails_givenCorrectData_shouldReturnCorrectActivityDetails() {
networkClientSpy.completionData = correctData

sut.fetchActivityDetails {
XCTAssertEqual($0, .fixture(name: "Mall", price: 100, category: "Shopping", time: "8:57 AM"))
}

makeDefaultTests()
}

func test_fetchActivityDetails_givenParseFailData_shouldReturnNil() {
networkClientSpy.completionData = parseFailData

sut.fetchActivityDetails {
XCTAssertNil($0)
}

makeDefaultTests()
}

func test_fetchActivityDetails_givenNilData_shouldReturnNil() {
networkClientSpy.completionData = nil

sut.fetchActivityDetails {
XCTAssertNil($0)
}

makeDefaultTests()
}

func test_fetchActivityDetails_testSingleCountAndCorrectUrlString() {
sut.fetchActivityDetails { _ in }

makeDefaultTests()
}
}

extension FinanceServiceTests {

var correctData: Data? {
"""
{
"name": "Mall",
"category": "Shopping",
"price": 100.0,
"time": "8:57 AM"
}
""".data(using: .utf8)
}

var parseFailData: Data? {
"""
""".data(using: .utf8)
}

func makeDefaultTests() {
let expectedURL = "https://raw.githubusercontent.com/devpass-tech/challenge-finance-app/main/api/activity_details_endpoint.json"

XCTAssertEqual(networkClientSpy.performRequestCount, 1)
XCTAssertEqual(networkClientSpy.url?.description, expectedURL)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// ActivityDetails+Fixture.swift
// FinanceAppTests
//
// Created by Pedro Gabriel on 21/09/22.
//

@testable import FinanceApp

extension ActivityDetails {
static func fixture(name: String,
price: Float,
category: String,
time: String) -> Self {
.init(name: name,
price: price,
category: category,
time: time)
}
}