We can't rely on the database returning published articles in ID
order, since there are indexes on published_at and on published which
could very well be in any order (btree), and no explicit `ORDER BY id
ASC` was in the query.
I checked the query that's run in the test against blazer, and confirmed that under
real conditions the results are pretty far from ordered:
```
SELECT articles.id FROM articles WHERE (published_at <= '2021-04-27') AND articles.published = true LIMIT 10 OFFSET 0;
----
id
166916
637099
132444
431420
501939
141182
565391
515964
146231
677241
```
Change the expectation to assert Article does not receive :order, and
remove the expectation that the ids are returned in the order created.
* Remove definitely unused attributes
* Refactor and remove unused attributes
* Add parentheses
* Prevent alt tag from having Liquid tags inside
* Add test
* Remove more unused attributes
* Scrub any valid attributes
* Remove unused tags and add more tests
* Remove <i> tag; <em> is used by parser
* Remove <center> b/c it's deprecated though still valid
* <cite> is a safe tag and used by some
* Eh I changed my mind about center lol
* Add underline <u> back in
* Don't allow width changes
* Use frozen constant for regex
* Use #remove over #gsub
* Re-order test cases to increase tests readability
* Add user_id filter for articles query
* Add organization_id and tags filters
* Add new params to SearchController#feed_content
* Add current_user param so that it can be tested for a small pool of users
* 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>
* Modify codepen_tag to parse public and private Pen urls
* Fixed broken test for codepen_tag private test
* Replace codepen_tag tests with links to real Pens
* fix following tags input a11y errors
* give hidden inputs unique ids
* update html element code in initScrolling, update test with new ids
* refactor
* trigger travis
* target the textfield inside the div in the test
* When busting user cache, also clear the api response
This should fix#13293 by clearing both the UI copy and the api copy of the
user's page.
* Update spec to include the api path
* Add reading_time to articles api responses
Fixes#13436
* Update api docs to match changes to the articles response
* Follow up docs updates
- increment api docs version
- add reading_time to articles/me responses
- add reading time to the show response example format
* Change reading_time attribute to reading_time_minutes
Update the article builder to use `article.reading_time` and present
it as `"reading_time_minutes"`.
Update the api spec to expect the new property name instead of the attribute.
* Update api documentation to reflect the new name
- Change reading_time -> reading_time_minutes.
- I decided to keep the (possibly redundant) description text here.
* Asynchronous organization destroy
* Notification after an organization was deleted
* Send data to Datadog and Honeybadger when org deletion failed
* Delete unused code
* Fixed Organization#destroyable? and organization delete specs
* Reorganized organization deletion specs
* Removed redundant specs
* Improved org deleted email text template
* Don't peform the org delete when a user or an org were not found
* Renamed user_id in the org delete worker
* Audit logging when deleten an organization
* Removed specs for tracking pixel and UTM params
* Changed slug for audit log on org delete
* Fixed schema.rb
* Return Device ID upon registration
* Update app/controllers/devices_controller.rb
Co-authored-by: rhymes <rhymes@hey.com>
* Add check for status code in spec
Co-authored-by: rhymes <rhymes@hey.com>
* feat: make the sidebar more dynamic
* refactor: use the action in the same controller instead of the whole path
* feat: remove hardcoded routes
* feat: move routes into file
* feat: use rails 6 draw for the admin routes
* add a helper method
* oops: fix super
* feat: add the hacky helper methods :( )
* WIP: created different path helpers for the new routes and point the old helpers to the new ones if the FF is toggled
* feat: update the module
* chore: add new paths
* feat: change link_to's use paths instead
* feat: feedback_messages to scoped admin route
* chore: update the feature flag urls helpers
* feat: feedback_messages issue
* chore: remove all the workarounds
* chore: rubucop
* fix: oops remove helper
* chore: comment out the tests that touch the tabbed navbar which is affected by the rails application needing to be reloaded
* feat: ensure that we chcek if the db table exists
* Rename comment-mentioned-user class added by Html::Parser
* Add DataUpdateScripts for resaving articles, comments, and messages
* Swap order of messages and articles DUS
* 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
* Navigate back to dashboard instead of article.path
* Set mainImage to null to remove image properly
* Use dashboard_path over string path
Co-authored-by: Michael Kohl <me@citizen428.net>
* Handle apostrophe edge cases
* Allow main image to be set
* Add new test for removing article cover img
* Use potentially less flaky find
* Use findByAltText instead of get
Co-authored-by: Michael Kohl <me@citizen428.net>
* Revert change to options hash within Articles::ActiveThreadsQuery#call
- Reverts double splat change back to options hash
- Reverts changes to active_threads_query_spec.rb options
* Adds another check for tags to Articles::ActiveThreadsQuery#call
- Adds a .tags.present? check to #call
- Removes redundant and broken relation from #call
* Reverts change to options hash within _sidebar_additional.html.erb
* Removes before block from active_threads_query_spec
* Moves tag filter before conditional in Articles::ActiveThreadsQuery#call
- Adds before block back to active_threads_query_spec for proper
testing of filtering of tags within spec
* Adjust options to use new kwargs in Articles::ActiveThreadsQuery
- Adjust active_threads_query_spec to use new args
- Remove useless code from Articles::ActiveThreadsQuery
* Adjust published_at in else block
* Make test fail again
Minimal reproduction via `rspec
spec/system/user/trusted_user_flags_user_spec.rb --order=random
--seed=9374` which runs in this order:
- when signed in as a trusted user
- when not logged in
- when signed in as the non-trusted user
- when signed in as the user
Because "not logged in" immediately precedes "non-trusted user" in this
order, the browser store cache is cleared and there is no user. Since
there's no user, the flag is not removed.
* Wait for current user promise before processing current user
* Extract button callback registration to function
This addresses a code climate concern (function exceeded 50 lines) by
extracting the button behavior to a function of (button, id, name),
and calls that within the exported initFlag function.
* Prefer request to fetch
Addresses feedback to use @utilities/http's request method in place
of fetch (which automatically adds the needed csrf headers)
* Reorder imports
Satisfies code climate report that imports are out of order
* Add honeybadger notify to error handling
Do more than just notify that something went wrong. Notify honeybadger
on failure to flag/unflag a user.
* Remove temp variable
This makes the notify code look more like the suggestion
* Reduce function arglist
Since the user id and name are properties of the flagButton's dataset,
we can efficiently extract them from the flagButton.
Only pull user id from dataset to check if current user = profile
user, and extract id and name from dataset after passing the
flagButton.
* reorder imports
Not sure how I managed to reverse this in 18aeb675b but here we go again
* Test button behavior
The original tests only asserted that the link to reactions was
present and labeled correctly. Add additional check that we can use
the button and that the label toggling occurs (this adds a request to
the test case, but adds a test for user facing behavior).
* Tame eslint check
I was getting conflicting feedback on import ordering from code
climate and eslint. Since telling eslint to ignore its rules was
immediately clear to me (there's an example on the line before this)
that's the direction I headed, but I can revisit if it matters
https://github.com/forem/forem/pull/13279#issuecomment-814411401
captures the conflict (code climate wants @utilities/http first,
eslint wants ../chat/util first, one or the other fails regardless of
the ordering.
* Use multiple rules in one ignore comment
https://eslint.org/docs/user-guide/configuring/rules#disabling-rules
supports multiple warnings separated by commas
* Remove stray comment
* Move documentation comment to the code it describes
* Replace invalid name
I had copied from the suggested code snippet the
userData.profileUserID name, but userData in this context is a global
function, and `profileUserId` (capitalization) is the bound variable
in this context.
Fix it before we throw an error trying to report an error (ironically,
before the window alert telling the user an error occurred, I think
this would have been visible only in console).
* Actually call the remove button function
* 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>