Unit tests

This commit is contained in:
Aleksandrs Proskurins 2022-10-21 14:21:06 +03:00
parent d5a3af2d8a
commit 45f26dfca6

View file

@ -55,9 +55,13 @@ class UserOtherSessionsViewModelTests: XCTestCase {
let sut = createSUT(sessionInfos: sessionInfos, filter: .inactive)
let expectedItems = sessionInfos.filter { !$0.isActive }.asViewData()
let expectedState = UserOtherSessionsViewState(bindings: UserOtherSessionsBindings(filter: .inactive),
let bindings = UserOtherSessionsBindings(filter: .inactive, isEditModeEnabled: false)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: "Title",
sections: [.sessionItems(header: inactiveSectionHeader, items: expectedItems)])
items: expectedItems,
header: inactiveSectionHeader,
emptyItemsTitle: VectorL10n.userOtherSessionNoInactiveSessions,
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
@ -67,9 +71,13 @@ class UserOtherSessionsViewModelTests: XCTestCase {
let sut = createSUT(sessionInfos: sessionInfos, filter: .all)
let expectedItems = sessionInfos.filter { !$0.isCurrent }.asViewData()
let expectedState = UserOtherSessionsViewState(bindings: UserOtherSessionsBindings(filter: .all),
let bindings = UserOtherSessionsBindings(filter: .all, isEditModeEnabled: false)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: "Title",
sections: [.sessionItems(header: allSectionHeader, items: expectedItems)])
items: expectedItems,
header: allSectionHeader,
emptyItemsTitle: "",
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
@ -79,9 +87,13 @@ class UserOtherSessionsViewModelTests: XCTestCase {
let sut = createSUT(sessionInfos: sessionInfos, filter: .unverified)
let expectedItems = sessionInfos.filter { !$0.isCurrent }.asViewData()
let expectedState = UserOtherSessionsViewState(bindings: UserOtherSessionsBindings(filter: .unverified),
let bindings = UserOtherSessionsBindings(filter: .unverified, isEditModeEnabled: false)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: "Title",
sections: [.sessionItems(header: unverifiedSectionHeader, items: expectedItems)])
items: expectedItems,
header: unverifiedSectionHeader,
emptyItemsTitle: VectorL10n.userOtherSessionNoUnverifiedSessions,
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
@ -91,9 +103,13 @@ class UserOtherSessionsViewModelTests: XCTestCase {
let sut = createSUT(sessionInfos: sessionInfos, filter: .verified)
let expectedItems = sessionInfos.filter { !$0.isCurrent }.asViewData()
let expectedState = UserOtherSessionsViewState(bindings: UserOtherSessionsBindings(filter: .verified),
let bindings = UserOtherSessionsBindings(filter: .verified, isEditModeEnabled: false)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: "Title",
sections: [.sessionItems(header: verifiedSectionHeader, items: expectedItems)])
items: expectedItems,
header: verifiedSectionHeader,
emptyItemsTitle: VectorL10n.userOtherSessionNoVerifiedSessions,
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
@ -101,10 +117,13 @@ class UserOtherSessionsViewModelTests: XCTestCase {
let sessionInfos = [createUserSessionInfo(sessionId: "session 1", isVerified: false),
createUserSessionInfo(sessionId: "session 2", isVerified: false)]
let sut = createSUT(sessionInfos: sessionInfos, filter: .verified)
let expectedState = UserOtherSessionsViewState(bindings: UserOtherSessionsBindings(filter: .verified),
let bindings = UserOtherSessionsBindings(filter: .verified, isEditModeEnabled: false)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: "Title",
sections: [.emptySessionItems(header: verifiedSectionHeader, title: VectorL10n.userOtherSessionNoVerifiedSessions)])
items: [],
header: verifiedSectionHeader,
emptyItemsTitle: VectorL10n.userOtherSessionNoVerifiedSessions,
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
@ -112,10 +131,13 @@ class UserOtherSessionsViewModelTests: XCTestCase {
let sessionInfos = [createUserSessionInfo(sessionId: "session 1", isVerified: true),
createUserSessionInfo(sessionId: "session 2", isVerified: true)]
let sut = createSUT(sessionInfos: sessionInfos, filter: .unverified)
let expectedState = UserOtherSessionsViewState(bindings: UserOtherSessionsBindings(filter: .unverified),
let bindings = UserOtherSessionsBindings(filter: .unverified, isEditModeEnabled: false)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: "Title",
sections: [.emptySessionItems(header: unverifiedSectionHeader, title: VectorL10n.userOtherSessionNoUnverifiedSessions)])
items: [],
header: unverifiedSectionHeader,
emptyItemsTitle: VectorL10n.userOtherSessionNoUnverifiedSessions,
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
@ -123,13 +145,134 @@ class UserOtherSessionsViewModelTests: XCTestCase {
let sessionInfos = [createUserSessionInfo(sessionId: "session 1", isActive: true),
createUserSessionInfo(sessionId: "session 2", isActive: true)]
let sut = createSUT(sessionInfos: sessionInfos, filter: .inactive)
let expectedState = UserOtherSessionsViewState(bindings: UserOtherSessionsBindings(filter: .inactive),
let bindings = UserOtherSessionsBindings(filter: .inactive, isEditModeEnabled: false)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: "Title",
sections: [.emptySessionItems(header: inactiveSectionHeader, title: VectorL10n.userOtherSessionNoInactiveSessions)])
items: [],
header: inactiveSectionHeader,
emptyItemsTitle: VectorL10n.userOtherSessionNoInactiveSessions,
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
func test_whenEditModeEnabledAndAllItemsSelected_viewStateIsCorrect() {
let sessionInfos = [createUserSessionInfo(sessionId: "session 1"),
createUserSessionInfo(sessionId: "session 2")]
let sut = createSUT(sessionInfos: sessionInfos, filter: .all)
toggleEditMode(for: sut, value: true)
sut.process(viewAction: .userOtherSessionSelected(sessionId: "session 1"))
sut.process(viewAction: .userOtherSessionSelected(sessionId: "session 2"))
let expectedItems = sessionInfos.map { UserSessionListItemViewDataFactory().create(from: $0, isSelected: true) }
let bindings = UserOtherSessionsBindings(filter: .all, isEditModeEnabled: true)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: VectorL10n.userOtherSessionSelectedCount("2"),
items: expectedItems,
header: allSectionHeader,
emptyItemsTitle: "",
allItemsSelected: true)
XCTAssertEqual(sut.state, expectedState)
}
func test_whenEditModeEnabledAndItemSelectedAndDeselected_viewStateIsCorrect() {
let sessionInfos = [createUserSessionInfo(sessionId: "session 1"),
createUserSessionInfo(sessionId: "session 2")]
let sut = createSUT(sessionInfos: sessionInfos, filter: .all)
toggleEditMode(for: sut, value: true)
sut.process(viewAction: .userOtherSessionSelected(sessionId: "session 1"))
sut.process(viewAction: .userOtherSessionSelected(sessionId: "session 1"))
let expectedItems = sessionInfos.map { UserSessionListItemViewDataFactory().create(from: $0, isSelected: false) }
let bindings = UserOtherSessionsBindings(filter: .all, isEditModeEnabled: true)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: VectorL10n.userOtherSessionSelectedCount("0"),
items: expectedItems,
header: allSectionHeader,
emptyItemsTitle: "",
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
func test_whenEditModeEnabledAndNotAllItemsSelected_viewStateIsCorrect() {
let sessionInfos = [createUserSessionInfo(sessionId: "session 1"),
createUserSessionInfo(sessionId: "session 2")]
let sut = createSUT(sessionInfos: sessionInfos, filter: .all)
toggleEditMode(for: sut, value: true)
sut.process(viewAction: .userOtherSessionSelected(sessionId: "session 2"))
let expectedItems = sessionInfos.map { UserSessionListItemViewDataFactory().create(from: $0, isSelected: $0.id == "session 2") }
let bindings = UserOtherSessionsBindings(filter: .all, isEditModeEnabled: true)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: VectorL10n.userOtherSessionSelectedCount("1"),
items: expectedItems,
header: allSectionHeader,
emptyItemsTitle: "",
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
func test_whenEditModeEnabledAndAllItemsSelectedByButton_viewStateIsCorrect() {
let sessionInfos = [createUserSessionInfo(sessionId: "session 1"),
createUserSessionInfo(sessionId: "session 2")]
let sut = createSUT(sessionInfos: sessionInfos, filter: .all)
toggleEditMode(for: sut, value: true)
sut.process(viewAction: .toggleAllSelection)
let expectedItems = sessionInfos.map { UserSessionListItemViewDataFactory().create(from: $0, isSelected: true) }
let bindings = UserOtherSessionsBindings(filter: .all, isEditModeEnabled: true)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: VectorL10n.userOtherSessionSelectedCount("2"),
items: expectedItems,
header: allSectionHeader,
emptyItemsTitle: "",
allItemsSelected: true)
XCTAssertEqual(sut.state, expectedState)
}
func test_whenEditModeEnabledAndAllItemsDeselectedByButton_viewStateIsCorrect() {
let sessionInfos = [createUserSessionInfo(sessionId: "session 1"),
createUserSessionInfo(sessionId: "session 2")]
let sut = createSUT(sessionInfos: sessionInfos, filter: .all)
toggleEditMode(for: sut, value: true)
sut.process(viewAction: .toggleAllSelection)
sut.process(viewAction: .toggleAllSelection)
let expectedItems = sessionInfos.map { UserSessionListItemViewDataFactory().create(from: $0, isSelected: false) }
let bindings = UserOtherSessionsBindings(filter: .all, isEditModeEnabled: true)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: VectorL10n.userOtherSessionSelectedCount("0"),
items: expectedItems,
header: allSectionHeader,
emptyItemsTitle: "",
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
func test_whenEditModeEnabledDisabledAndEnabled_viewStateIsCorrect() {
let sessionInfos = [createUserSessionInfo(sessionId: "session 1"),
createUserSessionInfo(sessionId: "session 2")]
let sut = createSUT(sessionInfos: sessionInfos, filter: .all)
toggleEditMode(for: sut, value: true)
sut.process(viewAction: .editModeWasToggled)
sut.process(viewAction: .userOtherSessionSelected(sessionId: "session 1"))
sut.process(viewAction: .userOtherSessionSelected(sessionId: "session 2"))
toggleEditMode(for: sut, value: false)
toggleEditMode(for: sut, value: true)
let expectedItems = sessionInfos.map { UserSessionListItemViewDataFactory().create(from: $0, isSelected: false) }
let bindings = UserOtherSessionsBindings(filter: .all, isEditModeEnabled: true)
let expectedState = UserOtherSessionsViewState(bindings: bindings,
title: VectorL10n.userOtherSessionSelectedCount("0"),
items: expectedItems,
header: allSectionHeader,
emptyItemsTitle: "",
allItemsSelected: false)
XCTAssertEqual(sut.state, expectedState)
}
private func toggleEditMode(for model: UserOtherSessionsViewModel, value: Bool) {
model.context.isEditModeEnabled = value
model.process(viewAction: .editModeWasToggled)
}
private func createSUT(sessionInfos: [UserSessionInfo],
filter: UserOtherSessionsFilter,
title: String = "Title") -> UserOtherSessionsViewModel {