Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions packages/ndk/test/mocks/mock_relay.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class MockRelay {
bool allwaysSendBadJson;
bool sendMalformedEvents;
String? customWelcomeMessage;
String? bannedWord;

// NIP-46 Remote Signer Support
static const int kNip46Kind = BunkerRequest.kKind;
Expand All @@ -56,6 +57,7 @@ class MockRelay {
this.allwaysSendBadJson = false,
this.sendMalformedEvents = false,
this.customWelcomeMessage,
this.bannedWord,
int? explicitPort,
}) : _nip65s = nip65s {
if (explicitPort != null) {
Expand Down Expand Up @@ -145,6 +147,16 @@ class MockRelay {
if (eventJson[0] == "EVENT") {
Nip01Event newEvent = Nip01EventModel.fromJson(eventJson[1]);
if (verify(newEvent.pubKey, newEvent.id, newEvent.sig!)) {
// Check if event contains banned word
if (bannedWord != null && newEvent.content.contains(bannedWord!)) {
webSocket.add(jsonEncode([
"OK",
newEvent.id,
false,
"blocked: content contains banned word"
]));
return;
}
// Check auth for events if required (any authenticated user is OK)
if (requireAuthForEvents && authenticatedPubkeys.isEmpty) {
webSocket.add(jsonEncode([
Expand Down
44 changes: 44 additions & 0 deletions packages/ndk/test/usecases/broadcast_sources_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import 'package:ndk/ndk.dart';
import 'package:ndk/shared/nips/nip01/bip340.dart';
import 'package:test/test.dart';

import '../mocks/mock_event_verifier.dart';
import '../mocks/mock_relay.dart';

void main() async {
test("braodcast should update source", () async {
final relay = MockRelay(name: "relay");

await relay.startServer();

final ndk = Ndk(NdkConfig(
eventVerifier: MockEventVerifier(),
cache: MemCacheManager(),
bootstrapRelays: [relay.url],
));

final keypair = Bip340.generatePrivateKey();
final signer = Bip340EventSigner(
privateKey: keypair.privateKey,
publicKey: keypair.publicKey,
);
ndk.accounts.loginExternalSigner(signer: signer);

final event = Nip01Event(
pubKey: keypair.publicKey,
kind: 1,
tags: [],
content: "content",
);

await ndk.broadcast.broadcast(nostrEvent: event).broadcastDoneFuture;

final localEvent = await ndk.config.cache.loadEvent(event.id);

expect(localEvent, isNotNull);
expect(localEvent!.sources, isNotEmpty);

await ndk.destroy();
await relay.stopServer();
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import 'package:ndk/shared/nips/nip01/bip340.dart';
import 'package:test/test.dart';
import 'package:ndk/ndk.dart';

import '../../mocks/mock_event_verifier.dart';
import '../../mocks/mock_relay.dart';

void main() async {
test("requests should update sources", () async {
final bannedWord = "cow";

final relay1 = MockRelay(name: "relay 1");
final relay2 = MockRelay(name: "relay 2");
final relay3 = MockRelay(name: "relay 2", bannedWord: bannedWord);

await relay1.startServer();
await relay2.startServer();
await relay3.startServer();

final ndk = Ndk(NdkConfig(
eventVerifier: MockEventVerifier(),
cache: MemCacheManager(),
bootstrapRelays: [relay1.url, relay2.url, relay3.url],
));

final keypair = Bip340.generatePrivateKey();
final signer = Bip340EventSigner(
privateKey: keypair.privateKey,
publicKey: keypair.publicKey,
);
ndk.accounts.loginExternalSigner(signer: signer);

final event = Nip01Event(
pubKey: keypair.publicKey,
kind: 1,
tags: [],
content: bannedWord,
);
await ndk.broadcast.broadcast(nostrEvent: event).broadcastDoneFuture;

await ndk.config.cache.clearAll();

final query = ndk.requests.query(filter: Filter(ids: [event.id]));
final events = await query.future;

expect(events.first.sources.length, equals(2));

await ndk.destroy();
await relay1.stopServer();
await relay2.stopServer();
await relay3.stopServer();
});
}
Loading