refactor on accessibility of SessionButton.Info, and fix some unit tests on disappearing messages config

pull/941/head
ryanzhao 1 year ago
parent 71f96058f1
commit 32d7dd2ea6

@ -105,8 +105,10 @@ class ThreadDisappearingMessagesSettingsViewModel: SessionTableViewModel<ThreadD
style: .bordered,
title: "DISAPPERING_MESSAGES_SAVE_TITLE".localized(),
isEnabled: true,
accessibilityIdentifier: "Set button",
accessibilityLabel: "Set button",
accessibility: Accessibility(
identifier: "Set button",
label: "Set button"
),
minWidth: 110,
onTap: {
self?.saveChanges()
@ -515,8 +517,10 @@ class ThreadDisappearingMessagesSettingsViewModel: SessionTableViewModel<ThreadD
threadId: threadId,
threadVariant: threadVariant
)
// Contacts & legacy closed groups need to update the SessionUtil
}
// Contacts & legacy closed groups need to update the SessionUtil
dependencies.storage.writeAsync { db in
switch threadVariant {
case .contact:
try SessionUtil

@ -398,8 +398,8 @@ class SessionTableViewController<NavItemId: Equatable, Section: SessionTableSect
self?.footerButton.setStyle(buttonInfo.style)
self?.footerButton.isEnabled = buttonInfo.isEnabled
self?.footerButton.set(.width, greaterThanOrEqualTo: buttonInfo.minWidth)
self?.footerButton.accessibilityIdentifier = buttonInfo.accessibilityIdentifier
self?.footerButton.accessibilityLabel = buttonInfo.accessibilityLabel
self?.footerButton.accessibilityIdentifier = buttonInfo.accessibility?.identifier
self?.footerButton.accessibilityLabel = buttonInfo.accessibility?.label
}
self?.onFooterTap = buttonInfo?.onTap

@ -200,6 +200,7 @@ class ThreadDisappearingMessagesSettingsViewModelSpec: QuickSpec {
id: ThreadDisappearingMessagesSettingsViewModel.Item(
title: "DISAPPERING_MESSAGES_TYPE_AFTER_SEND_TITLE".localized()
),
position: .bottom,
title: "DISAPPERING_MESSAGES_TYPE_AFTER_SEND_TITLE".localized(),
subtitle: "DISAPPERING_MESSAGES_TYPE_AFTER_SEND_DESCRIPTION".localized(),
rightAccessory: .radio(
@ -216,7 +217,7 @@ class ThreadDisappearingMessagesSettingsViewModelSpec: QuickSpec {
let title: String = (DisappearingMessagesConfiguration.validDurationsSeconds(.disappearAfterSend).last?
.formatted(format: .long))
.defaulting(to: "")
expect(viewModel.tableData.first?.elements.last)
expect(viewModel.tableData.last?.elements.last)
.to(
equal(
SessionCell.Info(
@ -233,72 +234,99 @@ class ThreadDisappearingMessagesSettingsViewModelSpec: QuickSpec {
)
)
)
}
it("has no footer button") {
var footerButtonInfo: SessionButton.Info?
context("change to another setting and change back") {
// Change to another setting
viewModel.tableData.first?.elements.first?.onTap?()
// Change back
viewModel.tableData.first?.elements.last?.onTap?()
it("shows the previous setting with no set button") {
expect(viewModel.tableData.first?.elements.last)
.to(
equal(
SessionCell.Info(
id: ThreadDisappearingMessagesSettingsViewModel.Item(
title: "DISAPPERING_MESSAGES_TYPE_AFTER_SEND_TITLE".localized()
),
title: "DISAPPERING_MESSAGES_TYPE_AFTER_SEND_TITLE".localized(),
subtitle: "DISAPPERING_MESSAGES_TYPE_AFTER_SEND_DESCRIPTION".localized(),
rightAccessory: .radio(
isSelected: { true }
),
accessibility: Accessibility(
identifier: "Disappear after send option",
label: "Disappear after send option"
)
)
cancellables.append(
viewModel.footerButtonInfo
.receiveOnMain(immediately: true)
.sink(
receiveCompletion: { _ in },
receiveValue: { info in footerButtonInfo = info }
)
)
expect(footerButtonInfo).to(beNil())
}
it("change to another setting and change back") {
// Test config: Disappear After Send - 2 weeks
let config: DisappearingMessagesConfiguration = DisappearingMessagesConfiguration
.defaultWith("TestId")
.with(
isEnabled: true,
durationSeconds: DisappearingMessagesConfiguration.validDurationsSeconds(.disappearAfterSend).last,
type: .disappearAfterSend
)
mockStorage.write { db in
_ = try config.saved(db)
}
viewModel = ThreadDisappearingMessagesSettingsViewModel(
dependencies: dependencies,
threadId: "TestId",
threadVariant: .contact,
currentUserIsClosedGroupMember: nil,
currentUserIsClosedGroupAdmin: nil,
config: config
)
cancellables.append(
viewModel.observableTableData
.receiveOnMain(immediately: true)
.sink(
receiveCompletion: { _ in },
receiveValue: { viewModel.updateTableData($0.0) }
)
)
// Change to another setting
viewModel.tableData.first?.elements.first?.onTap?()
// Change back
viewModel.tableData.first?.elements.last?.onTap?()
expect(viewModel.tableData.first?.elements.last)
.to(
equal(
SessionCell.Info(
id: ThreadDisappearingMessagesSettingsViewModel.Item(
title: "DISAPPERING_MESSAGES_TYPE_AFTER_SEND_TITLE".localized()
),
position: .bottom,
title: "DISAPPERING_MESSAGES_TYPE_AFTER_SEND_TITLE".localized(),
subtitle: "DISAPPERING_MESSAGES_TYPE_AFTER_SEND_DESCRIPTION".localized(),
rightAccessory: .radio(
isSelected: { true }
),
accessibility: Accessibility(
identifier: "Disappear after send option",
label: "Disappear after send option"
)
)
let title: String = (DisappearingMessagesConfiguration.validDurationsSeconds(.disappearAfterSend).last?
.formatted(format: .long))
.defaulting(to: "")
expect(viewModel.tableData.first?.elements.last)
.to(
equal(
SessionCell.Info(
id: ThreadDisappearingMessagesSettingsViewModel.Item(title: title),
position: .bottom,
title: title,
rightAccessory: .radio(
isSelected: { true }
),
accessibility: Accessibility(
identifier: "Time option",
label: "Time option"
)
)
)
)
let title: String = (DisappearingMessagesConfiguration.validDurationsSeconds(.disappearAfterSend).last?
.formatted(format: .long))
.defaulting(to: "")
expect(viewModel.tableData.last?.elements.last)
.to(
equal(
SessionCell.Info(
id: ThreadDisappearingMessagesSettingsViewModel.Item(title: title),
position: .bottom,
title: title,
rightAccessory: .radio(
isSelected: { true }
),
accessibility: Accessibility(
identifier: "Time option",
label: "Time option"
)
)
var footerButtonInfo: SessionButton.Info?
cancellables.append(
viewModel.footerButtonInfo
.receiveOnMain(immediately: true)
.sink(
receiveCompletion: { _ in },
receiveValue: { info in footerButtonInfo = info }
)
)
expect(footerButtonInfo).to(beNil())
}
}
}
it("has no footer button") {
)
var footerButtonInfo: SessionButton.Info?
cancellables.append(
@ -337,7 +365,10 @@ class ThreadDisappearingMessagesSettingsViewModelSpec: QuickSpec {
style: .bordered,
title: "DISAPPERING_MESSAGES_SAVE_TITLE".localized(),
isEnabled: true,
accessibilityIdentifier: "Set button",
accessibility: Accessibility(
identifier: "Set button",
label: "Set button"
),
minWidth: 110,
onTap: {}
)
@ -381,7 +412,7 @@ class ThreadDisappearingMessagesSettingsViewModelSpec: QuickSpec {
)
expect(updatedConfig?.durationSeconds)
.toEventually(
equal(DisappearingMessagesConfiguration.validDurationsSeconds(.disappearAfterSend).last ?? -1),
equal(DisappearingMessagesConfiguration.DefaultDuration.disappearAfterSend.seconds),
timeout: .milliseconds(100)
)
expect(updatedConfig?.type)

@ -21,8 +21,7 @@ public final class SessionButton: UIButton {
public let style: Style
public let title: String
public let isEnabled: Bool
public let accessibilityIdentifier: String?
public let accessibilityLabel: String?
public let accessibility: Accessibility?
public let minWidth: CGFloat
public let onTap: () -> ()
@ -30,16 +29,14 @@ public final class SessionButton: UIButton {
style: Style,
title: String,
isEnabled: Bool,
accessibilityIdentifier: String? = nil,
accessibilityLabel: String? = nil,
accessibility: Accessibility? = nil,
minWidth: CGFloat = 0,
onTap: @escaping () -> ()
) {
self.style = style
self.title = title
self.isEnabled = isEnabled
self.accessibilityIdentifier = accessibilityIdentifier
self.accessibilityLabel = accessibilityLabel
self.accessibility = accessibility
self.onTap = onTap
self.minWidth = minWidth
}
@ -49,8 +46,7 @@ public final class SessionButton: UIButton {
lhs.style == rhs.style &&
lhs.title == rhs.title &&
lhs.isEnabled == rhs.isEnabled &&
lhs.accessibilityIdentifier == rhs.accessibilityIdentifier &&
lhs.accessibilityLabel == rhs.accessibilityLabel &&
lhs.accessibility == rhs.accessibility &&
lhs.minWidth == rhs.minWidth
)
}

@ -9,5 +9,5 @@ public final class Features {
public static let useSharedUtilForUserConfig: Bool = true // TODO: Base this off a timestamp
// public static let useNewDisappearingMessagesConfig: Bool = Date().timeIntervalSince1970 > 1671062400 // 15/12/2022
public static let useNewDisappearingMessagesConfig: Bool = false
public static let useNewDisappearingMessagesConfig: Bool = true
}

Loading…
Cancel
Save