44package software.aws.toolkits.jetbrains.core.credentials
55
66
7+ import com.intellij.notification.Notifications
78import com.intellij.openapi.project.Project
89import com.intellij.testFramework.ApplicationExtension
10+ import com.intellij.util.messages.MessageBus
911import io.mockk.every
1012import io.mockk.just
13+ import io.mockk.mockk
1114import io.mockk.mockkObject
1215import io.mockk.mockkStatic
1316import io.mockk.runs
1417import io.mockk.verify
15- import io.mockk.every
16- import io.mockk.mockk
17- import io.mockk.clearAllMocks
18- import org.junit.jupiter.api.Assertions.assertFalse
1918import org.junit.jupiter.api.Assertions.assertEquals
2019import org.junit.jupiter.api.BeforeEach
2120import org.junit.jupiter.api.Test
2221import org.junit.jupiter.api.TestInstance
2322import org.junit.jupiter.api.extension.ExtendWith
24- import org.mockito.kotlin.doThrow
25- import org.mockito.kotlin.given
26- import org.mockito.kotlin.mock
27- import org.mockito.kotlin.reset
28- import org.mockito.kotlin.whenever
2923import software.aws.toolkits.jetbrains.core.credentials.sso.DeviceAuthorizationGrantToken
3024import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenAuthState
3125import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProvider
@@ -45,11 +39,22 @@ class ToolkitAuthManagerTest {
4539
4640 @BeforeEach
4741 fun setUp () {
48- project = mock ()
49- tokenProvider = mock ()
42+ project = mockk ()
43+ tokenProvider = mockk ()
5044 reauthCallCount = 0
5145
46+ // Mock MessageBus and Notifications
47+ val messageBus = mockk<MessageBus >(relaxed = true )
48+ val notificationsPublisher = mockk<Notifications >(relaxed = true )
5249
50+ every { project.messageBus } returns messageBus
51+ every { messageBus.syncPublisher(Notifications .TOPIC ) } returns notificationsPublisher
52+ every { notificationsPublisher.notify(any()) } just runs
53+
54+ // Mock BearerTokenProvider methods
55+ every { tokenProvider.id } returns " mockProviderId"
56+
57+ // Mock static method
5358 mockkObject(BearerTokenProviderListener )
5459 mockkStatic(" software.aws.toolkits.jetbrains.utils.NotificationUtilsKt" )
5560 every {
@@ -61,10 +66,8 @@ class ToolkitAuthManagerTest {
6166
6267 @Test
6368 fun `test NEEDS_REFRESH state with network error - first occurrence` () {
64- whenever(tokenProvider.state()).thenReturn(BearerTokenAuthState .NEEDS_REFRESH )
65- given(tokenProvider.resolveToken()).willAnswer {
66- throw UnknownHostException (" Unable to execute HTTP request" )
67- }
69+ every { tokenProvider.state() } returns BearerTokenAuthState .NEEDS_REFRESH
70+ every { tokenProvider.resolveToken() } throws UnknownHostException (" Unable to execute HTTP request" )
6871
6972 try {
7073 maybeReauthProviderIfNeeded(
@@ -87,10 +90,8 @@ class ToolkitAuthManagerTest {
8790
8891 @Test
8992 fun `test NEEDS_REFRESH state with network error - subsequent occurrence` () {
90- whenever(tokenProvider.state()).thenReturn(BearerTokenAuthState .NEEDS_REFRESH )
91- given(tokenProvider.resolveToken()).willAnswer {
92- throw UnknownHostException (" Unable to execute HTTP request" )
93- }
93+ every { tokenProvider.state() } returns BearerTokenAuthState .NEEDS_REFRESH
94+ every { tokenProvider.resolveToken() } throws UnknownHostException (" Unable to execute HTTP request" )
9495
9596 // First call to set the internal flag
9697 try {
@@ -126,12 +127,10 @@ class ToolkitAuthManagerTest {
126127
127128 @Test
128129 fun `test successful refresh clears notification flag` () {
129- whenever( tokenProvider.state()).thenReturn( BearerTokenAuthState .NEEDS_REFRESH )
130+ every { tokenProvider.state() } returns BearerTokenAuthState .NEEDS_REFRESH
130131
131132 // First trigger a network error
132- given(tokenProvider.resolveToken()).willAnswer {
133- throw UnknownHostException (" Unable to execute HTTP request" )
134- }
133+ every { tokenProvider.resolveToken() } throws UnknownHostException (" Unable to execute HTTP request" )
135134
136135 try {
137136 maybeReauthProviderIfNeeded(
@@ -143,31 +142,24 @@ class ToolkitAuthManagerTest {
143142 // ignore
144143 }
145144
146- reset(tokenProvider)
147-
148145 // Now simulate successful refresh
149- whenever(tokenProvider.state()).thenReturn(BearerTokenAuthState .NEEDS_REFRESH )
150- whenever(tokenProvider.resolveToken()).thenReturn(
151- DeviceAuthorizationGrantToken (
152- startUrl = " https://example.com" ,
153- region = " us-east-1" ,
154- accessToken = " testAccessToken" ,
155- refreshToken = " testRefreshToken" ,
156- expiresAt = Instant .now().plus(1 , ChronoUnit .HOURS ),
157- )
146+ every { tokenProvider.state() } returns BearerTokenAuthState .NEEDS_REFRESH
147+ every { tokenProvider.resolveToken() } returns DeviceAuthorizationGrantToken (
148+ startUrl = " https://example.com" ,
149+ region = " us-east-1" ,
150+ accessToken = " testAccessToken" ,
151+ refreshToken = " testRefreshToken" ,
152+ expiresAt = Instant .now().plus(1 , ChronoUnit .HOURS ),
158153 )
159154 maybeReauthProviderIfNeeded(
160155 project,
161156 ReauthSource .TOOLKIT ,
162157 tokenProvider
163158 ) { _ -> reauthCallCount++ }
164159
165- reset(tokenProvider)
166160 // Now trigger another network error - should show notification again
167- whenever(tokenProvider.state()).thenReturn(BearerTokenAuthState .NEEDS_REFRESH )
168- given(tokenProvider.resolveToken()).willAnswer {
169- throw UnknownHostException (" Unable to execute HTTP request" )
170- }
161+ every { tokenProvider.state() } returns BearerTokenAuthState .NEEDS_REFRESH
162+ every { tokenProvider.resolveToken() } throws UnknownHostException (" Unable to execute HTTP request" )
171163 try {
172164 maybeReauthProviderIfNeeded(
173165 project,
0 commit comments