Exclude staff from CLA check (#4225)

Max Brunsfeld created

Change summary

crates/collab/migrations.sqlite/20221109000000_test_schema.sql |  2 
crates/collab/src/db/queries/contributors.rs                   | 21 
crates/collab/src/db/tables/user.rs                            |  1 
crates/collab/src/db/tests/db_tests.rs                         | 72 +--
4 files changed, 50 insertions(+), 46 deletions(-)

Detailed changes

crates/collab/migrations.sqlite/20221109000000_test_schema.sql 🔗

@@ -7,7 +7,7 @@ CREATE TABLE "users" (
     "invite_count" INTEGER NOT NULL DEFAULT 0,
     "inviter_id" INTEGER REFERENCES users (id),
     "connected_once" BOOLEAN NOT NULL DEFAULT false,
-    "created_at" TIMESTAMP NOT NULL DEFAULT now,
+    "created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
     "metrics_id" TEXT,
     "github_user_id" INTEGER
 );

crates/collab/src/db/queries/contributors.rs 🔗

@@ -42,14 +42,19 @@ impl Database {
                 }
             };
 
-            let Some(user) = user::Entity::find().filter(condition).one(&*tx).await? else {
-                return Ok(None);
-            };
-            let Some(contributor) = contributor::Entity::find_by_id(user.id).one(&*tx).await?
-            else {
-                return Ok(None);
-            };
-            Ok(Some(contributor.signed_at))
+            if let Some(user) = user::Entity::find().filter(condition).one(&*tx).await? {
+                if user.admin {
+                    return Ok(Some(user.created_at));
+                }
+
+                if let Some(contributor) =
+                    contributor::Entity::find_by_id(user.id).one(&*tx).await?
+                {
+                    return Ok(Some(contributor.signed_at));
+                }
+            }
+
+            Ok(None)
         })
         .await
     }

crates/collab/src/db/tables/user.rs 🔗

@@ -17,6 +17,7 @@ pub struct Model {
     pub inviter_id: Option<UserId>,
     pub connected_once: bool,
     pub metrics_id: Uuid,
+    pub created_at: DateTime,
 }
 
 #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]

crates/collab/src/db/tests/db_tests.rs 🔗

@@ -31,44 +31,42 @@ async fn test_get_users(db: &Arc<Database>) {
     }
 
     assert_eq!(
-        db.get_users_by_ids(user_ids.clone()).await.unwrap(),
+        db.get_users_by_ids(user_ids.clone())
+            .await
+            .unwrap()
+            .into_iter()
+            .map(|user| (
+                user.id,
+                user.github_login,
+                user.github_user_id,
+                user.email_address
+            ))
+            .collect::<Vec<_>>(),
         vec![
-            User {
-                id: user_ids[0],
-                github_login: "user1".to_string(),
-                github_user_id: Some(1),
-                email_address: Some("user1@example.com".to_string()),
-                admin: false,
-                metrics_id: user_metric_ids[0].parse().unwrap(),
-                ..Default::default()
-            },
-            User {
-                id: user_ids[1],
-                github_login: "user2".to_string(),
-                github_user_id: Some(2),
-                email_address: Some("user2@example.com".to_string()),
-                admin: false,
-                metrics_id: user_metric_ids[1].parse().unwrap(),
-                ..Default::default()
-            },
-            User {
-                id: user_ids[2],
-                github_login: "user3".to_string(),
-                github_user_id: Some(3),
-                email_address: Some("user3@example.com".to_string()),
-                admin: false,
-                metrics_id: user_metric_ids[2].parse().unwrap(),
-                ..Default::default()
-            },
-            User {
-                id: user_ids[3],
-                github_login: "user4".to_string(),
-                github_user_id: Some(4),
-                email_address: Some("user4@example.com".to_string()),
-                admin: false,
-                metrics_id: user_metric_ids[3].parse().unwrap(),
-                ..Default::default()
-            }
+            (
+                user_ids[0],
+                "user1".to_string(),
+                Some(1),
+                Some("user1@example.com".to_string()),
+            ),
+            (
+                user_ids[1],
+                "user2".to_string(),
+                Some(2),
+                Some("user2@example.com".to_string()),
+            ),
+            (
+                user_ids[2],
+                "user3".to_string(),
+                Some(3),
+                Some("user3@example.com".to_string()),
+            ),
+            (
+                user_ids[3],
+                "user4".to_string(),
+                Some(4),
+                Some("user4@example.com".to_string()),
+            )
         ]
     );
 }