* Remove <provider>_created_at columns from User
* Update code
* Clean up
* Fix authenticator specs
* Restore old behavior
* Update provider account age logic, again
* Add Search::Postgres::User
* Add sorting params
* Use a better algorithm to filter out suspended users
* Add tsvector index on users.name
* Add specs
* Add UserRole spec
* Update spec/services/search/postgres/user_spec.rb
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Fix search with quotes in users's names
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Use trigger and tsvector column to speed up reading list search
* Add organization destroy spec and todo note
* Fix failing data update script due to not null constraint
* Remove the leading anchor in the trigger regexp
* Fix reading list specs
* Address feedback
* Move authors followers out of Notifications::NotifiableAction::Send and into Article model
* Rename authors_followers to followers
* Update followers method in service, oops
* Update app/services/notifications/notifiable_action/send.rb
Co-authored-by: Michael Kohl <citizen428@dev.to>
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Rename banned and comment_banned roles
* Add data update script to rename roles containing 'ban'
* Add named error for Suspended users
* Update unidiomatic method names
* Rename misc banned to suspended
* Apply suggestions from code review
Co-authored-by: Michael Kohl <me@citizen428.net>
* Add unit tests for suspended methods
This commit also adds TODO comments for removing banned and
comment_banned from the codebase after data update scripts have
successfully run on all of our Forems.
Co-authored-by: Michael Kohl <me@citizen428.net>
* Limit mentions in articles
* Bump MAX_USER_MENTION_LIVE_AT to April 7th, 2021 UTC time
* Use stubbed constants in article and comment specs
* Add TODOs around extracting MAX_USER_MENTIONS into constant
* User#followed_articles->Article.cached_tagged_with
This should improve performance on StoriesController#index
* Make cached_* work like their tagged_with cousins
* Swap to `cached_tagged_with_any`
This was using `tagged_with(tags, any: true)` before so this commit
swaps to using a scope that aligns with that method.
* Allow for searching by Tag models
* do the thing
* abracadabra run the build
* Add comment explaining Postgres regex anchors
* feat: add the two new models users_setting and users_notification_setting
* feat: add the settings and notification_settings table to the schema
* feat: add the user and notification models
* feat: add the user_id foreign key to the model
* chore: sneaky indent
* feat: add some fields from the profile attributes
* Revert "feat: add some fields from the profile attributes"
This reverts commit 376828746ded063a243505d317140fa5339227cf.
* chore: add some profile field attributes
* chore: remove language_settings
* chore: update indent
* chore: remove language_settings
* feat: changes to the tables
* chore: remove validation in favor of the foreign keys
* chore: add default for editor version
* Address PR review suggestions
* setting_spec.rb needs to be fixed; need help
* Working on PR review comments
* Continue with addressing PR review comments
* Remove normalize_config_values method; pass correct values from forms
* Address Travis failures
* revert some unnecessary changes in spec file
Co-authored-by: Arit Amana <msarit@gmail.com>
* Remove pro role on user, expose pro dashboard to all users as analytics
* Remove pro from Elasticsearch mappings
* Update user role docs to use :trusted over :pro
* Remove pro from Role model spec
* Remove more references to pro, as noted by @rhymes
* Added credits_awarded to /admin/badges forms
* Award credits only if badge has them
* Removed information about credits and listings in the new badge email when not needed
* Specs for number of credits awarded for badges
* Added missing newline
* Fix typo
Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com>
* Improve new_badge_email.text.erb
Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com>
* Fixed number of credits in notification
* Added specs for number of credits in notifications
Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com>
* Optimize Article.published scope
The index on `articles.published` is not being invoked due to lack of
diversity in the values in that column (it only has 2 possible values
because it's a boolean).
The index on `articles.published_at` is extremely diverse and will be
invoked any time it can reduce the scope of a query by an order of
magnitude or more.
On DEV, this does not change the row count for the scope:
irb(main):001:0> Article.where(published: true).count == Article.where(published: true).where(Arel.sql("published_at < now()")).count
=> true
The query plan for the `Articles::Feeds::LargeForemExperimental` service
invoked in the `Stories::FeedController#show` endpoint goes from this:
Planning Time: 0.271 ms
Execution Time: 329.258 ms
to this:
Planning Time: 0.330 ms
Execution Time: 0.468 ms
This is a reduction in query time of 99.7%
* Set published_at in articles factory
An article that is published should always have a `published_at`
timestamp
* Use Time.current for Zonebie
* Add clarifying comment to Article.published scope
* Generate timestamp in Ruby instead of SQL
I think using transactions for specs was interfering with comparing
timestamps generated in SQL, so this commit generates the timestamp in
Ruby.
* Move published_at outside of the transient block
This was causing articles to be marked as `published_at` right now even
if `published_at` was specified in the `FactoryBot.create` call.
* published_at: nil is no longer the factory default
* published_at is no longer nil by default
* published_at is no longer nil by default
* We didn't actually want to clear this published_at
This was intentionally left out to show that published_at does not get
cleared when we flip published true->false.
* Remove approvals fixtures
* Remove approvals initializer
* Remove approvals gem
* Remove approvals step from travis.yml
* Remove approvals from dockerignore and gitignore
* Remove references to approvals gem in docs
* Un-approvals spec/liquid_tags/codepen_tag_spec.rb
* Un-approvals spec/liquid_tags/dotnet_fiddle_tag_spec.rb
* Temporarily skip other approvals tests
We will still need to delete files in /spec/fixtures/approvals after this.
* Revert changes to dotnet_fiddle_tag_spec and codepen_tag_spec, skip those tests instead
* Temporarily skip more approvals based tests
* Attempt at moving html doc inline
* Comment out one more approvals spec
* Update dotnet fiddle and codepen liquid tag specs to not use Approvals
* Update liquid tag specs + system specs to not use Approvals
* Un-approval feed import, github issue, and tweet tag specs
* Re-add .approvals to gitignore and dockerignore
* Use Rspec compound expectations
Fixes#13008
Add a test case for blackbox stability
This failed as expected on master and passed on this branch, when a
reaction (which would change the article's calculated score during
update) is added, the hotness should be stable, and not modified
during the second call to `#update_score`.
* Only check cache or database once
Since `@trusted` is a boolean true/false value, we can't use the
`@ivar || value` pattern, and want instead to check if the variable
has been defined.
Fixes#13006
* Add unit test around memoization behavior
In local testing I was able to get this to fail by changing the
2.times block to include `remove_instance_variable(:@trusted)` (so the
`allow...once` check is sufficient to ensure we are not calling the
cache more than once per instance when false).
* Limit number of mentions in a single comment
Ensure that no more than 6 users can be mentioned in a single comment
* Extract max user mentions into constant
* Check mentions but don't process them unnecessarily
* Add error message check to comment spec
* Add MAX_USER_MENTION_LIVE_AT to comments, plus specs
* Bump MAX_USER_MENTIONS to 7 for DEV Top Seven posts
* Add some clarifying comments around MAX_USER_MENTION limit
* Update app/models/comment.rb to use activesupport helper!
Co-authored-by: Michael Kohl <citizen428@dev.to>
When https://github.com/forem/forem/pull/11268 we didn't test it thoroughly and
thus didn't detect that it wasn't working correctly and that it
resulted in an empty string in the `<description>` field.
* Replace #active_help scope with #active_help class method
* WIP: Add tests around #active_help class method
* Refactor #active_help and update article_spec.rb tests to pass
* Replaces .active_help class method with .active_help scope
- Reverts change from scope to class method, back to scope
- Updates to use newer AR query syntax using endless ranges
- Refactors scope to be more concise
* Add new table and model
* Store banned user username hash on delete
* Prevent previously banned user from signing up again
* Update method name
* Refactor code and add more specs
* Test improvements
* Don't override existing global flash
* Fix typo
* Update spec description
* Update schema.rb
* More schema.rb fixes
* Simplify spec
* Update migration
* Clean up migration
* Rename method
* Add DataDog counter
* Revisit error handling
* Remove spurious empty line
* Make model name more explicit
* Simplify special snowflake onboarding images and center around primary/secondary logos
* Remove left and right navbar customization
* Update app/lib/constants/site_config.rb
Co-authored-by: Vaidehi Joshi <vaidehi.sj@gmail.com>
* Remove spec onboarding images
Co-authored-by: Vaidehi Joshi <vaidehi.sj@gmail.com>
* feat: add an error column to the data update script
* feat: save the error to the error field
* feat: save the error when the script fails
* feat: show the script error on the data update script page
* chore: pass the error to mark_as_failed instead of having its own function
* refactor: use presence
* test: ensure that we test an error case of a data update script
* chore: rename errorneous to failing
* test: update some specs, working on the others
* chore: update tests now that there are two files
* chore: change error from a string to a text to allow for more char
* Update copy
* Allow relative URLs and normalize on save
* Update specs
* Move clarification from index to form
* Add data update script
* Update spec
* fix: set the deployed at to nil
* chore: make sure the heroku env is also set to empty
* Sprinkle more after block
Co-authored-by: Mac Siri <krairit.siri@gmail.com>
* Add .to_s to ForemInstance.deployed_at
* test: could it possibly be holding onto the cached value across the tests
Co-authored-by: Ridhwana <ridhwana.khan16@gmail.com>