deep-linking-sample/Apps/Wikipedia/WikipediaUnitTests/Code/Notifications Tests/NotificationsCenterCellViewModelUserTalkMessageTests.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

406 lines
28 KiB
Swift

import XCTest
@testable import Wikipedia
class NotificationsCenterCellViewModelUserTalkMessageTests: NotificationsCenterViewModelTests {
override var dataFileName: String {
return "notifications-userTalkMessages"
}
func testUserTalkPageGenericMessage() throws {
let notification = try fetchManagedObject(identifier: "1")
guard let cellViewModel = NotificationsCenterCellViewModel(notification: notification, languageLinkController: languageLinkController, isEditing: false, configuration: configuration) else {
throw TestError.failureConvertingManagedObjectToViewModel
}
try testUserTalkPageGenericMessageText(cellViewModel: cellViewModel)
try testUserTalkPageGenericMessageIcons(cellViewModel: cellViewModel)
try testUserTalkPageGenericMessageActions(cellViewModel: cellViewModel)
}
func testUserTalkPageGenericAnonymousMessage() throws {
let notification = try fetchManagedObject(identifier: "2")
guard let cellViewModel = NotificationsCenterCellViewModel(notification: notification, languageLinkController: languageLinkController, isEditing: false, configuration: configuration) else {
throw TestError.failureConvertingManagedObjectToViewModel
}
try testUserTalkPageGenericAnonymousMessageText(cellViewModel: cellViewModel)
try testUserTalkPageGenericAnonymousMessageIcons(cellViewModel: cellViewModel)
try testUserTalkPageGenericAnonymousMessageActions(cellViewModel: cellViewModel)
}
func testUserTalkPageSpecificMessage() throws {
let notification = try fetchManagedObject(identifier: "3")
guard let cellViewModel = NotificationsCenterCellViewModel(notification: notification, languageLinkController: languageLinkController, isEditing: false, configuration: configuration) else {
throw TestError.failureConvertingManagedObjectToViewModel
}
try testUserTalkPageSpecificMessageText(cellViewModel: cellViewModel)
try testUserTalkPageSpecificMessageIcons(cellViewModel: cellViewModel)
try testUserTalkPageSpecificMessageActions(cellViewModel: cellViewModel)
}
func testUserTalkPageSpecificAnonymousMessage() throws {
let notification = try fetchManagedObject(identifier: "4")
guard let cellViewModel = NotificationsCenterCellViewModel(notification: notification, languageLinkController: languageLinkController, isEditing: false, configuration: configuration) else {
throw TestError.failureConvertingManagedObjectToViewModel
}
try testUserTalkPageSpecificAnonymousMessageText(cellViewModel: cellViewModel)
try testUserTalkPageSpecificAnonymousMessageIcons(cellViewModel: cellViewModel)
try testUserTalkPageSpecificAnonymousMessageActions(cellViewModel: cellViewModel)
}
func testUserTalkPageSpecificTruncatedMessage() throws {
let notification = try fetchManagedObject(identifier: "5")
guard let cellViewModel = NotificationsCenterCellViewModel(notification: notification, languageLinkController: languageLinkController, isEditing: false, configuration: configuration) else {
throw TestError.failureConvertingManagedObjectToViewModel
}
try testUserTalkPageSpecificTruncatedMessageText(cellViewModel: cellViewModel)
try testUserTalkPageSpecificTruncatedMessageIcons(cellViewModel: cellViewModel)
try testUserTalkPageSpecificTruncatedMessageActions(cellViewModel: cellViewModel)
}
func testUserTalkPageMediaWikiMessage() throws {
let notification = try fetchManagedObject(identifier: "6")
guard let cellViewModel = NotificationsCenterCellViewModel(notification: notification, languageLinkController: languageLinkController, isEditing: false, configuration: configuration) else {
throw TestError.failureConvertingManagedObjectToViewModel
}
try testUserTalkPageMediaWikiMessageText(cellViewModel: cellViewModel)
try testUserTalkPageMediaWikiMessageIcons(cellViewModel: cellViewModel)
try testUserTalkPageMediaWikiMessageActions(cellViewModel: cellViewModel)
}
private func testUserTalkPageGenericMessageText(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.headerText, "Message on your talk page", "Invalid headerText")
XCTAssertEqual(cellViewModel.subheaderText, "From Jack The Cat", "Invalid subheaderText")
XCTAssertEqual(cellViewModel.bodyText, nil)
XCTAssertEqual(cellViewModel.footerText, "User talk:Fred The Bird", "Invalid footerText")
XCTAssertEqual(cellViewModel.dateText, "4/11/19", "Invalid dateText")
XCTAssertEqual(cellViewModel.projectText, "EN", "Invalid projectText")
}
private func testUserTalkPageGenericMessageIcons(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertNil(cellViewModel.projectIconName, "Invalid projectIconName")
XCTAssertEqual(cellViewModel.footerIconType, .personFill, "Invalid footerIconType")
}
private func testUserTalkPageGenericMessageActions(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.sheetActions.count, 5, "Invalid sheetActionsCount")
let expectedText0 = "Mark as unread"
let expectedURL0: URL? = nil
let expectedIcon0: NotificationsCenterIconType? = nil
let expectedDestinationText0: String? = nil
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .markUnread
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: cellViewModel.sheetActions[0], isMarkAsRead: true, actionType: expectedAction0)
let expectedText1 = "Your talk page"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Fred_The_Bird")!
let expectedIcon1: NotificationsCenterIconType = .document
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: cellViewModel.sheetActions[1], actionType: expectedAction1)
let expectedText2 = "Jack The Cat\'s user page"
let expectedURL2: URL? = URL(string: "https://en.wikipedia.org/wiki/User:Jack_The_Cat")!
let expectedIcon2: NotificationsCenterIconType = .person
let expectedDestinationText2 = "On web"
let expectedAction2: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText2, expectedURL: expectedURL2, expectedIcon: expectedIcon2, expectedDestinationText: expectedDestinationText2, actionToTest: cellViewModel.sheetActions[2], actionType: expectedAction2)
let expectedText3 = "Diff"
let expectedURL3: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=892051241&title=User_talk%253AFred_The_Bird")!
let expectedIcon3: NotificationsCenterIconType = .diff
let expectedDestinationText3 = "In app"
let expectedAction3: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText3, expectedURL: expectedURL3, expectedIcon: expectedIcon3, expectedDestinationText: expectedDestinationText3, actionToTest: cellViewModel.sheetActions[3], actionType: expectedAction3)
let expectedText4 = "Notification settings"
let expectedURL4: URL? = nil
let expectedIcon4: NotificationsCenterIconType? = nil
let expectedDestinationText4: String? = nil
let expectedAction4: NotificationsCenterActionData.LoggingLabel = .settings
try testActions(expectedText: expectedText4, expectedURL: expectedURL4, expectedIcon: expectedIcon4, expectedDestinationText: expectedDestinationText4, actionToTest: cellViewModel.sheetActions[4], isNotificationSettings: true, actionType: expectedAction4)
}
private func testUserTalkPageGenericAnonymousMessageText(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.headerText, "Message on your talk page", "Invalid headerText")
XCTAssertEqual(cellViewModel.subheaderText, "From 47.184.10.84", "Invalid subheaderText")
XCTAssertEqual(cellViewModel.bodyText, nil)
XCTAssertEqual(cellViewModel.footerText, "User talk:Fred The Bird", "Invalid footerText")
XCTAssertEqual(cellViewModel.dateText, "5/30/19", "Invalid dateText")
XCTAssertEqual(cellViewModel.projectText, "EN", "Invalid projectText")
}
private func testUserTalkPageGenericAnonymousMessageIcons(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertNil(cellViewModel.projectIconName, "Invalid projectIconName")
XCTAssertEqual(cellViewModel.footerIconType, .personFill, "Invalid footerIconType")
}
private func testUserTalkPageGenericAnonymousMessageActions(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.sheetActions.count, 5, "Invalid sheetActionsCount")
let expectedText0 = "Mark as unread"
let expectedURL0: URL? = nil
let expectedIcon0: NotificationsCenterIconType? = nil
let expectedDestinationText0: String? = nil
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .markUnread
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: cellViewModel.sheetActions[0], isMarkAsRead: true, actionType: expectedAction0)
let expectedText1 = "Your talk page"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Fred_The_Bird")!
let expectedIcon1: NotificationsCenterIconType = .document
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: cellViewModel.sheetActions[1], actionType: expectedAction1)
let expectedText2 = "47.184.10.84\'s user page"
let expectedURL2: URL? = URL(string: "https://en.wikipedia.org/wiki/User:47.184.10.84")!
let expectedIcon2: NotificationsCenterIconType = .person
let expectedDestinationText2 = "On web"
let expectedAction2: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText2, expectedURL: expectedURL2, expectedIcon: expectedIcon2, expectedDestinationText: expectedDestinationText2, actionToTest: cellViewModel.sheetActions[2], actionType: expectedAction2)
let expectedText3 = "Diff"
let expectedURL3: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=899561783&title=User_talk%253AFred_The_Bird")!
let expectedIcon3: NotificationsCenterIconType = .diff
let expectedDestinationText3 = "In app"
let expectedAction3: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText3, expectedURL: expectedURL3, expectedIcon: expectedIcon3, expectedDestinationText: expectedDestinationText3, actionToTest: cellViewModel.sheetActions[3], actionType: expectedAction3)
let expectedText4 = "Notification settings"
let expectedURL4: URL? = nil
let expectedIcon4: NotificationsCenterIconType? = nil
let expectedDestinationText4: String? = nil
let expectedAction4: NotificationsCenterActionData.LoggingLabel = .settings
try testActions(expectedText: expectedText4, expectedURL: expectedURL4, expectedIcon: expectedIcon4, expectedDestinationText: expectedDestinationText4, actionToTest: cellViewModel.sheetActions[4], isNotificationSettings: true, actionType: expectedAction4)
}
private func testUserTalkPageSpecificMessageText(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.headerText, "Hello", "Invalid headerText")
XCTAssertEqual(cellViewModel.subheaderText, "From Jack The Cat", "Invalid subheaderText")
XCTAssertEqual(cellViewModel.bodyText, "Reply text")
XCTAssertEqual(cellViewModel.footerText, "User talk:Fred The Bird", "Invalid footerText")
XCTAssertEqual(cellViewModel.dateText, "4/11/19", "Invalid dateText")
XCTAssertEqual(cellViewModel.projectText, "EN", "Invalid projectText")
}
private func testUserTalkPageSpecificMessageIcons(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertNil(cellViewModel.projectIconName, "Invalid projectIconName")
XCTAssertEqual(cellViewModel.footerIconType, .personFill, "Invalid footerIconType")
}
private func testUserTalkPageSpecificMessageActions(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.sheetActions.count, 5, "Invalid sheetActionsCount")
let expectedText0 = "Mark as unread"
let expectedURL0: URL? = nil
let expectedIcon0: NotificationsCenterIconType? = nil
let expectedDestinationText0: String? = nil
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .markUnread
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: cellViewModel.sheetActions[0], isMarkAsRead: true, actionType: expectedAction0)
let expectedText1 = "Your talk page"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Fred_The_Bird#Hello")!
let expectedIcon1: NotificationsCenterIconType = .document
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: cellViewModel.sheetActions[1], actionType: expectedAction1)
let expectedText2 = "Jack The Cat\'s user page"
let expectedURL2: URL? = URL(string: "https://en.wikipedia.org/wiki/User:Jack_The_Cat")!
let expectedIcon2: NotificationsCenterIconType = .person
let expectedDestinationText2 = "On web"
let expectedAction2: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText2, expectedURL: expectedURL2, expectedIcon: expectedIcon2, expectedDestinationText: expectedDestinationText2, actionToTest: cellViewModel.sheetActions[2], actionType: expectedAction2)
let expectedText3 = "Diff"
let expectedURL3: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=892043155&title=User_talk%253AFred_The_Bird")!
let expectedIcon3: NotificationsCenterIconType = .diff
let expectedDestinationText3 = "In app"
let expectedAction3: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText3, expectedURL: expectedURL3, expectedIcon: expectedIcon3, expectedDestinationText: expectedDestinationText3, actionToTest: cellViewModel.sheetActions[3], actionType: expectedAction3)
let expectedText4 = "Notification settings"
let expectedURL4: URL? = nil
let expectedIcon4: NotificationsCenterIconType? = nil
let expectedDestinationText4: String? = nil
let expectedAction4: NotificationsCenterActionData.LoggingLabel = .settings
try testActions(expectedText: expectedText4, expectedURL: expectedURL4, expectedIcon: expectedIcon4, expectedDestinationText: expectedDestinationText4, actionToTest: cellViewModel.sheetActions[4], isNotificationSettings: true, actionType: expectedAction4)
}
private func testUserTalkPageSpecificAnonymousMessageText(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.headerText, "Section Title", "Invalid headerText")
XCTAssertEqual(cellViewModel.subheaderText, "From 47.184.10.84", "Invalid subheaderText")
XCTAssertEqual(cellViewModel.bodyText, "Reply text")
XCTAssertEqual(cellViewModel.footerText, "User talk:Fred The Bird", "Invalid footerText")
XCTAssertEqual(cellViewModel.dateText, "6/11/19", "Invalid dateText")
XCTAssertEqual(cellViewModel.projectText, "EN", "Invalid projectText")
}
private func testUserTalkPageSpecificAnonymousMessageIcons(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertNil(cellViewModel.projectIconName, "Invalid projectIconName")
XCTAssertEqual(cellViewModel.footerIconType, .personFill, "Invalid footerIconType")
}
private func testUserTalkPageSpecificAnonymousMessageActions(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.sheetActions.count, 5, "Invalid sheetActionsCount")
let expectedText0 = "Mark as unread"
let expectedURL0: URL? = nil
let expectedIcon0: NotificationsCenterIconType? = nil
let expectedDestinationText0: String? = nil
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .markUnread
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: cellViewModel.sheetActions[0], isMarkAsRead: true, actionType: expectedAction0)
let expectedText1 = "Your talk page"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Fred_The_Bird#Section_Title")!
let expectedIcon1: NotificationsCenterIconType = .document
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: cellViewModel.sheetActions[1], actionType: expectedAction1)
let expectedText2 = "47.184.10.84\'s user page"
let expectedURL2: URL? = URL(string: "https://en.wikipedia.org/wiki/User:47.184.10.84")!
let expectedIcon2: NotificationsCenterIconType = .person
let expectedDestinationText2 = "On web"
let expectedAction2: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText2, expectedURL: expectedURL2, expectedIcon: expectedIcon2, expectedDestinationText: expectedDestinationText2, actionToTest: cellViewModel.sheetActions[2], actionType: expectedAction2)
let expectedText3 = "Diff"
let expectedURL3: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=901389754&title=User_talk%253AFred_The_Bird")!
let expectedIcon3: NotificationsCenterIconType = .diff
let expectedDestinationText3 = "In app"
let expectedAction3: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText3, expectedURL: expectedURL3, expectedIcon: expectedIcon3, expectedDestinationText: expectedDestinationText3, actionToTest: cellViewModel.sheetActions[3], actionType: expectedAction3)
let expectedText4 = "Notification settings"
let expectedURL4: URL? = nil
let expectedIcon4: NotificationsCenterIconType? = nil
let expectedDestinationText4: String? = nil
let expectedAction4: NotificationsCenterActionData.LoggingLabel = .settings
try testActions(expectedText: expectedText4, expectedURL: expectedURL4, expectedIcon: expectedIcon4, expectedDestinationText: expectedDestinationText4, actionToTest: cellViewModel.sheetActions[4], isNotificationSettings: true, actionType: expectedAction4)
}
private func testUserTalkPageSpecificTruncatedMessageText(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.headerText, "Section Title", "Invalid headerText")
XCTAssertEqual(cellViewModel.subheaderText, "From Fred The Bird", "Invalid subheaderText")
XCTAssertEqual(cellViewModel.bodyText, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Adipiscing elit ut aliq...")
XCTAssertEqual(cellViewModel.footerText, "User talk:Jack The Cat", "Invalid footerText")
XCTAssertEqual(cellViewModel.dateText, "3/9/22", "Invalid dateText")
XCTAssertEqual(cellViewModel.projectText, "EN", "Invalid projectText")
}
private func testUserTalkPageSpecificTruncatedMessageIcons(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertNil(cellViewModel.projectIconName, "Invalid projectIconName")
XCTAssertEqual(cellViewModel.footerIconType, .personFill, "Invalid footerIconType")
}
private func testUserTalkPageSpecificTruncatedMessageActions(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.sheetActions.count, 5, "Invalid sheetActionsCount")
let expectedText0 = "Mark as unread"
let expectedURL0: URL? = nil
let expectedIcon0: NotificationsCenterIconType? = nil
let expectedDestinationText0: String? = nil
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .markUnread
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedDestinationText0, actionToTest: cellViewModel.sheetActions[0], isMarkAsRead: true, actionType: expectedAction0)
let expectedText1 = "Your talk page"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Jack_The_Cat#Section_Title")!
let expectedIcon1: NotificationsCenterIconType = .document
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: cellViewModel.sheetActions[1], actionType: expectedAction1)
let expectedText2 = "Fred The Bird\'s user page"
let expectedURL2: URL? = URL(string: "https://en.wikipedia.org/wiki/User:Fred_The_Bird")!
let expectedIcon2: NotificationsCenterIconType = .person
let expectedDestinationText2 = "On web"
let expectedAction2: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText2, expectedURL: expectedURL2, expectedIcon: expectedIcon2, expectedDestinationText: expectedDestinationText2, actionToTest: cellViewModel.sheetActions[2], actionType: expectedAction2)
let expectedText3 = "Diff"
let expectedURL3: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=1076152880&title=User_talk%253AJack_The_Cat")!
let expectedIcon3: NotificationsCenterIconType = .diff
let expectedDestinationText3 = "In app"
let expectedAction3: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText3, expectedURL: expectedURL3, expectedIcon: expectedIcon3, expectedDestinationText: expectedDestinationText3, actionToTest: cellViewModel.sheetActions[3], actionType: expectedAction3)
let expectedText4 = "Notification settings"
let expectedURL4: URL? = nil
let expectedIcon4: NotificationsCenterIconType? = nil
let expectedDestinationText4: String? = nil
let expectedAction4: NotificationsCenterActionData.LoggingLabel = .settings
try testActions(expectedText: expectedText4, expectedURL: expectedURL4, expectedIcon: expectedIcon4, expectedDestinationText: expectedDestinationText4, actionToTest: cellViewModel.sheetActions[4], isNotificationSettings: true, actionType: expectedAction4) }
private func testUserTalkPageMediaWikiMessageText(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.headerText, "Message on your talk page", "Invalid headerText")
XCTAssertEqual(cellViewModel.subheaderText, "From MediaWiki message delivery", "Invalid subheaderText")
XCTAssertEqual(cellViewModel.bodyText, nil)
XCTAssertEqual(cellViewModel.footerText, "User talk:Fred The Bird", "Invalid footerText")
XCTAssertEqual(cellViewModel.dateText, "10/7/19", "Invalid dateText")
XCTAssertEqual(cellViewModel.projectText, "EN", "Invalid projectText")
}
private func testUserTalkPageMediaWikiMessageIcons(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertNil(cellViewModel.projectIconName, "Invalid projectIconName")
XCTAssertEqual(cellViewModel.footerIconType, .personFill, "Invalid footerIconType")
}
private func testUserTalkPageMediaWikiMessageActions(cellViewModel: NotificationsCenterCellViewModel) throws {
XCTAssertEqual(cellViewModel.sheetActions.count, 5, "Invalid sheetActionsCount")
let expectedText0 = "Mark as unread"
let expectedURL0: URL? = nil
let expectedIcon0: NotificationsCenterIconType? = nil
let expectedPrimaryDestinationText: String? = nil
let expectedAction0: NotificationsCenterActionData.LoggingLabel = .markUnread
try testActions(expectedText: expectedText0, expectedURL: expectedURL0, expectedIcon: expectedIcon0, expectedDestinationText: expectedPrimaryDestinationText, actionToTest: cellViewModel.sheetActions[0], isMarkAsRead: true, actionType: expectedAction0)
let expectedText1 = "Your talk page"
let expectedURL1: URL? = URL(string: "https://en.wikipedia.org/wiki/User_talk:Fred_The_Bird")!
let expectedIcon1: NotificationsCenterIconType = .document
let expectedDestinationText1 = "In app"
let expectedAction1: NotificationsCenterActionData.LoggingLabel = .userTalk
try testActions(expectedText: expectedText1, expectedURL: expectedURL1, expectedIcon: expectedIcon1, expectedDestinationText: expectedDestinationText1, actionToTest: cellViewModel.sheetActions[1], actionType: expectedAction1)
let expectedText2 = "MediaWiki message delivery\'s user page"
let expectedURL2: URL? = URL(string: "https://en.wikipedia.org/wiki/User:MediaWiki_message_delivery")!
let expectedIcon2: NotificationsCenterIconType = .person
let expectedDestinationText2 = "On web"
let expectedAction2: NotificationsCenterActionData.LoggingLabel = .senderPage
try testActions(expectedText: expectedText2, expectedURL: expectedURL2, expectedIcon: expectedIcon2, expectedDestinationText: expectedDestinationText2, actionToTest: cellViewModel.sheetActions[2], actionType: expectedAction2)
let expectedText3 = "Diff"
let expectedURL3: URL? = URL(string: "https://en.wikipedia.org/w/index.php?oldid=920081372&title=User_talk%253AFred_The_Bird")!
let expectedIcon3: NotificationsCenterIconType = .diff
let expectedDestinationText3 = "In app"
let expectedAction3: NotificationsCenterActionData.LoggingLabel = .diff
try testActions(expectedText: expectedText3, expectedURL: expectedURL3, expectedIcon: expectedIcon3, expectedDestinationText: expectedDestinationText3, actionToTest: cellViewModel.sheetActions[3], actionType: expectedAction3)
let expectedText4 = "Notification settings"
let expectedURL4: URL? = nil
let expectedIcon4: NotificationsCenterIconType? = nil
let expectedDestinationText4: String? = nil
let expectedAction4: NotificationsCenterActionData.LoggingLabel = .settings
try testActions(expectedText: expectedText4, expectedURL: expectedURL4, expectedIcon: expectedIcon4, expectedDestinationText: expectedDestinationText4, actionToTest: cellViewModel.sheetActions[4], isNotificationSettings: true, actionType: expectedAction4)
}
}