Skip to content
This repository has been archived by the owner on Jul 27, 2022. It is now read-only.

Commit

Permalink
Add tests for FeedExtensions
Browse files Browse the repository at this point in the history
  • Loading branch information
jcoynel committed Feb 6, 2021
1 parent cbe9e9f commit 483cf83
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 5 deletions.
4 changes: 2 additions & 2 deletions Sources/AppStoreReviews/FeedExtensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ extension Feed {
public var firstPage: Page? { Page(links.first) }
public var lastPage: Page? { Page(links.last) }
public var previousPage: Page? {
guard let currentPage = currentPage, let firstPage = firstPage, currentPage == firstPage else {
guard let currentPage = currentPage, let firstPage = firstPage, currentPage.page > firstPage.page else {
return nil
}
return Page(links.previous)
}
public var nextPage: Page? {
guard let currentPage = currentPage, let lastPage = lastPage, currentPage == lastPage else {
guard let currentPage = currentPage, let lastPage = lastPage, currentPage.page < lastPage.page else {
return nil
}
return Page(links.next)
Expand Down
125 changes: 122 additions & 3 deletions Tests/AppStoreReviewsTests/FeedExtensionsTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,130 @@ import XCTest
@testable import AppStoreReviews

final class FeedExtensionsTests: XCTestCase {
func testTODO() {
#warning("Not implemented")
func testCurrentPageIsEqualToLinksCurrentPage() {
let feed = testFeed(
links: Feed.Links(
alternate: fakeLink,
current: exampleLink(123),
first: exampleLink(1),
last: exampleLink(200),
previous: exampleLink(122),
next: exampleLink(124)))

XCTAssertEqual(feed.currentPage, expectedPage(123))
}

func testFirstPageIsEqualToLinksFirstPage() {
let feed = testFeed(
links: Feed.Links(
alternate: fakeLink,
current: exampleLink(123),
first: exampleLink(1),
last: exampleLink(200),
previous: exampleLink(122),
next: exampleLink(124)))

XCTAssertEqual(feed.firstPage, expectedPage(1))
}

func testLastPageIsEqualToLinksLastPage() {
let feed = testFeed(
links: Feed.Links(
alternate: fakeLink,
current: exampleLink(123),
first: exampleLink(1),
last: exampleLink(200),
previous: exampleLink(122),
next: exampleLink(124)))

XCTAssertEqual(feed.lastPage, expectedPage(200))
}

func testPreviousPageIsEqualToLinksCurrentPageMinusOne() {
let feed = testFeed(
links: Feed.Links(
alternate: fakeLink,
current: exampleLink(123),
first: exampleLink(1),
last: exampleLink(200),
previous: exampleLink(122),
next: exampleLink(124)))

XCTAssertEqual(feed.previousPage, expectedPage(122))
}

func testPreviousPageIsNilWhenCurrentPageIsTheFirst() {
let feed = testFeed(
links: Feed.Links(
alternate: fakeLink,
current: exampleLink(1),
first: exampleLink(1),
last: exampleLink(200),
previous: exampleLink(122),
next: exampleLink(124)))

XCTAssertNil(feed.previousPage)
}

func testNextPageIsEqualToLinksNextPagePlusOne() {
let feed = testFeed(
links: Feed.Links(
alternate: fakeLink,
current: exampleLink(123),
first: exampleLink(1),
last: exampleLink(200),
previous: exampleLink(122),
next: exampleLink(124)))

XCTAssertEqual(feed.nextPage, expectedPage(124))
}

func testNextPageIsNilWhenCurrentPageIsTheLast() {
let feed = testFeed(
links: Feed.Links(
alternate: fakeLink,
current: exampleLink(200),
first: exampleLink(1),
last: exampleLink(200),
previous: exampleLink(122),
next: exampleLink(124)))

XCTAssertNil(feed.nextPage)
}

static var allTests = [
("testTODO", testTODO),
("testCurrentPageIsEqualToLinksCurrentPage", testCurrentPageIsEqualToLinksCurrentPage),
("testFirstPageIsEqualToLinksFirstPage", testFirstPageIsEqualToLinksFirstPage),
("testLastPageIsEqualToLinksLastPage", testLastPageIsEqualToLinksLastPage),
("testPreviousPageIsEqualToLinksCurrentPageMinusOne", testPreviousPageIsEqualToLinksCurrentPageMinusOne),
("testPreviousPageIsNilWhenCurrentPageIsTheFirst", testPreviousPageIsNilWhenCurrentPageIsTheFirst),
("testNextPageIsEqualToLinksNextPagePlusOne", testNextPageIsEqualToLinksNextPagePlusOne),
("testNextPageIsNilWhenCurrentPageIsTheLast", testNextPageIsNilWhenCurrentPageIsTheLast),
]
}

// MARK: - Helpers

private extension FeedExtensionsTests {
func testFeed(links: Feed.Links) -> Feed {
Feed(
author: Feed.Author(name: "", uri: fakeLink),
entries: [],
title: "",
rights: "",
updated: Date(),
links: links)
}

var fakeLink: URL {
URL(string: "https://56north.co")!
}

func exampleLink(_ pageNumber: Int) -> URL {
URL(string: "https://itunes.apple.com/gb/rss/customerreviews/page=\(pageNumber)/id=1510826067/sortby=mostrecent/xml?l=en&urlDesc=/customerreviews/page=\(pageNumber)/id=1510826067/sortby=mostrecent/json")!
}

func expectedPage(_ pageNumber: Int) -> Page {
try! Page(appID: 1510826067, territory: .GB, page: pageNumber)
}
}

0 comments on commit 483cf83

Please sign in to comment.