diff --git a/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailProtocols.swift b/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailProtocols.swift index b9775165..5f3bdb5c 100644 --- a/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailProtocols.swift +++ b/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailProtocols.swift @@ -14,6 +14,8 @@ protocol CustomListDetailViewModelProtocol { var viewState: AnyBehaviorBindable { get } var movieCells: [MovieListCellViewModel] { get } + var emptyMovieResultsTitle: String { get } + func buildHeaderViewModel() -> CustomListDetailHeaderViewModelProtocol func buildSectionViewModel() -> CustomListDetailSectionViewModel diff --git a/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailViewController.swift b/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailViewController.swift index 6918bc0c..1a45247c 100644 --- a/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailViewController.swift +++ b/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailViewController.swift @@ -109,7 +109,8 @@ final class CustomListDetailViewController: UIViewController, Storyboarded { private func configureView(with state: CustomListDetailViewState) { switch state { case .empty: - tableView.tableFooterView = FooterView(message: LocalizedStrings.emptyMovieResults()) + guard let viewModel else { return } + tableView.tableFooterView = FooterView(message: viewModel.emptyMovieResultsTitle) case .populated: tableView.tableFooterView = UIView() case .loading: diff --git a/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailViewModel.swift b/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailViewModel.swift index e6508a72..c1132422 100644 --- a/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailViewModel.swift +++ b/UpcomingMovies/Scenes/Account/CustomListDetail/CustomListDetailViewModel.swift @@ -21,6 +21,10 @@ final class CustomListDetailViewModel: CustomListDetailViewModelProtocol { // MARK: - Computed properties + var emptyMovieResultsTitle: String { + LocalizedStrings.emptyMovieResults() + } + private var movies: [MovieProtocol] { viewState.value.currentMovies } diff --git a/UpcomingMoviesTests/Account/CustomListDetail/CustomListDetailViewModelTests.swift b/UpcomingMoviesTests/Account/CustomListDetail/CustomListDetailViewModelTests.swift index 8b6548d6..f8dff37f 100644 --- a/UpcomingMoviesTests/Account/CustomListDetail/CustomListDetailViewModelTests.swift +++ b/UpcomingMoviesTests/Account/CustomListDetail/CustomListDetailViewModelTests.swift @@ -33,6 +33,15 @@ final class CustomListDetailViewModelTests: XCTestCase { XCTAssertEqual(listName, nameToTest) } + func testEmptyMovieResultsTitle() { + // Arrange + let viewModel = createSUT(list: MockListProtocol()) + // Act + let emptyMovieResultsTitle = viewModel.emptyMovieResultsTitle + // Assert + XCTAssertEqual(emptyMovieResultsTitle, "There are no movies to show right now.") + } + private func createSUT(list: ListProtocol) -> CustomListDetailViewModel { CustomListDetailViewModel(list, interactor: interactor) } diff --git a/UpcomingMoviesTests/Helpers/Mocks/CustomListDetailMockFactory.swift b/UpcomingMoviesTests/Helpers/Mocks/CustomListDetailMockFactory.swift index c6cd63c0..2603fea2 100644 --- a/UpcomingMoviesTests/Helpers/Mocks/CustomListDetailMockFactory.swift +++ b/UpcomingMoviesTests/Helpers/Mocks/CustomListDetailMockFactory.swift @@ -29,6 +29,8 @@ final class MockCustomListDetailViewModel: CustomListDetailViewModelProtocol { var movieCells: [MovieListCellViewModel] = [] + var emptyMovieResultsTitle: String = "" + var buildHeaderViewModelCallCount = 0 var buildHeaderViewModelResult = CustomListDetailHeaderViewModel(list: MockListProtocol()) func buildHeaderViewModel() -> CustomListDetailHeaderViewModelProtocol {