8000 Handle canSendPoll capability when creating polls · GetStream/stream-chat-swiftui@f72a87d · GitHub
[go: up one dir, main page]

Skip to content

Commit f72a87d

Browse files
committed
Handle canSendPoll capability when creating polls
1 parent 2ff40f2 commit f72a87d

File tree

4 files changed

+96
-5
lines changed

4 files changed

+96
-5
lines changed

Sources/StreamChatSwiftUI/ChatChannel/Composer/AttachmentPickerView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public struct AttachmentSourcePickerView: View {
170170
)
171171
.accessibilityIdentifier("attachmentPickerCamera")
172172

173-
if viewModel.channelController.channel?.config.pollsEnabled == true && viewModel.messageController == nil {
173+
if viewModel.canSendPoll {
174174
AttachmentPickerButton(
175175
icon: images.attachmentPickerPolls,
176176
pickerType: .polls,

Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,13 @@ open class MessageComposerViewModel: ObservableObject {
183183
public var quotedMessage: Binding<ChatMessage?>?
184184
public var waveformTargetSamples: Int = 100
185185
public internal(set) var pendingAudioRecording: AddedVoiceRecording?
186-
186+
187+
public var canSendPoll: Bool {
188+
channelController.channel?.config.pollsEnabled == true
189+
&& channelController.channel?.canSendPoll == true
190+
&& messageController == nil
191+
}
192+
187193
internal lazy var audioRecorder: AudioRecording = {
188194
let audioRecorder = utils.audioRecorder
189195
audioRecorder.subscribe(self)

StreamChatSwiftUI.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3879,8 +3879,8 @@
38793879
isa = XCRemoteSwiftPackageReference;
38803880
repositoryURL = "https://github.com/GetStream/stream-chat-swift.git";
38813881
requirement = {
3882-
kind = upToNextMajorVersion;
3883-
minimumVersion = 4.76.0;
3882+
branch = develop;
3883+
kind = branch;
38843884
};
38853885
};
38863886
E3A1C01A282BAC66002D1E26 /* XCRemoteSwiftPackageReference "sentry-cocoa" */ = {

StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,92 @@ class MessageComposerViewModel_Tests: StreamChatTestCase {
573573
// Then
574574
XCTAssert(viewModel.mentionedUsers.isEmpty)
575575
}
576-
576+
577+
func test_messageComposerVM_canSendPoll() {
578+
// Given
579+
let channelController = makeChannelController()
580+
let viewModel = MessageComposerViewModel(
581+
channelController: channelController,
582+
messageController: nil
583+
)
584+
585+
// When
586+
let channelConfig = ChannelConfig(pollsEnabled: true)
587+
channelController.channel_mock = .mock(
588+
cid: .unique,
589+
config: channelConfig,
590+
ownCapabilities: [.sendPoll]
591+
)
592+
593+
// Then
594+
XCTAssertTrue(viewModel.canSendPoll)
595+
}
596+
597+
func test_messageComposerVM_canSendPoll_whenDoesNotHaveCapability() {
598+
// Given
599+
let channelController = makeChannelController()
600+
let viewModel = MessageComposerViewModel(
601+
channelController: channelController,
602+
messageController: nil
603+
)
604+
605+
// When
606+
let channelConfig = ChannelConfig(pollsEnabled: true)
607+
channelController.channel_mock = .mock(
608+
cid: .unique,
609+
config: channelConfig,
610+
ownCapabilities: [.banChannelMembers]
611+
)
612+
613+
// Then
614+
XCTAssertFalse(viewModel.canSendPoll)
615+
}
616+
617+
func test_messageComposerVM_canSendPoll_whenNotEnabled() {
618+
// Given
619+
let channelController = makeChannelController()
620+
let viewModel = MessageComposerViewModel(
621+
channelController: channelController,
622+
messageController: nil
623+
)
624+
625+
// When
626+
let channelConfig = ChannelConfig(pollsEnabled: false)
627+
channelController.channel_mock = .mock(
628+
cid: .unique,
629+
config: channelConfig,
630+
ownCapabilities: [.sendPoll]
631+
)
632+
633+
// Then
634+
XCTAssertFalse(viewModel.canSendPoll)
635+
}
636+
637+
func test_messageComposerVM_canSendPoll_whenInsideThread() {
638+
// Given
639+
let channelController = makeChannelController()
640+
let messageController = ChatMessageControllerSUI_Mock.mock(
641+
chatClient: chatClient,
642+
cid: .unique,
643+
messageId: .unique
644+
)
645+
let viewModel = MessageComposerViewModel(
646+
channelController: channelController,
647+
messageController: messageController
648+
)
649+
650+
// When
651+
let channelConfig = ChannelConfig(pollsEnabled: true)
652+
channelController.channel_mock = .mock(
653+
cid: .unique,
654+
config: channelConfig,
655+
ownCapabilities: [.sendPoll]
656+
)
657+
658+
// Then
659+
XCTAssertFalse(viewModel.canSendPoll)
660+
}
661+
577662
func test_addedAsset_extraData() {
578663
// Given
579664
let image = UIImage(systemName: "person")!

0 commit comments

Comments
 (0)
0