A follow request sent again carries a new id
Lemmy keeps the ids of the activities it received and never answers one again, so resending the same Follow could not heal a follow whose Accept it lost: the village's community follow stayed pending through two resends. Each resend is now the same follow under its own id (<follow id>-again-<n>), and an Accept naming any of them answers the follow; the Undo still embeds the follow, so servers match it by its actor and object. Sent this way, the stuck follow was accepted at once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
1 parent
a5d493a8c9
commit
206506f5e9
5 files changed
+28
-7
No files matched your search
@@ -68,12 +68,18 @@ namespace PrivaPub.Tests.Federation
|
||||
Assert.Equal(0, await After(TimeSpan.FromMinutes(30)));
|
||||
Assert.Equal(1, await After(TimeSpan.FromMinutes(77)));
|
||||
Assert.Equal(3, await Follows());
|
||||
Assert.All(await _harness.Outgoing(quiet.Id + "/inbox"), a => Assert.Equal(following.FollowActivityURI, a["id"]!.GetValue<string>()));
|
||||
// each one again under its own id (Lemmy never answers an id it has seen), and an answer naming it counts
|
||||
var sentIds = (await _harness.Outgoing(quiet.Id + "/inbox")).Select(a => a["id"]!.GetValue<string>()).ToList();
|
||||
Assert.Equal(new[] { following.FollowActivityURI, following.FollowActivityURI + "-again-1", following.FollowActivityURI + "-again-2" }, sentIds);
|
||||
|
||||
// a request older than the count is sent again too; an answered one never
|
||||
await DB.Default.Update<Following>().MatchID(following.ID).Modify(b => b.Unset(f => f.Resent)).Modify(b => b.Unset(f => f.ResentAt)).ExecuteAsync(token);
|
||||
Assert.Equal(1, await After(TimeSpan.FromDays(1)));
|
||||
await DB.Default.Update<Following>().MatchID(following.ID).Modify(f => f.State, FollowState.Accepted).ExecuteAsync(token);
|
||||
await _harness.Deliver(quiet, "/human-centipede", new JsonObject
|
||||
{
|
||||
["id"] = NewId(quiet, "accepts"), ["type"] = "Accept", ["actor"] = quiet.Id, ["object"] = following.FollowActivityURI + "-again-2"
|
||||
});
|
||||
Assert.Equal(FollowState.Accepted, (await DB.Default.Find<Following>().OneAsync(following.ID, token)).State);
|
||||
Assert.Equal(0, await After(TimeSpan.FromDays(30)));
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user