buffer_tests.rs

 1use super::*;
 2use crate::test_both_dbs;
 3use language::proto;
 4use text::Buffer;
 5
 6test_both_dbs!(test_buffers, test_buffers_postgres, test_buffers_sqlite);
 7
 8async fn test_buffers(db: &Arc<Database>) {
 9    // Prep database test info
10    let a_id = db
11        .create_user(
12            "user_a@example.com",
13            false,
14            NewUserParams {
15                github_login: "user_a".into(),
16                github_user_id: 101,
17                invite_count: 0,
18            },
19        )
20        .await
21        .unwrap()
22        .user_id;
23    let b_id = db
24        .create_user(
25            "user_b@example.com",
26            false,
27            NewUserParams {
28                github_login: "user_b".into(),
29                github_user_id: 102,
30                invite_count: 0,
31            },
32        )
33        .await
34        .unwrap()
35        .user_id;
36    // This user will not be a part of the channel
37    let c_id = db
38        .create_user(
39            "user_b@example.com",
40            false,
41            NewUserParams {
42                github_login: "user_b".into(),
43                github_user_id: 102,
44                invite_count: 0,
45            },
46        )
47        .await
48        .unwrap()
49        .user_id;
50
51    let zed_id = db.create_root_channel("zed", "1", a_id).await.unwrap();
52
53    db.invite_channel_member(zed_id, b_id, a_id, false)
54        .await
55        .unwrap();
56
57    db.respond_to_channel_invite(zed_id, b_id, true)
58        .await
59        .unwrap();
60
61    // TODO: Join buffer
62    let buffer_id = db.get_or_create_buffer_for_channel(zed_id);
63
64    let mut buffer = Buffer::new(0, 0, "".to_string());
65    let mut operations = Vec::new();
66    operations.push(buffer.edit([(0..0, "hello world")]));
67    operations.push(buffer.edit([(5..5, ", cruel")]));
68    operations.push(buffer.edit([(0..5, "goodbye")]));
69    operations.push(buffer.undo().unwrap().1);
70    assert_eq!(buffer.text(), "hello, cruel world");
71
72    let operations = operations
73        .into_iter()
74        .map(|op| proto::serialize_operation(&language::Operation::Buffer(op)))
75        .collect::<Vec<_>>();
76
77    db.update_buffer(buffer_id, &operations).await.unwrap();
78
79    let buffer_data = db.open_buffer(buffer_id).await.unwrap();
80
81    let mut buffer_2 = Buffer::new(0, 0, buffer_data.base_text);
82    buffer_2
83        .apply_ops(buffer_data.operations.into_iter().map(|operation| {
84            let operation = proto::deserialize_operation(operation).unwrap();
85            if let language::Operation::Buffer(operation) = operation {
86                operation
87            } else {
88                unreachable!()
89            }
90        }))
91        .unwrap();
92
93    assert_eq!(buffer_2.text(), "hello, cruel world");
94}