From a900c99993aa029230b57d9fd0d96365e1579a21 Mon Sep 17 00:00:00 2001 From: Blake Erickson Date: Mon, 13 Jul 2020 12:07:39 -0600 Subject: [PATCH] DEV: Add external_id to notification payload If sso is enabled the notification payload will now include the external_id for the user. This was requested on meta: https://meta.discourse.org/t/-/129052/10 --- app/serializers/notification_serializer.rb | 9 ++++++++ .../notification_serializer_spec.rb | 21 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/app/serializers/notification_serializer.rb b/app/serializers/notification_serializer.rb index e01e639b457..18f0b9fcac4 100644 --- a/app/serializers/notification_serializer.rb +++ b/app/serializers/notification_serializer.rb @@ -4,6 +4,7 @@ class NotificationSerializer < ApplicationSerializer attributes :id, :user_id, + :external_id, :notification_type, :read, :created_at, @@ -38,4 +39,12 @@ class NotificationSerializer < ApplicationSerializer object.data_hash end + def external_id + object.user&.single_sign_on_record&.external_id + end + + def include_external_id? + SiteSetting.enable_sso + end + end diff --git a/spec/serializers/notification_serializer_spec.rb b/spec/serializers/notification_serializer_spec.rb index 63f305e00c4..afa03243a09 100644 --- a/spec/serializers/notification_serializer_spec.rb +++ b/spec/serializers/notification_serializer_spec.rb @@ -13,5 +13,26 @@ describe NotificationSerializer do expect(json[:notification][:user_id]).to eq(user.id) end + it "does not include external_id when sso is disabled" do + expect(json[:notification].key?(:external_id)).to eq(false) + end + end + + describe '#sso_enabled' do + let :user do + user = Fabricate(:user) + SingleSignOnRecord.create!(user_id: user.id, external_id: '12345', last_payload: '') + user + end + let(:notification) { Fabricate(:notification, user: user) } + let(:serializer) { NotificationSerializer.new(notification) } + let(:json) { serializer.as_json } + + it "should include the external_id" do + SiteSetting.sso_url = "http://example.com/discourse_sso" + SiteSetting.sso_secret = "12345678910" + SiteSetting.enable_sso = true + expect(json[:notification][:external_id]).to eq("12345") + end end end