63 lines
1.8 KiB
C#
63 lines
1.8 KiB
C#
using System.IO;
|
|
using Xunit;
|
|
using ytLive.Helpers;
|
|
using ytLive.Models;
|
|
|
|
namespace ytLive.Tests;
|
|
|
|
public class TokenStoreTests
|
|
{
|
|
private static string TempPath() =>
|
|
Path.Combine(Path.GetTempPath(), "ytLive_tests", $"{Guid.NewGuid():N}.auth");
|
|
|
|
[Fact]
|
|
public void Save_Load_RoundtripsChannelAndTokens()
|
|
{
|
|
var path = TempPath();
|
|
var channel = new YouTubeChannel
|
|
{
|
|
ChannelId = "UC123",
|
|
DisplayName = "Test Channel",
|
|
ProfileImageUrl = "http://example/thumb.jpg",
|
|
AccessToken = "acc-token",
|
|
RefreshToken = "refresh-token",
|
|
TokenExpiry = DateTime.UtcNow.AddHours(1),
|
|
};
|
|
|
|
TokenStore.Save(channel, path);
|
|
|
|
var loaded = TokenStore.Load(path);
|
|
Assert.NotNull(loaded);
|
|
Assert.Equal("UC123", loaded!.ChannelId);
|
|
Assert.Equal("Test Channel", loaded.DisplayName);
|
|
Assert.Equal("http://example/thumb.jpg", loaded.ProfileImageUrl);
|
|
Assert.Equal("acc-token", loaded.AccessToken);
|
|
Assert.Equal("refresh-token", loaded.RefreshToken);
|
|
Assert.Equal(channel.TokenExpiry, loaded.TokenExpiry);
|
|
}
|
|
|
|
[Fact]
|
|
public void Load_MissingFile_ReturnsNull()
|
|
{
|
|
Assert.Null(TokenStore.Load(TempPath()));
|
|
}
|
|
|
|
[Fact]
|
|
public void Load_CorruptFile_ReturnsNull()
|
|
{
|
|
var path = TempPath();
|
|
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
|
|
File.WriteAllBytes(path, [1, 2, 3, 4, 5]);
|
|
Assert.Null(TokenStore.Load(path));
|
|
}
|
|
|
|
[Fact]
|
|
public void Clear_RemovesSavedToken()
|
|
{
|
|
var path = TempPath();
|
|
TokenStore.Save(new YouTubeChannel { DisplayName = "X" }, path);
|
|
TokenStore.Clear(path);
|
|
Assert.Null(TokenStore.Load(path));
|
|
}
|
|
}
|