ci: add test (#516)

* ci: add test

* ci: add test

* ci: add readme

* ci: update test
This commit is contained in:
Nathan.fooo 2024-05-02 21:30:23 +08:00 committed by GitHub
parent 60967e51e6
commit eba2e0d4db
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 167 additions and 4 deletions

View File

@ -25,8 +25,7 @@ impl WorkspaceTemplate for GetStartedDocumentTemplate {
async fn create(&self, object_id: String) -> anyhow::Result<TemplateData> {
let data = tokio::task::spawn_blocking(|| {
let json_str = include_str!("../../assets/read_me.json");
let document_data = JsonToDocumentParser::json_str_to_document(json_str).unwrap();
let document_data = get_started_document_data().unwrap();
let collab = Arc::new(MutexCollab::new(Collab::new_with_origin(
CollabOrigin::Empty,
&object_id,
@ -124,3 +123,8 @@ impl WorkspaceTemplate for DocumentTemplate {
self.create(view_id).await
}
}
pub fn get_started_document_data() -> Result<DocumentData, Error> {
let json_str = include_str!("../../assets/read_me.json");
JsonToDocumentParser::json_str_to_document(json_str)
}

View File

@ -123,7 +123,10 @@ where
expect: metadata.workspace_id,
actual: workspace_id.to_string(),
};
warn!("[Realtime]:{}:{}, {}", object_id, collab_type, err);
warn!(
"[Realtime]:user_id:{},object_id:{}:{},error:{}",
uid, object_id, collab_type, err
);
return Err(err);
}
}

View File

@ -7,3 +7,4 @@ mod websocket;
mod workspace;
mod ai_test;
mod yrs_version;

View File

@ -1,4 +1,11 @@
use client_api_test_util::*;
use collab::core::collab::DataSource;
use collab::core::origin::CollabOrigin;
use collab_document::document::Document;
use collab_entity::CollabType;
use database_entity::dto::{QueryCollab, QueryCollabParams};
use std::fs::File;
use std::io::Write;
#[tokio::test]
async fn get_user_default_workspace_test() {
@ -6,10 +13,45 @@ async fn get_user_default_workspace_test() {
let password = "Hello!123#";
let c = localhost_client();
c.sign_up(&email, password).await.unwrap();
let test_client = TestClient::new_user().await;
let mut test_client = TestClient::new_user().await;
let workspace_id = test_client.workspace_id().await;
let folder = test_client.get_user_folder().await;
let views = folder.get_views_belong_to(&test_client.workspace_id().await);
assert_eq!(views.len(), 1);
assert_eq!(views[0].name, "Getting started");
let document_id = views[0].id.clone();
let document =
get_document_collab_from_remote(&mut test_client, workspace_id, &document_id).await;
let document_data = document.get_document_data().unwrap();
assert_eq!(document_data.blocks.len(), 25);
}
async fn get_document_collab_from_remote(
test_client: &mut TestClient,
workspace_id: String,
document_id: &str,
) -> Document {
let params = QueryCollabParams {
workspace_id,
inner: QueryCollab {
object_id: document_id.to_string(),
collab_type: CollabType::Document,
},
};
let resp = test_client.get_collab(params).await.unwrap();
let mut file = File::create("./get_started_encode_collab").unwrap();
// Step 3: Write the Vec<u8> data to the file.
file
.write_all(&resp.encode_collab.encode_to_bytes().unwrap())
.unwrap();
Document::from_doc_state(
CollabOrigin::Empty,
DataSource::DocStateV1(resp.encode_collab.doc_state.to_vec()),
document_id,
vec![],
)
.unwrap()
}

View File

@ -0,0 +1,6 @@
The `yrs_version` test is designed to ensure that data encoded
with an older version of Yrs can be accurately decoded by the
new version of Yrs code. Each time a new version of Yrs is released,
this test should be conducted to verify compatibility with older versions.
Tests should be added and run before updating to a new version of Yrs.

View File

@ -0,0 +1,41 @@
use crate::yrs_version::util::read_bytes_from_file;
use collab::core::collab::DataSource;
use collab::core::origin::CollabOrigin;
use collab::entity::EncodedCollab;
use collab_document::document::Document;
/// Load collaboration data that was encoded using Yjs version 0.17.
#[test]
fn load_yrs_0172_version_get_started_document_using_current_yrs_version() {
let data = read_bytes_from_file("get_started_encode_collab_0172");
let encode_collab = EncodedCollab::decode_from_bytes(&data).unwrap();
let document = Document::from_doc_state(
CollabOrigin::Empty,
DataSource::DocStateV1(encode_collab.doc_state.to_vec()),
"fake_id",
vec![],
)
.unwrap();
let document_data = document.get_document_data().unwrap();
assert_eq!(document_data.blocks.len(), 25);
let first_block = document_data.blocks.get(&document_data.page_id).unwrap();
assert_eq!(first_block.id, document_data.page_id);
let icon_block = document_data.blocks.get("a9SSKQKF4-").unwrap();
let icon_data = icon_block.data.get("icon").unwrap().as_str().unwrap();
assert_eq!(icon_data, "🥰");
let welcome_to_appflowy = document_data
.meta
.text_map
.as_ref()
.unwrap()
.get("OETXfTYZEw")
.unwrap();
assert_eq!(
welcome_to_appflowy,
r#"[{"insert":"Welcome to AppFlowy!"}]"#
);
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,54 @@
use crate::yrs_version::util::read_bytes_from_file;
use collab::core::collab::DataSource;
use collab::core::origin::CollabOrigin;
use collab::entity::EncodedCollab;
use collab_folder::Folder;
/// Load collaboration data that was encoded using Yjs version 0.17.
/// folder structure:
/// favorite: document3
/// person-document2
/// person-document1
/// - person-document1-1
/// - person-document1-2
/// Getting started
/// - document1
/// - document2
/// - document3
///
#[test]
fn load_yrs_0172_version_folder_using_current_yrs_version() {
let data = read_bytes_from_file("folder_encode_collab_0172");
let encode_collab = EncodedCollab::decode_from_bytes(&data).unwrap();
let folder = Folder::from_collab_doc_state(
322319512080748544,
CollabOrigin::Empty,
DataSource::DocStateV1(encode_collab.doc_state.to_vec()),
"fake_id", // just use fake id
vec![],
)
.unwrap();
let workspace_id = folder.get_workspace_id();
let views = folder.get_views_belong_to(&workspace_id);
assert_eq!(views.len(), 3);
assert_eq!(views[0].name, "person-document2");
assert_eq!(views[1].name, "person-document1");
assert_eq!(views[2].name, "Getting started");
let view_1_sub_views = folder.get_views_belong_to(&views[1].id);
assert_eq!(view_1_sub_views.len(), 2);
assert_eq!(view_1_sub_views[0].name, "person-document1-1");
assert_eq!(view_1_sub_views[1].name, "person-document1-2");
let view_2_sub_views = folder.get_views_belong_to(&views[2].id);
assert_eq!(view_2_sub_views.len(), 3);
assert_eq!(view_2_sub_views[0].name, "document1");
assert_eq!(view_2_sub_views[1].name, "document2");
assert_eq!(view_2_sub_views[2].name, "document3");
let favorite_section_items = folder.get_my_favorite_sections();
assert_eq!(favorite_section_items.len(), 1);
assert_eq!(view_2_sub_views[2].id, favorite_section_items[0].id);
}

3
tests/yrs_version/mod.rs Normal file
View File

@ -0,0 +1,3 @@
mod document_test;
mod folder_test;
mod util;

View File

@ -0,0 +1,9 @@
use std::fs::File;
use std::io::Read;
pub(crate) fn read_bytes_from_file(file_name: &str) -> Vec<u8> {
let mut file = File::open(format!("./tests/yrs_version/files/{}", file_name)).unwrap();
let mut buffer = Vec::new();
file.read_to_end(&mut buffer).unwrap();
buffer
}