Skip to content

Commit ad87381

Browse files
committed
Refactor Item of viewModel to make them equitable
1 parent cefab6c commit ad87381

File tree

20 files changed

+198
-293
lines changed

20 files changed

+198
-293
lines changed

ExampleMVVM.xcodeproj/project.pbxproj

+12
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
1F57F8D423C656F600981E09 /* AccessibilityIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F57F8D123C656F600981E09 /* AccessibilityIdentifier.swift */; };
3535
1F6B521323630016002FCDE9 /* RepositoryTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6B521223630016002FCDE9 /* RepositoryTask.swift */; };
3636
1F77930F222C0DF2004E034C /* StoryboardInstantiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F77930E222C0DF2004E034C /* StoryboardInstantiable.swift */; };
37+
1F7C1D19242117910014F011 /* Movie+Stub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F7C1D17242117790014F011 /* Movie+Stub.swift */; };
3738
1F84DECE2300677B00139F73 /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FEE31612218B17E00C160B9 /* Observable.swift */; };
3839
1F84DED023006BDA00139F73 /* FetchRecentMovieQueriesUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F84DECF23006BDA00139F73 /* FetchRecentMovieQueriesUseCase.swift */; };
3940
1F8D09312301C2F20061FB6F /* Movie+Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F8D092F2301C2F20061FB6F /* Movie+Decodable.swift */; };
@@ -132,6 +133,7 @@
132133
1F57F8D123C656F600981E09 /* AccessibilityIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityIdentifier.swift; sourceTree = "<group>"; };
133134
1F6B521223630016002FCDE9 /* RepositoryTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepositoryTask.swift; sourceTree = "<group>"; };
134135
1F77930E222C0DF2004E034C /* StoryboardInstantiable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryboardInstantiable.swift; sourceTree = "<group>"; };
136+
1F7C1D17242117790014F011 /* Movie+Stub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Movie+Stub.swift"; sourceTree = "<group>"; };
135137
1F84DECF23006BDA00139F73 /* FetchRecentMovieQueriesUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchRecentMovieQueriesUseCase.swift; sourceTree = "<group>"; };
136138
1F8D092F2301C2F20061FB6F /* Movie+Decodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Movie+Decodable.swift"; sourceTree = "<group>"; };
137139
1F9034C32306FDFE00DEA4BD /* NetworkServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkServiceTests.swift; sourceTree = "<group>"; };
@@ -288,6 +290,14 @@
288290
path = Utils;
289291
sourceTree = "<group>";
290292
};
293+
1F7C1D1A242117D30014F011 /* Mocks */ = {
294+
isa = PBXGroup;
295+
children = (
296+
1F7C1D17242117790014F011 /* Movie+Stub.swift */,
297+
);
298+
path = Mocks;
299+
sourceTree = "<group>";
300+
};
291301
1F84DECD2300673A00139F73 /* DIContainer */ = {
292302
isa = PBXGroup;
293303
children = (
@@ -436,6 +446,7 @@
436446
1FA53A3622F45C4F009A104C /* Domain */,
437447
1F9034D52307231000DEA4BD /* Presentation */,
438448
1F9034CB2307138400DEA4BD /* Infrastructure */,
449+
1F7C1D1A242117D30014F011 /* Mocks */,
439450
1FFFC83D221B02BA007D99D2 /* Info.plist */,
440451
);
441452
name = ExampleMVVMTests;
@@ -943,6 +954,7 @@
943954
1FE49D9A230AEC4F00D1D42E /* MoviesListItemViewModel.swift in Sources */,
944955
1F9034DC2307291800DEA4BD /* FetchRecentMovieQueriesUseCase.swift in Sources */,
945956
1FE49D9B230AEC4F00D1D42E /* MoviesListViewModel.swift in Sources */,
957+
1F7C1D19242117910014F011 /* Movie+Stub.swift in Sources */,
946958
1F90353A2307716300DEA4BD /* MoviesListViewModelTests.swift in Sources */,
947959
1F9034C72306FF2D00DEA4BD /* Endpoint.swift in Sources */,
948960
1F9034CE230713FC00DEA4BD /* DataTransferServiceTests.swift in Sources */,

ExampleMVVM/Application/DIContainer/MoviesSceneDIContainer.swift

+8-19
Original file line numberDiff line numberDiff line change
@@ -53,33 +53,22 @@ final class MoviesSceneDIContainer {
5353

5454
// MARK: - Movies List
5555
func makeMoviesListViewController() -> UIViewController {
56-
return MoviesListViewController.create(with: makeMoviesListViewModel(), moviesListViewControllersFactory: self)
56+
return MoviesListViewController.create(with: makeMoviesListViewModel(),
57+
moviesListViewControllersFactory: self,
58+
posterImagesRepository: makePosterImagesRepository())
5759
}
5860

5961
func makeMoviesListViewModel() -> MoviesListViewModel {
60-
return DefaultMoviesListViewModel(searchMoviesUseCase: makeSearchMoviesUseCase(),
61-
posterImagesRepository: makePosterImagesRepository())
62+
return DefaultMoviesListViewModel(searchMoviesUseCase: makeSearchMoviesUseCase())
6263
}
6364

6465
// MARK: - Movie Details
65-
func makeMoviesDetailsViewController(title: String,
66-
overview: String,
67-
posterPlaceholderImage: Data?,
68-
posterPath: String?) -> UIViewController {
69-
return MovieDetailsViewController.create(with: makeMoviesDetailsViewModel(title: title,
70-
overview: overview,
71-
posterPlaceholderImage: posterPlaceholderImage,
72-
posterPath: posterPath))
66+
func makeMoviesDetailsViewController(movie: Movie) -> UIViewController {
67+
return MovieDetailsViewController.create(with: makeMoviesDetailsViewModel(movie: movie))
7368
}
7469

75-
func makeMoviesDetailsViewModel(title: String,
76-
overview: String,
77-
posterPlaceholderImage: Data?,
78-
posterPath: String?) -> MovieDetailsViewModel {
79-
return DefaultMovieDetailsViewModel(title: title,
80-
overview: overview,
81-
posterPlaceholderImage: posterPlaceholderImage,
82-
posterPath: posterPath,
70+
func makeMoviesDetailsViewModel(movie: Movie) -> MovieDetailsViewModel {
71+
return DefaultMovieDetailsViewModel(movie: movie,
8372
posterImagesRepository: makePosterImagesRepository())
8473
}
8574

ExampleMVVM/Data/PersistentStorages/CoreDataStorage/CoreDataStorage.swift

+7-13
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,11 @@ extension CoreDataStorage: MoviesQueriesStorage {
5757
request.sortDescriptors = [NSSortDescriptor(key: #keyPath(MovieQueryEntity.createdAt),
5858
ascending: false)]
5959
request.fetchLimit = number
60-
let resut = try context.fetch(request).map ( MovieQuery.init )
61-
DispatchQueue.global(qos: .background).async {
62-
completion(.success(resut))
63-
}
60+
let resut = try context.fetch(request).map(MovieQuery.init)
61+
62+
completion(.success(resut))
6463
} catch {
65-
DispatchQueue.global(qos: .background).async {
66-
completion(.failure(CoreDataStorageError.readError(error)))
67-
}
64+
completion(.failure(CoreDataStorageError.readError(error)))
6865
print(error)
6966
}
7067
}
@@ -78,13 +75,10 @@ extension CoreDataStorage: MoviesQueriesStorage {
7875
try strongSelf.cleanUpQueries(for: query, inContext: context)
7976
let entity = MovieQueryEntity(movieQuery: query, insertInto: context)
8077
try context.save()
81-
DispatchQueue.global(qos: .background).async {
82-
completion(.success(MovieQuery(movieQueryEntity: entity)))
83-
}
78+
79+
completion(.success(MovieQuery(movieQueryEntity: entity)))
8480
} catch {
85-
DispatchQueue.global(qos: .background).async {
86-
completion(.failure(CoreDataStorageError.writeError(error)))
87-
}
81+
completion(.failure(CoreDataStorageError.writeError(error)))
8882
print(error)
8983
}
9084
}

ExampleMVVM/Data/PersistentStorages/UserDefaultsStorage/UserDefaultsStorage.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ final class UserDefaultsStorage {
1717
if let queriesData = userDefaults.object(forKey: recentsMoviesQueriesKey) as? Data {
1818
let decoder = JSONDecoder()
1919
if let movieQueryList = try? decoder.decode(MovieQueriesListUDS.self, from: queriesData) {
20-
return movieQueryList.list.map ( MovieQuery.init )
20+
return movieQueryList.list.map(MovieQuery.init)
2121
}
2222
}
2323
return []
2424
}
2525
set {
2626
let encoder = JSONEncoder()
27-
if let encoded = try? encoder.encode(MovieQueriesListUDS(list: newValue.map ( MovieQueryUDS.init ))) {
27+
if let encoded = try? encoder.encode(MovieQueriesListUDS(list: newValue.map(MovieQueryUDS.init))) {
2828
userDefaults.set(encoded, forKey: recentsMoviesQueriesKey)
2929
}
3030
}

ExampleMVVM/Domain/Entities/Movie.swift

+7-7
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,18 @@
77

88
import Foundation
99

10-
struct MoviesPage {
11-
let page: Int
12-
let totalPages: Int
13-
let movies: [Movie]
14-
}
15-
1610
typealias MovieId = String
1711

18-
struct Movie {
12+
struct Movie: Equatable, Identifiable {
1913
let id: MovieId
2014
let title: String
2115
let posterPath: String?
2216
let overview: String
2317
let releaseDate: Date?
2418
}
19+
20+
struct MoviesPage: Equatable {
21+
let page: Int
22+
let totalPages: Int
23+
let movies: [Movie]
24+
}

ExampleMVVM/Domain/Entities/MovieQuery.swift

+1-3
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
import Foundation
99

10-
struct MovieQuery {
10+
struct MovieQuery: Equatable {
1111
let query: String
1212
}
13-
14-
extension MovieQuery: Equatable {}

ExampleMVVM/Mocks/Movie+Stub.swift

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//
2+
// Movie+Stub.swift
3+
// ExampleMVVM
4+
//
5+
// Created by Oleh Kudinov on 17/03/2020.
6+
//
7+
8+
import Foundation
9+
10+
extension Movie {
11+
static func stub(id: MovieId = "id1",
12+
title: String = "title1" ,
13+
posterPath: String? = "/1",
14+
overview: String = "overview1",
15+
releaseDate: Date? = nil) -> Self {
16+
Movie(id: id,
17+
title: title,
18+
posterPath: posterPath,
19+
overview: overview,
20+
releaseDate: releaseDate)
21+
}
22+
}

0 commit comments

Comments
 (0)