Files
old-holivud2/spec/controllers/notifications_controller_spec.rb
2020-05-31 22:38:19 +02:00

148 lines
4.2 KiB
Ruby

require "rails_helper"
RSpec.describe NotificationsController, type: :controller do
describe "#create" do
context "for a subscription confirmation" do
it "responds ok" do
post :create, body: subscription_confirmation_body_json
expect(response).to be_ok
end
it "log the subscribe url" do
allow(Rails.logger).to receive(:info)
post :create, body: subscription_confirmation_body_json
expect(Rails.logger).to have_received(:info).with("http://example.com")
end
end
context "for a notification" do
context "for video analysis" do
let!(:video) { create(:video, analysis_uid: "job_id") }
context "when successful" do
it "responds ok" do
post :create, body: successful_notification_body_json
expect(response).to be_ok
end
it "updates video analysis status" do
post :create, body: successful_notification_body_json
expect(video.reload).to be_analysis_success
end
it "broadcasts analysis update" do
allow(ProjectsChannel).to receive(:broadcast_video_analysis_update)
post :create, body: successful_notification_body_json
expect(ProjectsChannel).to have_received(:broadcast_video_analysis_update).with(video)
end
end
context "when failed" do
it "responds ok" do
post :create, body: failure_notification_body_json
expect(response).to be_ok
end
it "updates video analysis status" do
post :create, body: failure_notification_body_json
expect(video.reload).to be_analysis_failure
end
it "broadcasts analysis update" do
allow(ProjectsChannel).to receive(:broadcast_video_analysis_update)
post :create, body: successful_notification_body_json
expect(ProjectsChannel).to have_received(:broadcast_video_analysis_update).with(video)
end
end
end
context "for audio analysis" do
let!(:video) { create(:video, audio_analysis_uid: "job_id") }
context "when successful" do
it "responds ok" do
post :create, body: successful_notification_body_json("audio")
expect(response).to be_ok
end
it "updates video analysis status" do
post :create, body: successful_notification_body_json("audio")
expect(video.reload).to be_audio_analysis_success
end
it "broadcasts analysis update" do
allow(ProjectsChannel).to receive(:broadcast_video_analysis_update)
post :create, body: successful_notification_body_json("audio")
expect(ProjectsChannel).to have_received(:broadcast_video_analysis_update).with(video)
end
end
context "when failed" do
it "responds ok" do
post :create, body: failure_notification_body_json("audio")
expect(response).to be_ok
end
it "updates video analysis status" do
post :create, body: failure_notification_body_json("audio")
expect(video.reload).to be_audio_analysis_failure
end
it "broadcasts analysis update" do
allow(ProjectsChannel).to receive(:broadcast_video_analysis_update)
post :create, body: successful_notification_body_json("audio")
expect(ProjectsChannel).to have_received(:broadcast_video_analysis_update).with(video)
end
end
end
end
end
private
def subscription_confirmation_body_json
{ "Type" => "SubscriptionConfirmation", "SubscribeURL" => "http://example.com" }.to_json
end
def successful_notification_body_json(analysis_type = "video")
{
"Type" => "Notification",
"Message" => {
"JobId" => "job_id",
"Status" => "SUCCEEDED",
"AnalysisType" => analysis_type,
}.to_json
}.to_json
end
def failure_notification_body_json(analysis_type = "video")
{
"Type" => "Notification",
"Message" => {
"JobId" => "job_id",
"Status" => "FAILED",
"AnalysisType" => analysis_type,
}.to_json
}.to_json
end
end