diff --git a/Assets/Talo Game Services/Talo/Runtime/Utils/SessionManager.cs b/Assets/Talo Game Services/Talo/Runtime/Utils/SessionManager.cs index 5b59c3a..bc63a8c 100644 --- a/Assets/Talo Game Services/Talo/Runtime/Utils/SessionManager.cs +++ b/Assets/Talo Game Services/Talo/Runtime/Utils/SessionManager.cs @@ -42,21 +42,22 @@ private void SaveSession(string sessionToken, string refreshToken) public async Task ClearSession(bool resetSocket = true) { - if (!Talo.HasIdentity()) - { - return false; - } + var hadIdentity = Talo.HasIdentity(); _sessionToken = null; Talo.CurrentAlias = null; - PlayerAlias.DeleteOfflineAlias(); + + if (hadIdentity) + { + PlayerAlias.DeleteOfflineAlias(); + } PlayerPrefs.DeleteKey("TaloRefreshToken"); Talo.Events.ClearQueue(); Talo.Continuity.ClearRequests(); - if (resetSocket) + if (resetSocket && hadIdentity) { try { @@ -68,7 +69,7 @@ public async Task ClearSession(bool resetSocket = true) } } - return true; + return hadIdentity; } public string GetSessionToken() diff --git a/Assets/Talo Game Services/Talo/Tests/SessionManager.meta b/Assets/Talo Game Services/Talo/Tests/SessionManager.meta new file mode 100644 index 0000000..0089562 --- /dev/null +++ b/Assets/Talo Game Services/Talo/Tests/SessionManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 76889c6ae82f4481d9a66ab1d43213ca +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Talo Game Services/Talo/Tests/SessionManager/ClearSessionTest.cs b/Assets/Talo Game Services/Talo/Tests/SessionManager/ClearSessionTest.cs new file mode 100644 index 0000000..9dada0c --- /dev/null +++ b/Assets/Talo Game Services/Talo/Tests/SessionManager/ClearSessionTest.cs @@ -0,0 +1,68 @@ +using System.Collections; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +namespace TaloGameServices.Test +{ + internal class ClearSessionTest + { + [OneTimeSetUp] + public void Setup() + { + var tm = new GameObject().AddComponent(); + tm.settings = ScriptableObject.CreateInstance(); + tm.settings.autoConnectSocket = false; + tm.settings.autoStartSession = false; + + Talo.CurrentAlias = null; + PlayerPrefs.DeleteAll(); + } + + [UnityTest] + public IEnumerator ClearSession_WithoutIdentity_DeletesStoredToken() + { + Talo.CurrentAlias = null; + PlayerPrefs.SetString("TaloRefreshToken", "stale-token"); + + // TestMode makes HasIdentity() always return true, which would mask + // the no-identity path this test exercises + TestModeFlag.IsEnabled = false; + try + { + var task = Talo.PlayerAuth.SessionManager.ClearSession(false); + while (!task.IsCompleted) + { + yield return null; + } + + Assert.IsFalse(task.Result); + Assert.IsEmpty(PlayerPrefs.GetString("TaloRefreshToken")); + } + finally + { + TestModeFlag.IsEnabled = true; + } + } + + [UnityTest] + public IEnumerator ClearSession_WithIdentity_ReturnsTrue() + { + Talo.CurrentAlias = new PlayerAlias() { + player = new Player() { + id = "uuid" + } + }; + PlayerPrefs.SetString("TaloRefreshToken", "some-token"); + + var task = Talo.PlayerAuth.SessionManager.ClearSession(false); + while (!task.IsCompleted) + { + yield return null; + } + + Assert.IsTrue(task.Result); + Assert.IsEmpty(PlayerPrefs.GetString("TaloRefreshToken")); + } + } +} diff --git a/Assets/Talo Game Services/Talo/Tests/SessionManager/ClearSessionTest.cs.meta b/Assets/Talo Game Services/Talo/Tests/SessionManager/ClearSessionTest.cs.meta new file mode 100644 index 0000000..9acc3a3 --- /dev/null +++ b/Assets/Talo Game Services/Talo/Tests/SessionManager/ClearSessionTest.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 38f2590b27f9047cca88a3eb81c2c470 \ No newline at end of file