Skip to content

Commit ed6830a

Browse files
committed
Test cases updated
1 parent 7f8391e commit ed6830a

File tree

3 files changed

+496
-58
lines changed

3 files changed

+496
-58
lines changed

auth0/src/test/java/com/auth0/android/authentication/storage/CredentialsManagerTest.kt

Lines changed: 224 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ public class CredentialsManagerTest {
432432
"token", "type",
433433
Date(accessTokenExpiry), "scope"
434434
)
435-
Mockito.`when`(storage.retrieveString("audience")).thenReturn(gson.toJson(apiCredentials))
435+
Mockito.`when`(storage.retrieveString("audience::scope")).thenReturn(gson.toJson(apiCredentials))
436436
manager.getApiCredentials("audience", "scope", callback = apiCredentialsCallback)
437437
verify(apiCredentialsCallback).onSuccess(apiCredentialsCaptor.capture())
438438
val retrievedCredentials = apiCredentialsCaptor.firstValue
@@ -457,7 +457,7 @@ public class CredentialsManagerTest {
457457
@Test
458458
public fun shouldRenewApiCredentialsIfThereIsNoExistingApiCredentials() {
459459
verifyNoMoreInteractions(client)
460-
Mockito.`when`(storage.retrieveString("audience")).thenReturn(null)
460+
Mockito.`when`(storage.retrieveString("audience::newScope")).thenReturn(null)
461461
Mockito.`when`(storage.retrieveString("com.auth0.refresh_token")).thenReturn("refreshToken")
462462
Mockito.`when`(
463463
client.renewAuth("refreshToken", "audience", "newScope")
@@ -481,7 +481,7 @@ public class CredentialsManagerTest {
481481
verify(storage).store("com.auth0.id_token", renewedCredentials.idToken)
482482
// RefreshToken should not be replaced
483483
verify(storage).store("com.auth0.refresh_token", "refreshToken")
484-
verify(storage).store("audience", gson.toJson(renewedCredentials.toAPICredentials()))
484+
verify(storage).store("audience::newScope", gson.toJson(renewedCredentials.toAPICredentials()))
485485
// Verify the returned credentials are the latest
486486
val newAPiCredentials = apiCredentialsCaptor.firstValue
487487
MatcherAssert.assertThat(newAPiCredentials, Is.`is`(Matchers.notNullValue()))
@@ -499,7 +499,7 @@ public class CredentialsManagerTest {
499499
"token", "type",
500500
Date(accessTokenExpiry), "scope"
501501
)
502-
Mockito.`when`(storage.retrieveString("audience")).thenReturn(gson.toJson(apiCredentials))
502+
Mockito.`when`(storage.retrieveString("audience::scope")).thenReturn(gson.toJson(apiCredentials))
503503
Mockito.`when`(storage.retrieveString("com.auth0.refresh_token")).thenReturn("refreshToken")
504504
Mockito.`when`(
505505
client.renewAuth("refreshToken", "audience", "scope")
@@ -523,7 +523,7 @@ public class CredentialsManagerTest {
523523
verify(storage).store("com.auth0.id_token", renewedCredentials.idToken)
524524
// RefreshToken should not be replaced
525525
verify(storage).store("com.auth0.refresh_token", "refreshToken")
526-
verify(storage).store("audience", gson.toJson(renewedCredentials.toAPICredentials()))
526+
verify(storage).store("audience::scope", gson.toJson(renewedCredentials.toAPICredentials()))
527527
// Verify the returned credentials are the latest
528528
val newAPiCredentials = apiCredentialsCaptor.firstValue
529529
MatcherAssert.assertThat(newAPiCredentials, Is.`is`(Matchers.notNullValue()))
@@ -541,7 +541,7 @@ public class CredentialsManagerTest {
541541
"token", "type",
542542
Date(accessTokenExpiry), "scope"
543543
)
544-
Mockito.`when`(storage.retrieveString("audience")).thenReturn(gson.toJson(apiCredentials))
544+
Mockito.`when`(storage.retrieveString("audience::scope")).thenReturn(gson.toJson(apiCredentials))
545545
Mockito.`when`(storage.retrieveString("com.auth0.refresh_token")).thenReturn("refreshToken")
546546
Mockito.`when`(
547547
client.renewAuth("refreshToken", "audience", "scope")
@@ -565,7 +565,7 @@ public class CredentialsManagerTest {
565565
verify(storage).store("com.auth0.id_token", renewedCredentials.idToken)
566566
// RefreshToken should not be replaced
567567
verify(storage).store("com.auth0.refresh_token", "refreshToken")
568-
verify(storage).store("audience", gson.toJson(renewedCredentials.toAPICredentials()))
568+
verify(storage).store("audience::scope", gson.toJson(renewedCredentials.toAPICredentials()))
569569
// Verify the returned credentials are the latest
570570
val newAPiCredentials = apiCredentialsCaptor.firstValue
571571
MatcherAssert.assertThat(newAPiCredentials, Is.`is`(Matchers.notNullValue()))
@@ -575,55 +575,13 @@ public class CredentialsManagerTest {
575575
MatcherAssert.assertThat(newAPiCredentials.scope, Is.`is`("scope"))
576576
}
577577

578-
@Test
579-
public fun shouldRenewApiCredentialsIfSavedScopeIsDifferentFromRequiredScope() {
580-
verifyNoMoreInteractions(client)
581-
val accessTokenExpiry = CredentialsMock.ONE_HOUR_AHEAD_MS
582-
val apiCredentials = ApiCredentialsMock.create(
583-
"token", "type",
584-
Date(accessTokenExpiry), "scope"
585-
)
586-
Mockito.`when`(storage.retrieveString("audience")).thenReturn(gson.toJson(apiCredentials))
587-
Mockito.`when`(storage.retrieveString("com.auth0.refresh_token")).thenReturn("refreshToken")
588-
Mockito.`when`(
589-
client.renewAuth("refreshToken", "audience", "newScope")
590-
).thenReturn(request)
591-
val newDate = Date(CredentialsMock.ONE_HOUR_AHEAD_MS + ONE_HOUR_SECONDS * 1000)
592-
val jwtMock = mock<Jwt>()
593-
Mockito.`when`(jwtMock.expiresAt).thenReturn(newDate)
594-
Mockito.`when`(jwtDecoder.decode("newId")).thenReturn(jwtMock)
595-
596-
// Trigger success
597-
val newRefresh: String? = null
598-
val renewedCredentials =
599-
Credentials("newId", "newAccess", "newType", newRefresh, newDate, "newScope")
600-
Mockito.`when`(request.execute()).thenReturn(renewedCredentials)
601-
manager.getApiCredentials("audience", "newScope", callback = apiCredentialsCallback)
602-
verify(apiCredentialsCallback).onSuccess(
603-
apiCredentialsCaptor.capture()
604-
)
605-
606-
// Verify the credentials are property stored
607-
verify(storage).store("com.auth0.id_token", renewedCredentials.idToken)
608-
// RefreshToken should not be replaced
609-
verify(storage).store("com.auth0.refresh_token", "refreshToken")
610-
verify(storage).store("audience", gson.toJson(renewedCredentials.toAPICredentials()))
611-
// Verify the returned credentials are the latest
612-
val newAPiCredentials = apiCredentialsCaptor.firstValue
613-
MatcherAssert.assertThat(newAPiCredentials, Is.`is`(Matchers.notNullValue()))
614-
MatcherAssert.assertThat(newAPiCredentials.accessToken, Is.`is`("newAccess"))
615-
MatcherAssert.assertThat(newAPiCredentials.type, Is.`is`("newType"))
616-
MatcherAssert.assertThat(newAPiCredentials.expiresAt, Is.`is`(newDate))
617-
MatcherAssert.assertThat(newAPiCredentials.scope, Is.`is`("newScope"))
618-
}
619-
620578
@Test
621579
public fun shouldReplaceTheExistingRefreshTokenIfaNewOneIsObtainedInApiCredentials() {
622580
verifyNoMoreInteractions(client)
623581
Mockito.`when`(storage.retrieveString("audience")).thenReturn(null)
624582
Mockito.`when`(storage.retrieveString("com.auth0.refresh_token")).thenReturn("refreshToken")
625583
Mockito.`when`(
626-
client.renewAuth("refreshToken", "audience", "newScope")
584+
client.renewAuth("refreshToken", "audience","newScope")
627585
).thenReturn(request)
628586
val newDate = Date(CredentialsMock.ONE_HOUR_AHEAD_MS + ONE_HOUR_SECONDS * 1000)
629587
val jwtMock = mock<Jwt>()
@@ -643,7 +601,7 @@ public class CredentialsManagerTest {
643601
verify(storage).store("com.auth0.id_token", renewedCredentials.idToken)
644602
// RefreshToken should be replaced
645603
verify(storage).store("com.auth0.refresh_token", "newRefreshToken")
646-
verify(storage).store("audience", gson.toJson(renewedCredentials.toAPICredentials()))
604+
verify(storage).store("audience::newScope", gson.toJson(renewedCredentials.toAPICredentials()))
647605
// Verify the returned credentials are the latest
648606
val newAPiCredentials = apiCredentialsCaptor.firstValue
649607
MatcherAssert.assertThat(newAPiCredentials, Is.`is`(Matchers.notNullValue()))
@@ -692,7 +650,7 @@ public class CredentialsManagerTest {
692650
"token", "type",
693651
Date(accessTokenExpiry), "scope"
694652
)
695-
Mockito.`when`(storage.retrieveString("audience")).thenReturn(gson.toJson(apiCredentials))
653+
Mockito.`when`(storage.retrieveString("audience::scope")).thenReturn(gson.toJson(apiCredentials))
696654
val retrievedCredentials = manager.awaitApiCredentials("audience", "scope")
697655
MatcherAssert.assertThat(retrievedCredentials, Is.`is`(Matchers.notNullValue()))
698656
Assert.assertEquals(retrievedCredentials.accessToken, apiCredentials.accessToken)
@@ -1535,6 +1493,220 @@ public class CredentialsManagerTest {
15351493
verifyNoMoreInteractions(storage)
15361494
}
15371495

1496+
@Test
1497+
public fun shouldSaveApiCredentialsWithScopeAsKey() {
1498+
val expirationTime = CredentialsMock.ONE_HOUR_AHEAD_MS
1499+
val apiCredentials = APICredentials(
1500+
accessToken = "apiAccessToken",
1501+
type = "type",
1502+
expiresAt = Date(expirationTime),
1503+
scope = "read:data write:data"
1504+
)
1505+
1506+
manager.saveApiCredentials(apiCredentials, "audience", "read:data write:data")
1507+
1508+
verify(storage).store(
1509+
eq("audience::read:data::write:data"),
1510+
eq(gson.toJson(apiCredentials))
1511+
)
1512+
}
1513+
1514+
@Test
1515+
public fun shouldSaveApiCredentialsWithoutScopeUsingOnlyAudience() {
1516+
val expirationTime = CredentialsMock.ONE_HOUR_AHEAD_MS
1517+
val apiCredentials = APICredentials(
1518+
accessToken = "apiAccessToken",
1519+
type = "type",
1520+
expiresAt = Date(expirationTime),
1521+
scope = "read:data"
1522+
)
1523+
1524+
manager.saveApiCredentials(apiCredentials, "audience", null)
1525+
1526+
verify(storage).store(eq("audience"), eq(gson.toJson(apiCredentials)))
1527+
}
1528+
1529+
@Test
1530+
public fun shouldSaveApiCredentialsWithDifferentScopesUnderDifferentKeys() {
1531+
val expirationTime = CredentialsMock.ONE_HOUR_AHEAD_MS
1532+
val apiCredentials1 = APICredentials(
1533+
accessToken = "apiAccessToken1",
1534+
type = "type",
1535+
expiresAt = Date(expirationTime),
1536+
scope = "read:data"
1537+
)
1538+
val apiCredentials2 = APICredentials(
1539+
accessToken = "apiAccessToken2",
1540+
type = "type",
1541+
expiresAt = Date(expirationTime),
1542+
scope = "write:data"
1543+
)
1544+
1545+
manager.saveApiCredentials(apiCredentials1, "audience", "read:data")
1546+
manager.saveApiCredentials(apiCredentials2, "audience", "write:data")
1547+
1548+
verify(storage).store(eq("audience::read:data"), eq(gson.toJson(apiCredentials1)))
1549+
verify(storage).store(eq("audience::write:data"), eq(gson.toJson(apiCredentials2)))
1550+
}
1551+
1552+
@Test
1553+
public fun shouldClearApiCredentialsWithScope() {
1554+
manager.clearApiCredentials("audience", "read:data write:data")
1555+
verify(storage).remove("audience::read:data::write:data")
1556+
}
1557+
1558+
@Test
1559+
public fun shouldClearApiCredentialsWithoutScopeUsingAudienceOnly() {
1560+
manager.clearApiCredentials("audience", null)
1561+
verify(storage).remove("audience")
1562+
}
1563+
1564+
@Test
1565+
public fun shouldClearApiCredentialsWithDefaultNullScope() {
1566+
manager.clearApiCredentials("audience")
1567+
verify(storage).remove("audience")
1568+
}
1569+
1570+
@Test
1571+
public fun shouldGetApiCredentialsWithSpecificScope() {
1572+
verifyNoMoreInteractions(client)
1573+
val accessTokenExpiry = CredentialsMock.ONE_HOUR_AHEAD_MS
1574+
val apiCredentials = ApiCredentialsMock.create(
1575+
accessToken = "apiToken",
1576+
expiresAt = Date(accessTokenExpiry),
1577+
scope = "read:data"
1578+
)
1579+
Mockito.`when`(storage.retrieveString("audience::read:data"))
1580+
.thenReturn(gson.toJson(apiCredentials))
1581+
1582+
manager.getApiCredentials("audience", "read:data", callback = apiCredentialsCallback)
1583+
1584+
verify(apiCredentialsCallback).onSuccess(apiCredentialsCaptor.capture())
1585+
val retrievedCredentials = apiCredentialsCaptor.firstValue
1586+
MatcherAssert.assertThat(retrievedCredentials.accessToken, Is.`is`("apiToken"))
1587+
MatcherAssert.assertThat(retrievedCredentials.scope, Is.`is`("read:data"))
1588+
}
1589+
1590+
@Test
1591+
public fun shouldGetApiCredentialsWithoutScopeFromAudienceKey() {
1592+
verifyNoMoreInteractions(client)
1593+
val accessTokenExpiry = CredentialsMock.ONE_HOUR_AHEAD_MS
1594+
val apiCredentials = ApiCredentialsMock.create(
1595+
accessToken = "apiToken",
1596+
expiresAt = Date(accessTokenExpiry),
1597+
scope = "openid"
1598+
)
1599+
Mockito.`when`(storage.retrieveString("audience"))
1600+
.thenReturn(gson.toJson(apiCredentials))
1601+
1602+
manager.getApiCredentials("audience", null, callback = apiCredentialsCallback)
1603+
1604+
verify(apiCredentialsCallback).onSuccess(apiCredentialsCaptor.capture())
1605+
val retrievedCredentials = apiCredentialsCaptor.firstValue
1606+
MatcherAssert.assertThat(retrievedCredentials.accessToken, Is.`is`("apiToken"))
1607+
}
1608+
1609+
@Test
1610+
public fun shouldRenewApiCredentialsWhenRequestingScopeButStoredUnderDifferentScopeKey() {
1611+
verifyNoMoreInteractions(client)
1612+
val accessTokenExpiry = CredentialsMock.ONE_HOUR_AHEAD_MS
1613+
Mockito.`when`(storage.retrieveString("audience::write:data"))
1614+
.thenReturn(null)
1615+
Mockito.`when`(storage.retrieveString("com.auth0.refresh_token"))
1616+
.thenReturn("refreshToken")
1617+
Mockito.`when`(client.renewAuth("refreshToken", "audience", "write:data"))
1618+
.thenReturn(request)
1619+
1620+
val newDate = Date(CredentialsMock.ONE_HOUR_AHEAD_MS + ONE_HOUR_SECONDS * 1000)
1621+
val jwtMock = mock<Jwt>()
1622+
Mockito.`when`(jwtMock.expiresAt).thenReturn(newDate)
1623+
Mockito.`when`(jwtDecoder.decode("newId")).thenReturn(jwtMock)
1624+
1625+
val renewedCredentials = Credentials(
1626+
"newId", "newAccess", "newType", null, newDate, "write:data"
1627+
)
1628+
Mockito.`when`(request.execute()).thenReturn(renewedCredentials)
1629+
1630+
manager.getApiCredentials("audience", "write:data", callback = apiCredentialsCallback)
1631+
1632+
verify(apiCredentialsCallback).onSuccess(apiCredentialsCaptor.capture())
1633+
val newApiCredentials = apiCredentialsCaptor.firstValue
1634+
MatcherAssert.assertThat(newApiCredentials.scope, Is.`is`("write:data"))
1635+
MatcherAssert.assertThat(newApiCredentials.accessToken, Is.`is`("newAccess"))
1636+
verify(storage).store(eq("audience::write:data"), any<String>())
1637+
}
1638+
1639+
@Test
1640+
public fun shouldStoreApiCredentialsUnderCorrectKeyWhenRenewing() {
1641+
verifyNoMoreInteractions(client)
1642+
Mockito.`when`(storage.retrieveString("audience::custom:scope"))
1643+
.thenReturn(null)
1644+
Mockito.`when`(storage.retrieveString("com.auth0.refresh_token"))
1645+
.thenReturn("refreshToken")
1646+
Mockito.`when`(client.renewAuth("refreshToken", "audience", "custom:scope"))
1647+
.thenReturn(request)
1648+
1649+
val newDate = Date(CredentialsMock.ONE_HOUR_AHEAD_MS + ONE_HOUR_SECONDS * 1000)
1650+
val jwtMock = mock<Jwt>()
1651+
Mockito.`when`(jwtMock.expiresAt).thenReturn(newDate)
1652+
Mockito.`when`(jwtDecoder.decode("newId")).thenReturn(jwtMock)
1653+
1654+
val renewedCredentials = Credentials(
1655+
"newId", "newAccess", "newType", null, newDate, "custom:scope"
1656+
)
1657+
Mockito.`when`(request.execute()).thenReturn(renewedCredentials)
1658+
1659+
manager.getApiCredentials("audience", "custom:scope", callback = apiCredentialsCallback)
1660+
1661+
verify(storage).store(eq("audience::custom:scope"), any<String>())
1662+
}
1663+
1664+
@Test
1665+
@ExperimentalCoroutinesApi
1666+
public fun shouldAwaitApiCredentialsWithSpecificScope(): Unit = runTest {
1667+
verifyNoMoreInteractions(client)
1668+
val accessTokenExpiry = CredentialsMock.ONE_HOUR_AHEAD_MS
1669+
val apiCredentials = ApiCredentialsMock.create(
1670+
accessToken = "apiToken",
1671+
expiresAt = Date(accessTokenExpiry),
1672+
scope = "read:data"
1673+
)
1674+
Mockito.`when`(storage.retrieveString("audience::read:data"))
1675+
.thenReturn(gson.toJson(apiCredentials))
1676+
1677+
val result = manager.awaitApiCredentials("audience", "read:data")
1678+
1679+
MatcherAssert.assertThat(result.accessToken, Is.`is`("apiToken"))
1680+
MatcherAssert.assertThat(result.scope, Is.`is`("read:data"))
1681+
}
1682+
1683+
@Test
1684+
@ExperimentalCoroutinesApi
1685+
public fun shouldAwaitAndRenewApiCredentialsWithScope(): Unit = runTest {
1686+
verifyNoMoreInteractions(client)
1687+
Mockito.`when`(storage.retrieveString("audience::write:data"))
1688+
.thenReturn(null)
1689+
Mockito.`when`(storage.retrieveString("com.auth0.refresh_token"))
1690+
.thenReturn("refreshToken")
1691+
Mockito.`when`(client.renewAuth("refreshToken", "audience", "write:data"))
1692+
.thenReturn(request)
1693+
1694+
val newDate = Date(CredentialsMock.ONE_HOUR_AHEAD_MS + ONE_HOUR_SECONDS * 1000)
1695+
val jwtMock = mock<Jwt>()
1696+
Mockito.`when`(jwtMock.expiresAt).thenReturn(newDate)
1697+
Mockito.`when`(jwtDecoder.decode("newId")).thenReturn(jwtMock)
1698+
1699+
val renewedCredentials = Credentials(
1700+
"newId", "newAccess", "newType", null, newDate, "write:data"
1701+
)
1702+
Mockito.`when`(request.execute()).thenReturn(renewedCredentials)
1703+
1704+
val result = manager.awaitApiCredentials("audience", "write:data")
1705+
1706+
MatcherAssert.assertThat(result.scope, Is.`is`("write:data"))
1707+
MatcherAssert.assertThat(result.accessToken, Is.`is`("newAccess"))
1708+
}
1709+
15381710
@Test
15391711
public fun shouldHaveCredentialsWhenTokenHasNotExpired() {
15401712
val expirationTime = CredentialsMock.ONE_HOUR_AHEAD_MS

0 commit comments

Comments
 (0)