require 'rails_helper' RSpec.describe "Well-known URLs", type: :request do describe "GET /nostr" do describe "without username param" do it "returns a 422 status" do get "/.well-known/nostr.json" expect(response).to have_http_status(:unprocessable_entity) end end describe "non-existent user" do it "returns a 404 status" do get "/.well-known/nostr.json?name=bob" expect(response).to have_http_status(:not_found) end end describe "user does not have a nostr pubkey configured" do let(:user) { create :user, cn: 'spongebob', ou: 'kosmos.org' } before do allow_any_instance_of(User).to receive(:ldap_entry) .and_return({ nostr_key: nil }) end it "returns a 404 status" do get "/.well-known/nostr.json?name=spongebob" expect(response).to have_http_status(:not_found) end end describe "user with nostr pubkey" do let(:user) { create :user, cn: 'bobdylan', ou: 'kosmos.org' } before do user.save! allow_any_instance_of(User).to receive(:nostr_pubkey) .and_return('438d35a6750d0dd6b75d032af8a768aad76b62f0c70ecb45f9c4d9e63540f7f4') end it "returns a NIP-05 response" do get "/.well-known/nostr.json?name=bobdylan" expect(response).to have_http_status(:ok) res = JSON.parse(response.body) expect(res["names"].keys.size).to eq(1) expect(res["names"]["bobdylan"]).to eq(user.nostr_pubkey) end context "without relay configured" do before do Setting.nostr_relay_url = "" end it "does not include a recommended relay" do get "/.well-known/nostr.json?name=bobdylan" res = JSON.parse(response.body) expect(res["relays"]).to be_nil end end context "with relay configured" do before do Setting.nostr_relay_url = "wss://nostr.kosmos.org" end it "includes a recommended relay" do get "/.well-known/nostr.json?name=bobdylan" res = JSON.parse(response.body) expect(res["relays"][user.nostr_pubkey].length).to eq(1) expect(res["relays"][user.nostr_pubkey].first).to eq("wss://nostr.kosmos.org") end end end describe "placeholder username for domain's own pubkey" do it "returns the configured nostr pubkey" do get "/.well-known/nostr.json?name=_" res = JSON.parse(response.body) expect(res["names"]["_"]).to eq(Setting.nostr_public_key) end context "with relay configured" do before do Setting.nostr_relay_url = "wss://nostr.kosmos.org" end it "returns the pubkey and relay" do get "/.well-known/nostr.json?name=_" res = JSON.parse(response.body) expect(res["relays"]["_"].length).to eq(1) expect(res["relays"]["_"].first).to eq("wss://nostr.kosmos.org") end end context "nostr service integration not enabled" do before do Setting.nostr_enabled = false end it "returns a 404 status" do get "/.well-known/nostr.json?name=_" expect(response).to have_http_status(:not_found) end end end end end