@@ -7,12 +7,11 @@ import io.ably.lib.realtime.ChannelStateListener
77import io.ably.lib.realtime.CompletionListener
88import io.ably.lib.transport.ConnectionManager
99import io.ably.lib.types.*
10- import io.mockk.every
11- import io.mockk.mockk
12- import io.mockk.slot
13- import io.mockk.verify
10+ import io.mockk.*
1411import kotlinx.coroutines.test.runTest
12+ import org.junit.After
1513import org.junit.Assert.*
14+ import org.junit.Before
1615import org.junit.Test
1716import kotlin.test.assertFailsWith
1817
@@ -21,13 +20,10 @@ class HelpersTest {
2120 // sendAsync
2221 @Test
2322 fun testSendAsyncShouldQueueAccordingToClientOptions () = runTest {
24- val adapter = mockk< ObjectsAdapter >(relaxed = true )
25- val connManager = mockk< ConnectionManager >(relaxed = true )
23+ val adapter = getMockObjectsAdapter( )
24+ val connManager = adapter.connectionManager
2625 val clientOptions = ClientOptions ().apply { queueMessages = false }
2726
28- every { adapter.connection } returns mockk(relaxed = true ) {
29- setPrivateField(" connectionManager" , connManager)
30- }
3127 every { adapter.clientOptions } returns clientOptions
3228
3329 every { connManager.send(any(), any(), any()) } answers {
@@ -46,13 +42,10 @@ class HelpersTest {
4642
4743 @Test
4844 fun testSendAsyncErrorPropagatesAblyException () = runTest {
49- val adapter = mockk< ObjectsAdapter >(relaxed = true )
50- val connManager = mockk< ConnectionManager >(relaxed = true )
45+ val adapter = getMockObjectsAdapter( )
46+ val connManager = adapter.connectionManager
5147 val clientOptions = ClientOptions ()
5248
53- every { adapter.connection } returns mockk(relaxed = true ) {
54- setPrivateField(" connectionManager" , connManager)
55- }
5649 every { adapter.clientOptions } returns clientOptions
5750
5851 every { connManager.send(any(), any(), any()) } answers {
@@ -69,13 +62,10 @@ class HelpersTest {
6962
7063 @Test
7164 fun testSendAsyncThrowsWhenConnectionManagerThrows () = runTest {
72- val adapter = mockk< ObjectsAdapter >(relaxed = true )
73- val connManager = mockk< ConnectionManager >(relaxed = true )
65+ val adapter = getMockObjectsAdapter( )
66+ val connManager = adapter.connectionManager
7467 val clientOptions = ClientOptions ()
7568
76- every { adapter.connection } returns mockk(relaxed = true ) {
77- setPrivateField(" connectionManager" , connManager)
78- }
7969 every { adapter.clientOptions } returns clientOptions
8070
8171 every { connManager.send(any(), any(), any()) } throws RuntimeException (" send failed hard" )
@@ -251,25 +241,25 @@ class HelpersTest {
251241 verify(exactly = 1 ) { channel.once(any()) }
252242 }
253243
254- @Test
255- fun testEnsureAttachedAttachingButReceivesNonAttachedEmitsError () = runTest {
256- val adapter = mockk<ObjectsAdapter >(relaxed = true )
257- val channel = mockk<Channel >(relaxed = true )
258- every { adapter.getChannel(" ch" ) } returns channel
259- channel.state = ChannelState .attaching
260- every { channel.once(any()) } answers {
261- val listener = firstArg<ChannelStateListener >()
262- val stateChange = mockk<ChannelStateListener .ChannelStateChange >(relaxed = true ) {
263- setPrivateField(" current" , ChannelState .suspended)
264- setPrivateField(" reason" , clientError(" Not attached" ).errorInfo)
265- }
266- listener.onChannelStateChanged(stateChange)
267- }
268- val ex = assertFailsWith<AblyException > { adapter.ensureAttached(" ch" ) }
269- assertEquals(ErrorCode .ChannelStateError .code, ex.errorInfo.code)
270- assertTrue(ex.errorInfo.message.contains(" Not attached" ))
271- verify(exactly = 1 ) { channel.once(any()) }
272- }
244+ @Test
245+ fun testEnsureAttachedAttachingButReceivesNonAttachedEmitsError () = runTest {
246+ val adapter = mockk<ObjectsAdapter >(relaxed = true )
247+ val channel = mockk<Channel >(relaxed = true )
248+ every { adapter.getChannel(" ch" ) } returns channel
249+ channel.state = ChannelState .attaching
250+ every { channel.once(any()) } answers {
251+ val listener = firstArg<ChannelStateListener >()
252+ val stateChange = mockk<ChannelStateListener .ChannelStateChange >(relaxed = true ) {
253+ setPrivateField(" current" , ChannelState .suspended)
254+ setPrivateField(" reason" , clientError(" Not attached" ).errorInfo)
255+ }
256+ listener.onChannelStateChanged(stateChange)
257+ }
258+ val ex = assertFailsWith<AblyException > { adapter.ensureAttached(" ch" ) }
259+ assertEquals(ErrorCode .ChannelStateError .code, ex.errorInfo.code)
260+ assertTrue(ex.errorInfo.message.contains(" Not attached" ))
261+ verify(exactly = 1 ) { channel.once(any()) }
262+ }
273263
274264 @Test
275265 fun testEnsureAttachedThrowsForInvalidState () = runTest {
@@ -350,11 +340,8 @@ class HelpersTest {
350340 // throwIfUnpublishableState
351341 @Test
352342 fun testThrowIfUnpublishableStateInactiveConnection () {
353- val adapter = mockk<ObjectsAdapter >(relaxed = true )
354- val connManager = mockk<ConnectionManager >(relaxed = true )
355- every { adapter.connection } returns mockk(relaxed = true ) {
356- setPrivateField(" connectionManager" , connManager)
357- }
343+ val adapter = getMockObjectsAdapter()
344+ val connManager = adapter.connectionManager
358345 every { connManager.isActive } returns false
359346 every { connManager.stateErrorInfo } returns serverError(" not active" ).errorInfo
360347
@@ -365,11 +352,8 @@ class HelpersTest {
365352
366353 @Test
367354 fun testThrowIfUnpublishableStateChannelFailed () {
368- val adapter = mockk<ObjectsAdapter >(relaxed = true )
369- val connManager = mockk<ConnectionManager >(relaxed = true )
370- every { adapter.connection } returns mockk(relaxed = true ) {
371- setPrivateField(" connectionManager" , connManager)
372- }
355+ val adapter = getMockObjectsAdapter()
356+ val connManager = adapter.connectionManager
373357 every { connManager.isActive } returns true
374358 val channel = mockk<Channel >(relaxed = true )
375359 every { adapter.getChannel(" ch" ) } returns channel
0 commit comments