# frozen_string_literal: true RSpec.describe PushNotificationController do fab!(:user) context "when logged out" do it "should not allow subscribe" do post "/push_notifications/subscribe.json", params: { username: "test", subscription: { endpoint: "endpoint", keys: { p256dh: "256dh", auth: "auth", }, }, send_confirmation: false, } expect(response.status).to eq(403) end end context "when logged in" do before { sign_in(user) } it "should subscribe" do post "/push_notifications/subscribe.json", params: { username: user.username, subscription: { endpoint: "endpoint", keys: { p256dh: "256dh", auth: "auth", }, }, send_confirmation: false, } expect(response.status).to eq(200) expect(user.push_subscriptions.count).to eq(1) end it "should fix duplicate subscriptions" do subscription = { endpoint: "endpoint", keys: { p256dh: "256dh", auth: "auth" } } PushSubscription.create user: user, data: subscription.to_json post "/push_notifications/subscribe.json", params: { username: user.username, subscription: subscription, send_confirmation: false, } expect(response.status).to eq(200) expect(user.push_subscriptions.count).to eq(1) end it "should not create duplicate subscriptions" do 2.times do post "/push_notifications/subscribe.json", params: { username: user.username, subscription: { endpoint: "endpoint", keys: { p256dh: "256dh", auth: "auth", }, }, send_confirmation: false, } end expect(response.status).to eq(200) expect(user.push_subscriptions.count).to eq(1) end it "should unsubscribe with existing subscription" do sub = { endpoint: "endpoint", keys: { p256dh: "256dh", auth: "auth" } } PushSubscription.create!(user: user, data: sub.to_json) post "/push_notifications/unsubscribe.json", params: { username: user.username, subscription: sub, } expect(response.status).to eq(200) expect(user.push_subscriptions).to eq([]) end it "should unsubscribe without subscription" do post "/push_notifications/unsubscribe.json", params: { username: user.username, subscription: { endpoint: "endpoint", keys: { p256dh: "256dh", auth: "auth", }, }, } expect(response.status).to eq(200) expect(user.push_subscriptions).to eq([]) end end end