Filter out invisible characters from organization leaderboard

What does this MR do and why?

Related to #576 (closed)

The organization leaderboard was showing a blank entry.

The cause was organization names with invisible characters (e.g. zero-width space \u200B). They could pass the existing nil/empty filter but rendered as blank in the browser.

Fix: require at least one alphanumeric character via [[:alnum:]] regex filter.

Old SQL Query New SQL Query
SELECT MAX(users.organization) AS name, SUM(view_combined_activity_summaries.points) AS score,
  COUNT(DISTINCT users.id) AS contributors_count
FROM "users"
INNER JOIN "view_combined_activity_summaries" ON "view_combined_activity_summaries"."user_id" = "users"."id"
WHERE NOT (("users"."organization" = '' OR "users"."organization" IS NULL))
AND "view_combined_activity_summaries"."community_member" = TRUE
GROUP BY LOWER(users.organization)
ORDER BY "score" DESC
LIMIT 20 OFFSET 0
SELECT MAX(users.organization) AS name, SUM(view_combined_activity_summaries.points) AS score,
  COUNT(DISTINCT users.id) AS contributors_count
FROM "users"
INNER JOIN "view_combined_activity_summaries" ON "view_combined_activity_summaries"."user_id" = "users"."id"
WHERE (users.organization ~ '[[:alnum:]]')
AND "view_combined_activity_summaries"."community_member" = TRUE
GROUP BY LOWER(users.organization)
ORDER BY "score" DESC
LIMIT 20 OFFSET 0

Validation steps

  1. In rails console, create a user with a blank organization name :
u = User.create!(username: 'test_blank', organization: "\u200B", community_member: true, state: :active)
Issue.create!(user: u, opened_date: 1.day.ago, state_id: 1, title: 'Test', upvotes: 0, web_url: 'https://gitlab.example.com/i/1')
Views::ActivitySummary.refresh(concurrently: false)
Views::RecentActivitySummary.refresh(concurrently: false)
  1. Visit /organizations and verify that the organization isn't present.

/cc @stingrayza @leetickett-gitlab

Edited by Salim Zidane

Merge request reports

Loading
Loading