@atproto/ozone
Version:
Backend service for moderating the Bluesky network.
64 lines (51 loc) • 1.66 kB
text/typescript
import assert from 'node:assert'
import { ComAtprotoAdminDefs, ToolsOzoneModerationDefs } from '@atproto/api'
import {
ModeratorClient,
SeedClient,
TestNetwork,
basicSeed,
} from '@atproto/dev-env'
describe('moderation', () => {
let network: TestNetwork
let sc: SeedClient
let modClient: ModeratorClient
const repoSubject = (did: string) => ({
$type: 'com.atproto.admin.defs#repoRef',
did,
})
beforeAll(async () => {
network = await TestNetwork.create({
dbPostgresSchema: 'ozone_takedown',
})
sc = network.getSeedClient()
modClient = network.ozone.getModClient()
await basicSeed(sc)
await network.processAll()
})
afterAll(async () => {
await network.close()
})
it('allows specifying policy for takedown actions.', async () => {
await modClient.performTakedown({
subject: repoSubject(sc.dids.bob),
policies: ['trolling'],
})
// Verify that that the takedown even exposes the policy specified for it
const { events: eventViews } = await modClient.queryEvents({
subject: sc.dids.bob,
types: ['tools.ozone.moderation.defs#modEventTakedown'],
})
const { event } = eventViews[0]
assert(ToolsOzoneModerationDefs.isModEventTakedown(event))
expect(event.policies?.[0]).toEqual('trolling')
// Verify that event stream can be filtered by policy
const { events: filteredEvents } = await modClient.queryEvents({
subject: sc.dids.bob,
policies: ['trolling'],
})
const { subject } = filteredEvents[0]
assert(ComAtprotoAdminDefs.isRepoRef(subject))
expect(subject.did).toEqual(sc.dids.bob)
})
})