Social bar v2: fediverse icons resolved via nodeinfo (with redirect-following), persisted software column, icon colors — 112 tests passing, 0 warnings
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using Xunit;
|
||||
using ytLive.Models;
|
||||
@@ -27,7 +25,7 @@ public class SocialBarTests
|
||||
var socials = new SocialsConfig
|
||||
{
|
||||
BarPosition = SocialBarPosition.Top,
|
||||
BarJustify = SocialBarJustify.Left,
|
||||
BarEnabled = false,
|
||||
};
|
||||
socials.Entries.Add(new SocialEntry
|
||||
{
|
||||
@@ -41,6 +39,13 @@ public class SocialBarTests
|
||||
Handle = "streamer123",
|
||||
ProfileUrl = "https://www.twitch.tv/streamer123",
|
||||
});
|
||||
socials.Entries.Add(new SocialEntry
|
||||
{
|
||||
Service = SocialService.Fediverse,
|
||||
Handle = "@gramps@llamachile.tube",
|
||||
ProfileUrl = "https://llamachile.tube/@gramps",
|
||||
FediverseSoftware = "peertube",
|
||||
});
|
||||
|
||||
using (var store = new LayoutStore(path))
|
||||
{
|
||||
@@ -53,13 +58,16 @@ public class SocialBarTests
|
||||
{
|
||||
var scenes = store.Load();
|
||||
Assert.NotNull(store.Socials);
|
||||
Assert.Equal(2, store.Socials!.Entries.Count);
|
||||
Assert.Equal(3, store.Socials!.Entries.Count);
|
||||
Assert.Equal(SocialService.YouTube, store.Socials.Entries[0].Service);
|
||||
Assert.Equal("mychannel", store.Socials.Entries[0].Handle);
|
||||
Assert.Equal("https://www.youtube.com/@mychannel", store.Socials.Entries[0].ProfileUrl);
|
||||
Assert.Equal(SocialService.Twitch, store.Socials.Entries[1].Service);
|
||||
Assert.Equal(SocialService.Fediverse, store.Socials.Entries[2].Service);
|
||||
Assert.Equal("@gramps@llamachile.tube", store.Socials.Entries[2].Handle);
|
||||
Assert.Equal("peertube", store.Socials.Entries[2].FediverseSoftware);
|
||||
Assert.Equal(SocialBarPosition.Top, store.Socials.BarPosition);
|
||||
Assert.Equal(SocialBarJustify.Left, store.Socials.BarJustify);
|
||||
Assert.False(store.Socials.BarEnabled);
|
||||
Assert.True(scenes[0].HasSocialBar);
|
||||
}
|
||||
}
|
||||
@@ -73,7 +81,7 @@ public class SocialBarTests
|
||||
[Fact]
|
||||
public void SocialsConfig_EmptyEntries_NotPersisted()
|
||||
{
|
||||
var path = TempDBPath();
|
||||
var path = TempDbPath();
|
||||
try
|
||||
{
|
||||
var socials = new SocialsConfig();
|
||||
@@ -94,6 +102,12 @@ public class SocialBarTests
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SocialsConfig_DefaultBarEnabled_IsOn()
|
||||
{
|
||||
Assert.True(new SocialsConfig().BarEnabled);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SocialServiceIcons_CanonicalUrlFor_AllServices()
|
||||
{
|
||||
@@ -103,17 +117,63 @@ public class SocialBarTests
|
||||
Assert.Equal("https://github.com/dev", SocialServiceIcons.CanonicalUrlFor(SocialService.GitHub, "dev"));
|
||||
Assert.Equal("https://example.com", SocialServiceIcons.CanonicalUrlFor(SocialService.Website, "example.com"));
|
||||
Assert.Equal("https://example.com", SocialServiceIcons.CanonicalUrlFor(SocialService.Website, "https://example.com"));
|
||||
Assert.Equal("https://site.tld/@user", SocialServiceIcons.CanonicalUrlFor(SocialService.Link, "@user@site.tld"));
|
||||
Assert.Equal("https://site.tld/@user", SocialServiceIcons.CanonicalUrlFor(SocialService.Fediverse, "@user@site.tld"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SocialServiceIcons_InitialsAndColor_AllServices()
|
||||
public void SocialServiceIcons_LogoData_AllServices()
|
||||
{
|
||||
Assert.Equal("YT", SocialServiceIcons.InitialsFor(SocialService.YouTube));
|
||||
Assert.Equal("#FF0000", SocialServiceIcons.ColorFor(SocialService.YouTube));
|
||||
Assert.Equal("TW", SocialServiceIcons.InitialsFor(SocialService.Twitch));
|
||||
Assert.NotEmpty(SocialServiceIcons.InitialsFor(SocialService.Website));
|
||||
Assert.NotEmpty(SocialServiceIcons.ColorFor(SocialService.Website));
|
||||
foreach (var service in Enum.GetValues<SocialService>())
|
||||
Assert.False(string.IsNullOrWhiteSpace(SocialServiceIcons.LogoDataFor(service)), service.ToString());
|
||||
Assert.NotEmpty(SocialServiceIcons.LockedIconData);
|
||||
Assert.NotEmpty(SocialServiceIcons.DoNotIconData);
|
||||
Assert.NotEqual(SocialServiceIcons.LogoDataFor(SocialService.YouTube), SocialServiceIcons.LogoDataFor(SocialService.Twitch));
|
||||
}
|
||||
|
||||
private static string TempDBPath() => TempDbPath();
|
||||
[Fact]
|
||||
public void SocialServiceIcons_LogoDataForFediverse_KnownAndUnknownSoftware()
|
||||
{
|
||||
Assert.Equal(SocialServiceIcons.LogoDataForFediverse("peertube"), SocialServiceIcons.LogoDataForFediverse("PeerTube"));
|
||||
Assert.Equal(SocialServiceIcons.LogoDataForFediverse("mastodon"), SocialServiceIcons.LogoDataForFediverse("MASTODON"));
|
||||
Assert.NotEqual(
|
||||
SocialServiceIcons.LogoDataForFediverse("peertube"),
|
||||
SocialServiceIcons.LogoDataForFediverse("mastodon"));
|
||||
Assert.Equal(SocialServiceIcons.LogoDataForFediverse(null), SocialServiceIcons.LogoDataForFediverse("gotosocial"));
|
||||
Assert.NotEqual(SocialServiceIcons.LogoDataForFediverse("peertube"), SocialServiceIcons.LogoDataForFediverse("unknown"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SocialEntry_FediverseLogo_ComesFromSoftwareName()
|
||||
{
|
||||
var entry = new SocialEntry
|
||||
{
|
||||
Service = SocialService.Fediverse,
|
||||
Handle = "@gramps@llamachile.tube",
|
||||
ProfileUrl = "https://llamachile.tube/@gramps",
|
||||
FediverseSoftware = "peertube",
|
||||
};
|
||||
Assert.Equal(SocialServiceIcons.LogoDataForFediverse("peertube"), entry.LogoData);
|
||||
Assert.NotEqual(SocialServiceIcons.LogoDataFor(SocialService.Link), entry.LogoData);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SocialServiceIcons_DetectService_ByDomain()
|
||||
{
|
||||
Assert.Equal(SocialService.YouTube, SocialServiceIcons.DetectService("youtube.com/@handle").service);
|
||||
Assert.Equal(SocialService.X, SocialServiceIcons.DetectService("https://x.com/user").service);
|
||||
Assert.Equal(SocialService.Instagram, SocialServiceIcons.DetectService("instagram.com/user").service);
|
||||
var fediverse = SocialServiceIcons.DetectService("@user@instance.tube");
|
||||
Assert.Equal(SocialService.Fediverse, fediverse.service);
|
||||
Assert.Equal("@user@instance.tube", fediverse.handle);
|
||||
Assert.Equal("https://instance.tube/@user", fediverse.url);
|
||||
Assert.Equal(SocialService.GitHub, SocialServiceIcons.DetectService("https://github.com/dev").service);
|
||||
Assert.Equal(SocialService.Website, SocialServiceIcons.DetectService("example.com/path").service);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SocialServiceIcons_DetectService_BareHandle_FallsBackToWebsite()
|
||||
{
|
||||
Assert.Equal(SocialService.Website, SocialServiceIcons.DetectService("justaname").service);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user