* Add missing foreign keys to models related to users
* Fix specs
* Change FK for page_views and rating_votes to nullify
* Improve rating vote validation and fix Users::Delete specs
* Revert "Spec Fix:Nullify Rating Votes when Deleting Users (#10071)"
This reverts commit 12dfe4ab3b.
* Introduce ProfileFieldGroup model
* Make profile_fields_groups name column unique
* Fix some specs
* feat: allow the page to work again
* Add guard clause to data update script
* Remove unused file
* Fix specs
* Add foreign key
Co-authored-by: Ridhwana <ridhwana.khan16@gmail.com>
* create listing endorsement model and write test to validate it
* create the classified_listing_endorsements table
* create model associations with seed data and test validations
* modify test and create more seed date for endorsement
* modify the model naming, changed seed data to become radomized and updated the test file
* remove unnecessary function
* Add ProfileField model
* Fix schema.rb
* Add service objects for base and link fields
* feat: show an index of profile fields and allow them to be edited
* Fix schema.rb
* Add service objects for base and link fields
* Add link fields to seeds
* Make placeholder a keyword argument
* Add work fields
* Add explanation column to profile fields
* Add coding fields
* Switch from inheritance to mixin
* Add email checkbox to base fields
* Add branding fields
* Add spec for ProfileFields::FieldDefinition
* chore: moved the migration file
* feat: add a create and destroy route
* feat: render a partial form
* fix: oops form instead of f
* Move migration back into correct location
* Rename column from explanation to description
* Rename attribute in mixin
* chore: update classed for buttons
* chore: rename from explanation to description
* chore: explanation to description
* chore: new profie field
* fix: only one submit button per form
* fix: update the form
* fix: remove files that got merged mistakenly
* chore: finally, some specs...
Co-authored-by: Michael Kohl <citizen428@dev.to>
* 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
* Create new restriced_liquid_tag role
* Update role spec
* Use new role over admin
* Add documentation for user_subscription_liquid_tag
* Stub roles to help avoid flaky specs
* Add user approved liquid tags to edit view
* Remove "simply". Coding is hard, yo!
* Update liquid_help
* Update liquid help
* Update and refactor dashboard specs
* Refactor role check for liquid tag docs
* Improve docs wording
* Refactor controller validations to model
* Update specs and move current email validation back
* Refactor #subscribed
* Cleanup UserSubscriptions::Create service
* Refactor service
* Move source inside of call for clarity
* Specs for UserSubscription::Create
* Cleanup spec
* Fix Article spec
* Updated for subscriber_email
* Add comment for explicitness of subscriber_email
* Fix reference in comment...oops!
* I know what I'm doing...sometimes...maybe
* Rename CachChecker - Subscription to IsSubscribed
* Use include vs eq in specs for error messages
* attr_accessor --> attr_reader
* Don't explicitly set nil
* Rename Create service to CreateFromService
* Use errors_as_sentence
* Rename service to CreateFromControllerParams
* Assign Struct to a new constant
* Set up ahoy gem, add ahoy-js
* Import ahoy.js into base.js.erb
* Add trackNotification function to notifications/index.html.erb
* Add sanitized_broadcast_id helper
* Use sanitized_broadcast_id in broadcast partial
* Add specs around tracking welcome notifications
* Remove optional fields from Ahoy::Visit migration + table
* Fiddle with trait to see if it helps with CI failures
* Disable geocode tracking in ahoy
* Stub out SiteConfig in notifications page spec
* Add migrations for subscriber_email column
* Add new schema
* Update relationships, specs, and factory
* Use unless index_exists? over if !index_exists?
* Fix typo in last fix for migration
* Rename authored_user_subscriptions
- to source_authored_user_subcriptions
* Add factory methods and specs
- UserSubscription.make
- UserSubscription.make_new
- Article.new_user_subscription
- Article.create_user_subscription
* Remove self and &
* Change make_new to build
* new_user_subscription --> build_user_subscription
* Come on, Travis
* Add last_active_at datetime to Broadcasts table
* Add last_active_at to Broadcast index view
* Add callback to Broadcast.rb to update last_active_at
* Add a data_update script to backfill the last_active_at column on the Broadcasts table
* Add a spec for updating the last_active_at timestamp in models/broadcast_spec.rb
* Format last_active_at timestamp via strftime in index.html.erb
* Remove data_update_script: backfill_last_active_at_for_broadcasts
* Remove ActiveRecord::Dirty method from broadcast.rb
* Adjust callback in broadcast.rb and last_active_at timestamp format in index.html.erb
* Adjust time in #update_last_active_at and add the safe navigation operator to index.html.erb
* Accounts for nil last_active_at values in the view
* Uses Time.current in place of Time.zone.now
* Remove last_active_at param from Broadcasts::Controller
* Add spec to broadcasts_spec.rb to test the updated attribute via a request
* Adjust current_time in broadcasts_spec.rb
* Adjust Timecop.freeze in broadcasts_spec.rb to resolve Travis faliure (fingers crossed)
* Adjust expectation to compare against last_active_at timestamp rather than current time
* Adds Timecop back and stores last_active_at timestamp to test against
* Rename last_active_at to active_status_updated_at on Broadcasts table
- Renames last_active_at to active_status_updated_at in specs
- Renames last_active_at to active_status_updated_at in model
- Renames last_active_at to active_status_updated_at in view
- Adjusts spelling in spec descriptions
- Rewords active_status_updated_at in view to Last Active On
* Backend MVP
- Migration
- Model
- Associations
* Add factory, spec, and validations
- Add unqiue index for validations
* Fix specs
* Add author to email_subscriptions
* Add user association to set_author_id
* Add clarifying comment to set_author_id
* Writing is hard sometimes
* Rename email_subscriptions to subscription_sources
* UserSubscription and user_subscription_sourceable
* subscribers --> sourced_subscribers
* Add comment to explain UserSubscription model
* Provide default crayon styles when creating banners
* Import crayons styles into /internal pages.
* Allow admins to use crayons banner styles when creating broadcasts.
* Preview banner styles with crayons.
* Add a "x" close button to announcements, fix styling to accommodate it
* Use constant and helper for broadcast banner styles
* Add VALID_BANNER_STYLES frozen constant to Broadcast class.
* Add banner_style helper for determining banner style class.
* Clean up preview CSS, import broadcast styles into preview
* Add close button click handler, clean up initializeBroadcast
* Add close functionality to announcement banner
Also hide announcement if the user has explicitly seen and "X"-ed out of it.
* Add system specs around rendering + dismissing broadcasts
* Add some (truly beautiful) JS documentation
* Add visible class to broadcast when previewed from internal
* Serialize broadcast_data within AsyncInfoController::base_data
Adds a `broadcast:` key to our `base_data`, regardless of whether a user is logged in or not.
If a broadcast is not present, passes along a `nil` value.
* Initialize active broadcast (if present) when rendering main page
* Allow admins to preview a broadcast's processed_html when editing
* Add some fixed position styling to active broadcast
* Add system specs around broadcasts on homepage
* Use sanitize in place of html_safe when previewing broadcast
* Do not initialize broadcast if no broadcastData available
* Render default value on broadcast in options_for_select
* JS cleanup
* Unset fixed positioning for static navbar config
Also add some default styling for an active broadcast
* Create migrations
* Create PageRedirect model
* Refactor migration and add timestamps
* Add routes for internal/page_redirects
* Add index controller action and view
* Change background color of version in /internal
* Add page_redirect factory and index specs
* Fix specs
* Use ransack for search
* Alphabetize internal sidenav
* Rename spec
* Add edit view with destroy button
* Refactor page_redirect form partial
* Update error messages and fix redirect
* Small fixes and hookup new and create
* Specs FTW
* Fix migration, overridden --> source
* Add PageRedirect model specs
- Validate presence of status
* Update routes
* Code climate fixes
* Add old_slug_url and new_slug_url helper methods
* Prevent updating old_slug, refactor _form
* Add URLs to index view for slugs
* Better spec wording
* Change version to badges and add to edit view
* Update destroy response
* slug --> path 🙈
* Add PageRedirects to seed file
* Fix seed file
* ACTUALLY fix the seed file
* slug --> path in PageRedirect factory
* Remove bug fix from seeds file
* Move menu items to controller constant
* Update source type validation in model spec
* Rename page_redirect --> path_redirect
* Add AuditLog for admin create, destroy, and update
* Remove redundant index
* Cleanup old name of page_redirect
* Remove old model
* Update AuditLog to :internal
* Titleize search placeholder task in internal
* Add comment to explain MENU_ITEMS constant
* Add warning text on edit page about many updates
* Remove default and allow null on source
* Fix comment
* Add path_redirect validations and model specs
- Validate old_path != new_path
- Validate new_path isn't an existing redirect
* Differentiate between welcome + announcement broadcasts
* Allow admins to filter between these two types in the `/internal/broadcasts` UI.
* Ensure that the index endpoint fetches the correct Broadcast models.
* Only allow one Announcement broadcast to be created at a time
* Also add some `announcement` and `welcome` scopes on the `Broadcast` class.
* Add flash[:success] messages in BroadcastsController.
* Add some tests for Announcement broadcast validations
* Remove unused active_announcement_params method
* Order Broadcasts by title, optimization improvements
* Fix missing closing tags in broadcast specs
* Add download_broadcast to generator.rb
* Adds memoized download_broadcast method
* Adds send_download_notification method
* Adds send_download_notification to call method
* Add download_app to broadcasts.rb and seeds.rb
* Adds download_app broadcast info and copy to factory
* Adds download_app copy to seeds
* Add specs around #send_download_app_notification in generator_spec.rb
* Fix quotes around copy
* Remove extra space within copy
* Change models and related files
* Update controllers and specs
* More renaming
* Seek and destroy, I mean search and replace
* Round up the stragglers
* Ground control to Major Travis...
* More fixes
* PR feedback
* Various fixes
* Rename view
* Fix list query builder
* Unify request specs
* Fix some API spec errors
* Fix remaining API specs
* Make spec conform to API
* Fix leftover problems
* Fix JS tests
* Fix column name in select
* Fix API specs
* Fix search specs
* Paging Mr. Travis
* Add TwitterClient::Client
* Use TwitterClient::Client for Tweet
* Test retweets
* Test assignment to user
* Fix TweetTag spec
* Remove TwitterBot
* Fix some specs
* Fix RSS Reader specs
It totally slipped my mind that we can create negative reactions on
comments. This PR accounts for that in the internal view that renders
negative reactions.
* Adjust GitHub and Twitter connect copy for broadcasts
*Removes robot copy from Twitter connect in seeds.rb and broadcasts.rb
*Removes robot copy from GitHub connect in seeds.rb and broadcasts.rb
* Adjust quotation marks in copy
* Adjust apostrophe
* Refactor user_show_spec to check for exact JSON-LD data to improve testing
* Extracts data out into factory objects to shorten # of lines in test
* Extracts JSON-LD into a parsed object for more precise testing
* Shortens test to be within the 15 line rubocop limit
* Resolves rubocop multi-line errors
* Refactor user.update_columns to be a single method
* Add :with_all_info trait to users factory
* Adds trait that holds all necessary info for user JSON-LD
* Removes user.update_columns method from the user_show_spec
* Adds the :with_all_info trait to the user in the spec
* Wrap test in rubocop:disable to resolve ExampleLength errors
* Removes let blocks that once held extracted code
* Adds code back to the data structure as inline code
* Resolves even more rubocop errors... hopefully