From 13d0dce901ab011469fa208dec95a9cef3a84c15 Mon Sep 17 00:00:00 2001
From: Uku Taht <uku.taht@gmail.com>
Date: Mon, 26 Jul 2021 12:08:35 +0300
Subject: [PATCH] Make invitations email case insensitive

---
 ...11_make_invitation_email_case_insensitive.exs |  9 +++++++++
 .../controllers/site_controller_test.exs         | 16 ++++++++++++++++
 2 files changed, 25 insertions(+)
 create mode 100644 priv/repo/migrations/20210726090211_make_invitation_email_case_insensitive.exs

diff --git a/priv/repo/migrations/20210726090211_make_invitation_email_case_insensitive.exs b/priv/repo/migrations/20210726090211_make_invitation_email_case_insensitive.exs
new file mode 100644
index 00000000..024ac42f
--- /dev/null
+++ b/priv/repo/migrations/20210726090211_make_invitation_email_case_insensitive.exs
@@ -0,0 +1,9 @@
+defmodule Plausible.Repo.Migrations.MakeInvitationEmailCaseInsensitive do
+  use Ecto.Migration
+
+  def change do
+    alter table(:invitations) do
+      modify :email, :citext, null: false
+    end
+  end
+end
diff --git a/test/plausible_web/controllers/site_controller_test.exs b/test/plausible_web/controllers/site_controller_test.exs
index 52b139c0..ac950c48 100644
--- a/test/plausible_web/controllers/site_controller_test.exs
+++ b/test/plausible_web/controllers/site_controller_test.exs
@@ -44,6 +44,22 @@ defmodule PlausibleWeb.SiteControllerTest do
       assert html_response(conn, 200) =~ "<b>3</b> visitors in last 24h"
     end
 
+    test "shows invitations for user by email address", %{conn: conn, user: user} do
+      site = insert(:site)
+      insert(:invitation, email: user.email, site_id: site.id, inviter: build(:user))
+      conn = get(conn, "/sites")
+
+      assert html_response(conn, 200) =~ site.domain
+    end
+
+    test "invitations are case insensitive", %{conn: conn, user: user} do
+      site = insert(:site)
+      insert(:invitation, email: String.upcase(user.email), site_id: site.id, inviter: build(:user))
+      conn = get(conn, "/sites")
+
+      assert html_response(conn, 200) =~ site.domain
+    end
+
     test "paginates sites", %{conn: conn, user: user} do
       insert(:site, members: [user], domain: "test-site1.com")
       insert(:site, members: [user], domain: "test-site2.com")
-- 
GitLab