@@ -44,6 +44,82 @@ void main() {
4444 expect (versionAfter3['schema_version' ],
4545 greaterThan (versionAfter2['schema_version' ] as int ));
4646 });
47+
48+ group ('metadata' , () {
49+ // This is a special because we have two delete triggers when
50+ // include_metadata is true (one for actual `DELETE` statements and one
51+ // for `UPDATE ... SET _deleted = TRUE` that allows attaching metadata).
52+ Object createSchema (bool withMetadata) {
53+ return {
54+ "tables" : [
55+ {
56+ "name" : "customers" ,
57+ "view_name" : null ,
58+ "local_only" : false ,
59+ "insert_only" : false ,
60+ "include_metadata" : withMetadata,
61+ "columns" : [
62+ {"name" : "name" , "type" : "TEXT" },
63+ {"name" : "email" , "type" : "TEXT" }
64+ ],
65+ "indexes" : []
66+ },
67+ ]
68+ };
69+ }
70+
71+ test ('enabling' , () {
72+ db.execute ('SELECT powersync_replace_schema(?)' ,
73+ [json.encode (createSchema (false ))]);
74+ expect (
75+ db.select ("select * from sqlite_schema where type = 'trigger' "
76+ "AND tbl_name = 'customers' "
77+ "AND name GLOB 'ps_view_delete*'" ),
78+ hasLength (1 ),
79+ );
80+
81+ db.execute ('SELECT powersync_replace_schema(?)' ,
82+ [json.encode (createSchema (true ))]);
83+ expect (
84+ db.select ("select * from sqlite_schema where type = 'trigger' "
85+ "AND tbl_name = 'customers' "
86+ "AND name GLOB 'ps_view_delete*'" ),
87+ hasLength (2 ),
88+ );
89+ });
90+
91+ test ('unchanged' , () {
92+ final schema = createSchema (true );
93+ db.execute ('SELECT powersync_replace_schema(?)' , [json.encode (schema)]);
94+
95+ final [versionBefore] = db.select ('PRAGMA schema_version' );
96+ db.execute ('SELECT powersync_replace_schema(?)' , [json.encode (schema)]);
97+ final [versionAfter] = db.select ('PRAGMA schema_version' );
98+
99+ expect (versionAfter['schema_version' ],
100+ equals (versionBefore['schema_version' ]));
101+ });
102+
103+ test ('disabling' , () {
104+ db.execute ('SELECT powersync_replace_schema(?)' ,
105+ [json.encode (createSchema (true ))]);
106+ expect (
107+ db.select ("select * from sqlite_schema where type = 'trigger' "
108+ "AND tbl_name = 'customers' "
109+ "AND name GLOB 'ps_view_delete*'" ),
110+ hasLength (2 ),
111+ );
112+
113+ db.execute ('SELECT powersync_replace_schema(?)' ,
114+ [json.encode (createSchema (false ))]);
115+ expect (
116+ db.select ("select * from sqlite_schema where type = 'trigger' "
117+ "AND tbl_name = 'customers' "
118+ "AND name GLOB 'ps_view_delete*'" ),
119+ hasLength (1 ),
120+ );
121+ });
122+ });
47123 });
48124}
49125
0 commit comments