util.rs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. use std::ops::Deref;
  2. use std::time::Duration;
  3. use tokio::sync::mpsc::Receiver;
  4. use tokio::time::timeout;
  5. use flowy_server_config::supabase_config::SupabaseConfiguration;
  6. use flowy_test::event_builder::EventBuilder;
  7. use flowy_test::FlowyCoreTest;
  8. use flowy_user::entities::{
  9. AuthTypePB, UpdateUserProfilePayloadPB, UserCredentialsPB, UserProfilePB,
  10. };
  11. use flowy_user::errors::FlowyError;
  12. use flowy_user::event_map::UserCloudServiceProvider;
  13. use flowy_user::event_map::UserEvent::*;
  14. use flowy_user_deps::entities::AuthType;
  15. pub fn get_supabase_config() -> Option<SupabaseConfiguration> {
  16. dotenv::from_path(".env.test").ok()?;
  17. SupabaseConfiguration::from_env().ok()
  18. }
  19. pub struct FlowySupabaseTest {
  20. inner: FlowyCoreTest,
  21. }
  22. impl FlowySupabaseTest {
  23. pub fn new() -> Option<Self> {
  24. let _ = get_supabase_config()?;
  25. let test = FlowyCoreTest::new();
  26. test.set_auth_type(AuthTypePB::Supabase);
  27. test.server_provider.set_auth_type(AuthType::Supabase);
  28. Some(Self { inner: test })
  29. }
  30. pub async fn check_user_with_uuid(&self, uuid: &str) -> Result<(), FlowyError> {
  31. match EventBuilder::new(self.inner.clone())
  32. .event(CheckUser)
  33. .payload(UserCredentialsPB::from_uuid(uuid))
  34. .async_send()
  35. .await
  36. .error()
  37. {
  38. None => Ok(()),
  39. Some(error) => Err(error),
  40. }
  41. }
  42. pub async fn get_user_profile(&self) -> Result<UserProfilePB, FlowyError> {
  43. EventBuilder::new(self.inner.clone())
  44. .event(GetUserProfile)
  45. .async_send()
  46. .await
  47. .try_parse::<UserProfilePB>()
  48. }
  49. pub async fn update_user_profile(
  50. &self,
  51. payload: UpdateUserProfilePayloadPB,
  52. ) -> Option<FlowyError> {
  53. EventBuilder::new(self.inner.clone())
  54. .event(UpdateUserProfile)
  55. .payload(payload)
  56. .async_send()
  57. .await
  58. .error()
  59. }
  60. }
  61. impl Deref for FlowySupabaseTest {
  62. type Target = FlowyCoreTest;
  63. fn deref(&self) -> &Self::Target {
  64. &self.inner
  65. }
  66. }
  67. pub async fn receive_with_timeout<T>(
  68. receiver: &mut Receiver<T>,
  69. duration: Duration,
  70. ) -> Result<T, Box<dyn std::error::Error>> {
  71. let res = timeout(duration, receiver.recv())
  72. .await?
  73. .ok_or(anyhow::anyhow!("recv timeout"))?;
  74. Ok(res)
  75. }