64 lines
1.9 KiB
Ruby
64 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rails_helper"
|
|
|
|
RSpec.describe "DiscourseAi::Discord::BotController", type: :request do
|
|
let(:public_key) { "your_public_key_here" }
|
|
let(:signature) { "valid_signature" }
|
|
let(:timestamp) { Time.now.to_i.to_s }
|
|
let(:body) { { type: 1 }.to_json }
|
|
let(:headers) { { "X-Signature-Ed25519" => signature, "X-Signature-Timestamp" => timestamp } }
|
|
|
|
before do
|
|
SiteSetting.ai_discord_app_public_key = public_key
|
|
allow_any_instance_of(DiscourseAi::Discord::BotController).to receive(
|
|
:verify_request!,
|
|
).and_return(true)
|
|
end
|
|
|
|
describe "POST /discourse-ai/discord/interactions" do
|
|
context "when interaction type is 1 (PING)" do
|
|
it "responds with type 1" do
|
|
post "/discourse-ai/discord/interactions", params: body, headers: headers
|
|
expect(response).to have_http_status(:ok)
|
|
expect(JSON.parse(response.body)).to eq("type" => 1)
|
|
end
|
|
end
|
|
|
|
context "when interaction type is not 1" do
|
|
let(:guild_id) { "1234567890" }
|
|
let(:interaction_body) do
|
|
{
|
|
type: 2,
|
|
guild_id: guild_id,
|
|
data: {
|
|
options: [{ value: "test query" }],
|
|
},
|
|
token: "interaction_token",
|
|
}.to_json
|
|
end
|
|
|
|
before do
|
|
allow(SiteSetting).to receive(:ai_discord_allowed_guilds_map).and_return([guild_id])
|
|
end
|
|
|
|
xit "enqueues a job to handle the interaction" do
|
|
expect {
|
|
post "/discourse-ai/discord/interactions", params: interaction_body, headers: headers
|
|
}.to have_enqueued_job(Jobs::StreamDiscordReply)
|
|
end
|
|
|
|
it "responds with a deferred message" do
|
|
post "/discourse-ai/discord/interactions", params: interaction_body, headers: headers
|
|
expect(response).to have_http_status(:ok)
|
|
expect(JSON.parse(response.body)).to eq(
|
|
"type" => 5,
|
|
"data" => {
|
|
"content" => "Searching...",
|
|
},
|
|
)
|
|
end
|
|
end
|
|
end
|
|
end
|