Files
buzz/desktop/src/shared/api/relayMembers.test.mjs
T
384c72dee6 Refine community management flows (#2738)
## Summary
- simplify Add community into clear create and join paths
- align community actions and icon editing across the rail, profile
menu, and settings
- consolidate invites around the member list and a reusable link dialog

## Testing
- `pnpm check`
- `pnpm test` (3,483 passed)
- `pnpm run build:e2e`
- focused Playwright coverage (34 passed)

## Snapshots

| Add a community | Join an existing community |
| --- | --- |
| ![Add a
community](https://raw.githubusercontent.com/block/buzz/fae692faa77186df7702fb025ca3082c7cc93a8c/pr-2738--01-add-community.png)
| ![Join an existing
community](https://raw.githubusercontent.com/block/buzz/fae692faa77186df7702fb025ca3082c7cc93a8c/pr-2738--02-join-community.png)
|

| Create a new community | Hosted community icon |
| --- | --- |
| ![Create a new
community](https://raw.githubusercontent.com/block/buzz/fae692faa77186df7702fb025ca3082c7cc93a8c/pr-2738--03-create-community.png)
| ![Hosted community
icon](https://raw.githubusercontent.com/block/buzz/fae692faa77186df7702fb025ca3082c7cc93a8c/pr-2738--04-community-icon.png)
|

| Invites | Invite link |
| --- | --- |
|
![Invites](https://raw.githubusercontent.com/block/buzz/fae692faa77186df7702fb025ca3082c7cc93a8c/pr-2738--05-invites.png)
| ![Invite
link](https://raw.githubusercontent.com/block/buzz/fae692faa77186df7702fb025ca3082c7cc93a8c/pr-2738--06-invite-link.png)
|

---------

Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Carl <c7ebe626f000404285d3686e1dc74cc07cc60a9754a150041ba132e14bd3e2ec@buzz.block.builderlab.xyz>
2026-07-24 19:30:33 -07:00

115 lines
2.8 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import {
canManageCommunityMembers,
loadRelayMembershipLookup,
shouldWarnMissingMembershipSnapshot,
} from "./relayMembers.ts";
test("open relays skip the membership snapshot request", async () => {
const lookup = await loadRelayMembershipLookup("a".repeat(64), false, () =>
assert.fail("open relays must not request a membership snapshot"),
);
assert.deepEqual(lookup, {
snapshotFound: false,
membershipRequired: false,
membership: null,
});
});
test("membership relays request their membership snapshot", async () => {
const pubkey = "a".repeat(64);
let requestCount = 0;
const lookup = await loadRelayMembershipLookup(pubkey, true, async () => {
requestCount += 1;
return {
created_at: 1,
tags: [["member", pubkey, "admin"]],
};
});
assert.equal(requestCount, 1);
assert.equal(lookup.snapshotFound, true);
assert.equal(lookup.membershipRequired, true);
assert.equal(lookup.membership?.role, "admin");
});
test("community member management is hidden on open relays", () => {
assert.equal(
canManageCommunityMembers({
snapshotFound: false,
membershipRequired: false,
membership: null,
}),
false,
);
});
test("community member management is visible to closed-relay admins and owners", () => {
for (const role of ["admin", "owner"]) {
assert.equal(
canManageCommunityMembers({
snapshotFound: true,
membershipRequired: true,
membership: { pubkey: "a".repeat(64), role },
}),
true,
);
}
});
test("community member management stays hidden while loading and from closed-relay non-admins", () => {
assert.equal(canManageCommunityMembers(undefined), false);
assert.equal(
canManageCommunityMembers({
snapshotFound: true,
membershipRequired: true,
membership: { pubkey: "a".repeat(64), role: "member" },
}),
false,
);
assert.equal(
canManageCommunityMembers({
snapshotFound: true,
membershipRequired: true,
membership: null,
}),
false,
);
});
test("missing snapshot warns when the relay requires membership", () => {
assert.equal(
shouldWarnMissingMembershipSnapshot({
snapshotFound: false,
membershipRequired: true,
membership: null,
}),
true,
);
});
test("missing snapshot is normal on an open relay", () => {
assert.equal(
shouldWarnMissingMembershipSnapshot({
snapshotFound: false,
membershipRequired: false,
membership: null,
}),
false,
);
});
test("an available snapshot never warns", () => {
assert.equal(
shouldWarnMissingMembershipSnapshot({
snapshotFound: true,
membershipRequired: true,
membership: null,
}),
false,
);
});