deep-linking-sample/Apps/Wikipedia/WikipediaUnitTests/Code/Notifications Tests/NotificationsCenterDetailViewModelUserTalkMessageTests.swift
Javier Cicchelli 9bcdaa697b [Setup] Basic project structure (#1)
This PR contains all the work related to setting up this project as required to implement the [Assignment](https://repo.rock-n-code.com/rock-n-code/deep-linking-assignment/wiki/Assignment) on top, as intended.

To summarise this work:
- [x] created a new **Xcode** project;
- [x] cloned the `Wikipedia` app and inserted it into the **Xcode** project;
- [x] created the `Locations` app and also, its `Libraries` package;
- [x] created the `Shared` package to share dependencies between the apps;
- [x] added a `Makefile` file and implemented some **environment** and **help** commands.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#1
2023-04-08 18:37:13 +00:00

273 lines
19 KiB
Swift

import XCTest
@testable import Wikipedia
class NotificationsCenterDetailViewModelUserTalkMessageTests: NotificationsCenterViewModelTests {
override var dataFileName: String {
return "notifications-userTalkMessages"
}
func testUserTalkPageGenericMessage() throws {
let detailViewModel = try detailViewModelFromIdentifier(identifier: "1")
try testUserTalkPageGenericMessageText(detailViewModel: detailViewModel)
try testUserTalkPageGenericMessageImage(detailViewModel: detailViewModel)
try testUserTalkPageGenericMessageActions(detailViewModel: detailViewModel)
}
func testUserTalkPageGenericAnonymousMessage() throws {
let detailViewModel = try detailViewModelFromIdentifier(identifier: "2")
try testUserTalkPageGenericAnonymousMessageText(detailViewModel: detailViewModel)
try testUserTalkPageGenericAnonymousMessageActions(detailViewModel: detailViewModel)
}
func testUserTalkPageSpecificMessage() throws {
let detailViewModel = try detailViewModelFromIdentifier(identifier: "3")
try testUserTalkPageSpecificMessageText(detailViewModel: detailViewModel)
try testUserTalkPageSpecificMessageActions(detailViewModel: detailViewModel)
}
func testUserTalkPageSpecificAnonymousMessage() throws {
let detailViewModel = try detailViewModelFromIdentifier(identifier: "4")
try testUserTalkPageSpecificAnonymousMessageText(detailViewModel: detailViewModel)
try testUserTalkPageSpecificAnonymousMessageActions(detailViewModel: detailViewModel)
}
func testUserTalkPageSpecificTruncatedMessage() throws {
let detailViewModel = try detailViewModelFromIdentifier(identifier: "5")
try testUserTalkPageSpecificTruncatedMessageText(detailViewModel: detailViewModel)
try testUserTalkPageSpecificTruncatedMessageActions(detailViewModel: detailViewModel)
}
func testUserTalkPageMediaWikiMessage() throws {
let detailViewModel = try detailViewModelFromIdentifier(identifier: "6")
try testUserTalkPageMediaWikiMessageText(detailViewModel: detailViewModel)
try testUserTalkPageMediaWikiMessageActions(detailViewModel: detailViewModel)
}
private func testUserTalkPageGenericMessageText(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertEqual(detailViewModel.headerTitle, "From Jack The Cat", "Invalid headerTitle")
XCTAssertEqual(detailViewModel.headerSubtitle, "English Wikipedia", "Invalid headerSubtitle")
XCTAssertEqual(detailViewModel.headerDate, "4/11/19", "Invalid headerDate")
XCTAssertEqual(detailViewModel.contentTitle, "Talk page message", "Invalid contentTitle")
XCTAssertEqual(detailViewModel.contentBody, "Message on your talk page", "Invalid contentBody")
}
private func testUserTalkPageGenericMessageImage(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertEqual(detailViewModel.headerImageName, "notifications-type-user-talk-message", "Invalid headerImageName")
}
private func testUserTalkPageGenericMessageActions(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertNotNil(detailViewModel.primaryAction, "Invalid primaryAction")
XCTAssertEqual(detailViewModel.secondaryActions.count, 2, "Invalid secondaryActions count")
let expectedPrimaryText = "Your talk page"
let expectedPrimaryURL: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Fred_The_Bird")!
let expectedPrimaryIcon = NotificationsCenterIconType.document
let expectedPrimaryDestination = "In app"
let expectedAction: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedPrimaryText, expectedURL: expectedPrimaryURL, expectedIcon: expectedPrimaryIcon, expectedDestinationText: expectedPrimaryDestination, actionToTest: detailViewModel.primaryAction!, actionType: expectedAction)
let expectedText0 = "Jack The Cat's user page"
let expectedURL0: URL? = URL(string: "https://en.wikipedia.org/wiki/User:Jack_The_Cat")!
let expectedIcon0 = NotificationsCenterIconType.person
let expectedDestinationText0 = "On web"
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: detailViewModel.secondaryActions[0], actionType: expectedAction0)
let expectedText1 = "Diff"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=892051241&title=User_talk%253AFred_The_Bird")!
let expectedIcon1 = NotificationsCenterIconType.diff
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: detailViewModel.secondaryActions[1], actionType: expectedAction1)
}
private func testUserTalkPageGenericAnonymousMessageText(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertEqual(detailViewModel.headerTitle, "From 47.184.10.84", "Invalid headerTitle")
XCTAssertEqual(detailViewModel.headerSubtitle, "English Wikipedia", "Invalid headerSubtitle")
XCTAssertEqual(detailViewModel.headerDate, "5/30/19", "Invalid headerDate")
XCTAssertEqual(detailViewModel.contentTitle, "Talk page message", "Invalid contentTitle")
XCTAssertEqual(detailViewModel.contentBody, "Message on your talk page", "Invalid contentBody")
}
private func testUserTalkPageGenericAnonymousMessageActions(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertNotNil(detailViewModel.primaryAction, "Invalid primaryAction")
XCTAssertEqual(detailViewModel.secondaryActions.count, 2, "Invalid secondaryActions count")
let expectedPrimaryText = "Your talk page"
let expectedPrimaryURL: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Fred_The_Bird")!
let expectedPrimaryIcon = NotificationsCenterIconType.document
let expectedPrimaryDestination = "In app"
let expectedAction: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedPrimaryText, expectedURL: expectedPrimaryURL, expectedIcon: expectedPrimaryIcon, expectedDestinationText: expectedPrimaryDestination, actionToTest: detailViewModel.primaryAction!, actionType: expectedAction)
let expectedText0 = "47.184.10.84's user page"
let expectedURL0: URL? = URL(string: "https://en.wikipedia.org/wiki/User:47.184.10.84")!
let expectedIcon0 = NotificationsCenterIconType.person
let expectedDestinationText0 = "On web"
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: detailViewModel.secondaryActions[0], actionType: expectedAction0)
let expectedText1 = "Diff"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=899561783&title=User_talk%253AFred_The_Bird")!
let expectedIcon1 = NotificationsCenterIconType.diff
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: detailViewModel.secondaryActions[1], actionType: expectedAction1)
}
private func testUserTalkPageSpecificMessageText(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertEqual(detailViewModel.headerTitle, "From Jack The Cat", "Invalid headerTitle")
XCTAssertEqual(detailViewModel.headerSubtitle, "English Wikipedia", "Invalid headerSubtitle")
XCTAssertEqual(detailViewModel.headerDate, "4/11/19", "Invalid headerDate")
XCTAssertEqual(detailViewModel.contentTitle, "Hello", "Invalid contentTitle")
XCTAssertEqual(detailViewModel.contentBody, "Reply text", "Invalid contentBody")
}
private func testUserTalkPageSpecificMessageActions(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertNotNil(detailViewModel.primaryAction, "Invalid primaryAction")
XCTAssertEqual(detailViewModel.secondaryActions.count, 2, "Invalid secondaryActions count")
let expectedPrimaryText = "Your talk page"
let expectedPrimaryURL: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Fred_The_Bird#Hello")!
let expectedPrimaryIcon = NotificationsCenterIconType.document
let expectedPrimaryDestination = "In app"
let expectedAction: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedPrimaryText, expectedURL: expectedPrimaryURL, expectedIcon: expectedPrimaryIcon, expectedDestinationText: expectedPrimaryDestination, actionToTest: detailViewModel.primaryAction!, actionType: expectedAction)
let expectedText0 = "Jack The Cat's user page"
let expectedURL0: URL? = URL(string: "https://en.wikipedia.org/wiki/User:Jack_The_Cat")!
let expectedIcon0 = NotificationsCenterIconType.person
let expectedDestinationText0 = "On web"
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: detailViewModel.secondaryActions[0], actionType: expectedAction0)
let expectedText1 = "Diff"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=892043155&title=User_talk%253AFred_The_Bird")!
let expectedIcon1 = NotificationsCenterIconType.diff
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: detailViewModel.secondaryActions[1], actionType: expectedAction1)
}
private func testUserTalkPageSpecificAnonymousMessageText(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertEqual(detailViewModel.headerTitle, "From 47.184.10.84", "Invalid headerTitle")
XCTAssertEqual(detailViewModel.headerSubtitle, "English Wikipedia", "Invalid headerSubtitle")
XCTAssertEqual(detailViewModel.headerDate, "6/11/19", "Invalid headerDate")
XCTAssertEqual(detailViewModel.contentTitle, "Section Title", "Invalid contentTitle")
XCTAssertEqual(detailViewModel.contentBody, "Reply text", "Invalid contentBody")
}
private func testUserTalkPageSpecificAnonymousMessageActions(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertNotNil(detailViewModel.primaryAction, "Invalid primaryAction")
XCTAssertEqual(detailViewModel.secondaryActions.count, 2, "Invalid secondaryActions count")
let expectedPrimaryText = "Your talk page"
let expectedPrimaryURL: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Fred_The_Bird#Section_Title")!
let expectedPrimaryIcon = NotificationsCenterIconType.document
let expectedPrimaryDestination = "In app"
let expectedAction: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedPrimaryText, expectedURL: expectedPrimaryURL, expectedIcon: expectedPrimaryIcon, expectedDestinationText: expectedPrimaryDestination, actionToTest: detailViewModel.primaryAction!, actionType: expectedAction)
let expectedText0 = "47.184.10.84's user page"
let expectedURL0: URL? = URL(string: "https://en.wikipedia.org/wiki/User:47.184.10.84")!
let expectedIcon0 = NotificationsCenterIconType.person
let expectedDestinationText0 = "On web"
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: detailViewModel.secondaryActions[0], actionType: expectedAction0)
let expectedText1 = "Diff"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=901389754&title=User_talk%253AFred_The_Bird")!
let expectedIcon1 = NotificationsCenterIconType.diff
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: detailViewModel.secondaryActions[1], actionType: expectedAction1)
}
private func testUserTalkPageSpecificTruncatedMessageText(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertEqual(detailViewModel.headerTitle, "From Fred The Bird", "Invalid headerTitle")
XCTAssertEqual(detailViewModel.headerSubtitle, "English Wikipedia", "Invalid headerSubtitle")
XCTAssertEqual(detailViewModel.headerDate, "3/9/22", "Invalid headerDate")
XCTAssertEqual(detailViewModel.contentTitle, "Section Title", "Invalid contentTitle")
XCTAssertEqual(detailViewModel.contentBody, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Adipiscing elit ut aliq...", "Invalid contentBody")
}
private func testUserTalkPageSpecificTruncatedMessageActions(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertNotNil(detailViewModel.primaryAction, "Invalid primaryAction")
XCTAssertEqual(detailViewModel.secondaryActions.count, 2, "Invalid secondaryActions count")
let expectedPrimaryText = "Your talk page"
let expectedPrimaryURL: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Jack_The_Cat#Section_Title")!
let expectedPrimaryIcon = NotificationsCenterIconType.document
let expectedPrimaryDestination = "In app"
let expectedAction: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedPrimaryText, expectedURL: expectedPrimaryURL, expectedIcon: expectedPrimaryIcon, expectedDestinationText: expectedPrimaryDestination, actionToTest: detailViewModel.primaryAction!, actionType: expectedAction)
let expectedText0 = "Fred The Bird's user page"
let expectedURL0: URL? = URL(string: "https://en.wikipedia.org/wiki/User:Fred_The_Bird")!
let expectedIcon0 = NotificationsCenterIconType.person
let expectedDestinationText0 = "On web"
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: detailViewModel.secondaryActions[0], actionType: expectedAction0)
let expectedText1 = "Diff"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=1076152880&title=User_talk%253AJack_The_Cat")!
let expectedIcon1 = NotificationsCenterIconType.diff
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: detailViewModel.secondaryActions[1], actionType: expectedAction1)
}
private func testUserTalkPageMediaWikiMessageText(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertEqual(detailViewModel.headerTitle, "From MediaWiki message delivery", "Invalid headerTitle")
XCTAssertEqual(detailViewModel.headerSubtitle, "English Wikipedia", "Invalid headerSubtitle")
XCTAssertEqual(detailViewModel.headerDate, "10/7/19", "Invalid headerDate")
XCTAssertEqual(detailViewModel.contentTitle, "Talk page message", "Invalid contentTitle")
XCTAssertEqual(detailViewModel.contentBody, "Message on your talk page", "Invalid contentBody")
}
private func testUserTalkPageMediaWikiMessageActions(detailViewModel: NotificationsCenterDetailViewModel) throws {
XCTAssertNotNil(detailViewModel.primaryAction, "Invalid primaryAction")
XCTAssertEqual(detailViewModel.secondaryActions.count, 2, "Invalid secondaryActions count")
let expectedPrimaryText = "Your talk page"
let expectedPrimaryURL: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Fred_The_Bird")!
let expectedPrimaryIcon = NotificationsCenterIconType.document
let expectedPrimaryDestination = "In app"
let expectedAction: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedPrimaryText, expectedURL: expectedPrimaryURL, expectedIcon: expectedPrimaryIcon, expectedDestinationText: expectedPrimaryDestination, actionToTest: detailViewModel.primaryAction!, actionType: expectedAction)
let expectedText0 = "MediaWiki message delivery's user page"
let expectedURL0: URL? = URL(string: "https://en.wikipedia.org/wiki/User:MediaWiki_message_delivery")!
let expectedIcon0 = NotificationsCenterIconType.person
let expectedDestinationText0 = "On web"
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: detailViewModel.secondaryActions[0], actionType: expectedAction0)
let expectedText1 = "Diff"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=920081372&title=User_talk%253AFred_The_Bird")!
let expectedIcon1 = NotificationsCenterIconType.diff
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: detailViewModel.secondaryActions[1], actionType: expectedAction1)
}
}