@@ -44,6 +44,82 @@ void main() {
44
44
expect (versionAfter3['schema_version' ],
45
45
greaterThan (versionAfter2['schema_version' ] as int ));
46
46
});
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
+ });
47
123
});
48
124
}
49
125
0 commit comments