* Log to DataDog when a welcome notification is created
* Fix typo in Metrics::RecordDailyUsageWorker
* Add Metrics::RecordDailyNotificationsWorker to log notification counts to DataDog
* Add specs around DataDog logging for welcome notifications + click events
* Call Metrics::RecordDailyNotificationsWorker from within log_daily_usage_measurables task
* Use user_id instead of user, move notification title into tags
* Replace Credits.import with .insert_all
* Fix Notifications::Reactions::Send and replace .import with .upsert to avoid race conditions
* Replace .import! with .upsert_all in Notifications::NotifiableAction::Send
* Replace PodcastEpisode.import! with upsert
* Stop testing gems, test the code
* Remove activerecord-import
* Fix redundancies
* clarify comment
* Replace Credit.import with insert_all
* hello knapsack
* Do not try to insert if there is nothing to
* Rename positive_reactions_count to public_reactions_count
* Add positive reactions count back in so we can remove it
* Use public_category method for reactions
* Add positive_reactions_count in case any old caches rely on it
* Add positive_rxn_count to account for API endpoints
* Remove unused method
* One more spot...
* Add method back in because of caches
* Update specs to match new functionality
* Fix typo
* Remove unused methods
* Add Welcome Thread Broadcast to generator.rb
* Add welcome trait to broadcasts.rb
* Add additional tests around welcome_broadcasts:
- ensure that the correct Broadcast is sent
- ensure that a User only receives a single Notification
- ensure that only certain Users receieve the Notification
* Refactor and remove unncessary code from generator.rb and generator_spec.rb
* Refactor generator_spec and eagerly load welcome_thread_comment to get spec passing
* Initialize user in place of receiver_id in generator.rb
* Add before action to make generator_spec more readable
* Add latest_published_thread method to generator.rb
* Update generator.rb to be reusable with latest_published_thread
* Update generator_spec to use welcome tags for Article obj
* Create mascot_account using let to reduce User creation in spec
* Adjust expectation for a User who should not receive a notification
* Skip moderation notification if the user is the moderator
* Update spec/workers/notifications/moderation_notification_worker_spec.rb
Co-Authored-By: Vaidehi Joshi <vaidehi.sj@gmail.com>
Co-authored-by: Vaidehi Joshi <vaidehi.sj@gmail.com>
* Add more Broadcasts to seeds for welcome notification flow
* Remove unnecessary welcoming_user_id from development config
* Add basic service class for generating appropriate broadcast per user
Eventually, this should be called from a rake task that will rely on this service to determine which broadcast, if any, is the appropriate one to send to newly signed-up users, and will enqueue a worker to create/send a welcome notification when appropriate.
* Add a few TODOs, plus some general cleanup
* Add some skipped tests for WelcomeNotification::Generator
* Add "Welcome" type to Broadcasts, allow dynamic "authoring" of Broadcasts
This adds a new `type_of` to the Broadcast model: "Welcome". As we begin to create a new "welcome notification" workflow, we'll categorize them by making them all of the same type.
This also adds a concept of a "welcoming user", which can be set via an ENV var. The WELCOMING_USER_ID will allow us to explicitly set (and change) which user in the database is the one that "sends" welcoming notification. In production, we plan for this to be dev.to/sloan.
* Allow WelcomeNotificationWorker to accept + send any kind of broadcast
This abstracts out the logic of deciding which broadcast to send from the woker into the calling method. This will help us send many different kinds of welcome notifications using one, resuable worker class.
* Raise if a Notification can't be created
* Add STAFF_USER_ID as an ENV var
This is in preparation for moving away from SiteConfig.staff_user_id, and replacing it with an ENV var. We will need to set this in production first, and then make a separate PR to replace all instances of staff_user_id with the newly-set ENV var.
* Prepare factories and associations for Users::DeleteActivity specs
* Altered user associations, delete the needed associations in Users::DeleteActivity
* Moved and refined user deletion spec
* Removed useless commented user associations
* Refactored BackupData factory
* Refactored ProfilePin factory
* Refactored Reaction factory
* Fixed specs: Keep default _type in factories or specify it in tests
* Ok, notes shouldn't be deleted on user deletion
* Fixed creating reactable for specs
* Specify commentable/commentable_type explicitly when creating data for tests
* Fixed typo in the comments spec
* Removed unnneeded space
* Added aggregate_failures for testing user associations deletion
* Keep feedback_messages while deleting user activities
* Add a default message to badge award action
Because:
- The only badges routinely awarded manually use the same message
- Right now, unfriendly/unsafe UI can result in an error notification
The only badges that are currently awarded manually (afaik) have the
message "Congrats!!!" so for the time being, if a message is not
supplied to the UI, it will simply use the "Congrats!!!" message as a
default.
That being said, I'm not totally convinced this message won't work for
the long term. Generally, if we are awarding badges by hand, I'd imagine
we'd want a specific message explaining why we are doing that, or just
be okay with "Congrats!"
After talking with Peter about it, the longer term goal should be to
move badge messages into the database so they can be modified in the app
and not hardcoded. That also make sense regarding the effort to
genericize the app eventually.
* Test Badge notifications
* mod view form changes
* add error validation for removal tag
* add error validation to tag_list count
* re-render tag_adjustment form errors
* refactor admin delete adjusted tags form
* add prompt to tag adjustment form select
* front end validations to add/remove tag_adjustment
* allow tag_mod to undo own tag adjustment
* update/add specs
* update send spec
* update tag adjustment spec
* added tests to specs
* added view logic
* added controller/model functionality
* minor tweak to tagadjustment view
* adjusted mod view to reduce query
* added instance variables to controller
* show already adjusted tags in mod view
* removed unnecessary ifs from mods controller
* catch and display errors to tag adjustment forms
* update specs and refactor
* Make notifications reactions specs more confident about time
* Protect AnalyticsService specs if run on International Date Line West time zone
* Display local datetime to make it easier to reproduce time zone bugs
* Display date in RFC 3339
* Freeze time and confront without nanoseconds
* Add backend func. for muting users you follow
* Remove comment
* Add validations and update default value
* Send notifications to followers with all_articles
* Add MVP of notification subscriptions
* Add rate limiting for notification subscriptions
* Show modal for logged out users on subscribe click
* Add enter key functionality for checkbox
* Add relationships for notification subscriptions
* Add model test for notification subscription
* Deprecated article mutes in favor of notification subscriptions
* Deprecated comment mutes in favor of notification subscriptions
* Move comment muting tests and logic over
* Merge comment and article muting into subscriptions
* Remove redundant check
* Use database to check for rate limit instead of cache
* Test for subscriptions handling notifications properly
* Fix notification model spec for subscriptions
* Fix tests for subscriptions
* Remove rate limiting
* Properly handle logged out users getting subscription status
* Fix test for new pattern
* Update reserved words
* Add config column to notification subscriptions
* Add logic for top level config and move tests
* Test for top level subscribers getting notified
* Fix logic mistake oops
* Add index and refactor comment_user_ids
* Notifications unique indexes that take null values into account
* Specify import options for reaction notifications according to the indexes
* Fix specs: notifications have either user_id or organization_id
* Create notifications indexes concurrently
* Moved notifying followers to a service + specs
* Created an ActiveJob for notifiable action notifications
* Call the job from the Notification#send_to_followers
* Refactor creating notifiable action notification
* Handle possible nil followers while sending notifiable action notification
* Use activerecord import to bulk-create notifications
* Set notified_at for the bulk-created notifications
* Move compact to the appropriate place
* Send new comment notification service + specs
* Call new comment notification service from the model
* Return to non-bang notifications create
* An ActiveJob for the new comment notifications
* Call comments notification ActiveJob from Notification