From d6adbc39741ebd79c5b41f20f7cd531171e620ec Mon Sep 17 00:00:00 2001 From: Michael Jurkoic Date: Sat, 30 Mar 2024 18:05:03 -0500 Subject: Test provided handlers in queryRelays --- test/nostr_service_test.cpp | 69 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) (limited to 'test/nostr_service_test.cpp') diff --git a/test/nostr_service_test.cpp b/test/nostr_service_test.cpp index 6b68221..71af093 100644 --- a/test/nostr_service_test.cpp +++ b/test/nostr_service_test.cpp @@ -543,7 +543,7 @@ TEST_F(NostrServiceTest, QueryRelays_UsesDefaultHandler_AndReturnsSubscriptionId { *sentSubscriptionId = temp.substr(1, temp.size() - 2); } - + return make_tuple(uri, true); })); EXPECT_CALL(*mockClient, receive(_, _)) @@ -556,6 +556,71 @@ TEST_F(NostrServiceTest, QueryRelays_UsesDefaultHandler_AndReturnsSubscriptionId auto filters = make_shared(getTestFilters()); auto receivedSubscriptionId = nostrService->queryRelays(filters); - EXPECT_STREQ(receivedSubscriptionId.c_str(), sentSubscriptionId->c_str()); + ASSERT_STREQ(receivedSubscriptionId.c_str(), sentSubscriptionId->c_str()); +}; + +TEST_F(NostrServiceTest, QueryRelays_UsesProvidedHandler_AndReturnsSubscriptionId) +{ + mutex connectionStatusMutex; + auto connectionStatus = make_shared>(); + connectionStatus->insert({ defaultTestRelays[0], false }); + connectionStatus->insert({ defaultTestRelays[1], false }); + + EXPECT_CALL(*mockClient, isConnected(_)) + .WillRepeatedly(Invoke([connectionStatus, &connectionStatusMutex](string uri) + { + lock_guard lock(connectionStatusMutex); + bool status = connectionStatus->at(uri); + if (status == false) + { + connectionStatus->at(uri) = true; + } + return status; + })); + + auto nostrService = make_unique( + testAppender, + mockClient, + fakeSigner, + defaultTestRelays); + nostrService->openRelayConnections(); + + auto sentSubscriptionId = make_shared(); + EXPECT_CALL(*mockClient, send(_, _)) + .Times(2) + .WillRepeatedly(Invoke([sentSubscriptionId](string message, string uri) + { + json jarr = json::array(); + jarr = json::parse(message); + + string temp = jarr[1].dump(); + if (!temp.empty() && temp[0] == '\"' && temp[temp.size() - 1] == '\"') + { + *sentSubscriptionId = temp.substr(1, temp.size() - 2); + } + + return make_tuple(uri, true); + })); + EXPECT_CALL(*mockClient, receive(_, _)) + .Times(2) + .WillRepeatedly(Invoke([sentSubscriptionId](string _, function messageHandler) + { + messageHandler(getTestEventMessage(*sentSubscriptionId)); + })); + + auto filters = make_shared(getTestFilters()); + nostr::Event expectedEvent = getTestEvent(); + auto receivedSubscriptionId = nostrService->queryRelays( + filters, + [expectedEvent](const string& subscriptionId, shared_ptr event) + { + ASSERT_STREQ(event->pubkey.c_str(), expectedEvent.pubkey.c_str()); + ASSERT_EQ(event->kind, expectedEvent.kind); + ASSERT_EQ(event->tags.size(), expectedEvent.tags.size()); + ASSERT_STREQ(event->content.c_str(), expectedEvent.content.c_str()); + ASSERT_GT(event->sig.size(), 0); + }); + + ASSERT_STREQ(receivedSubscriptionId.c_str(), sentSubscriptionId->c_str()); }; } // namespace nostr_test -- cgit