Skip to content

Commit f459c79

Browse files
Generator: test adding entity "in between" existing entities.
1 parent 84d635e commit f459c79

File tree

7 files changed

+146
-9
lines changed

7 files changed

+146
-9
lines changed

generator/integration-tests/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ used to further prepare the environment **before** code generation for the step
2424
```
2525
Invalid argument(s): Failed to load dynamic library 'lib/objectbox.dll'
2626
```
27-
Ensure `objectbox-c` is installed globally (required on Linux), or in the tested directory run [`../../../install.sh`](../../install.sh).
27+
Ensure `objectbox-c` is installed globally, or in the tested directory run [`../../../install.sh`](../../install.sh).
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import 'dart:io';
2+
3+
void main() {
4+
// Goals:
5+
// * add a new entity lexicographically in between the existing ones to check
6+
// that IDs are not re-assigned.
7+
8+
File('lib/entities.dart').writeAsStringSync('''
9+
import 'package:objectbox/objectbox.dart';
10+
11+
@Entity()
12+
class A {
13+
int? id;
14+
15+
String? text1;
16+
17+
@Property(uid: 1003)
18+
String? text2;
19+
20+
@Property(uid: 1004)
21+
final relOne = ToOne<B>();
22+
23+
@Property(uid: 1005)
24+
final relMany = ToMany<B>();
25+
26+
A();
27+
}
28+
29+
@Entity()
30+
class A1 {
31+
int? id;
32+
33+
A1();
34+
}
35+
36+
@Entity(uid: 2000)
37+
class B {
38+
int? id;
39+
40+
bool? value;
41+
42+
B();
43+
}
44+
''');
45+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import 'dart:io';
2+
3+
import 'package:io/io.dart';
4+
import 'package:test/test.dart';
5+
6+
import '../common.dart';
7+
import 'lib/lib.dart';
8+
import 'lib/objectbox.g.dart';
9+
10+
void main() {
11+
final defs = getObjectBoxModel();
12+
final jsonModel = readModelJson('lib');
13+
commonModelTests(defs, jsonModel);
14+
15+
test('ensure current model looks like expected', () {
16+
final model = defs.model;
17+
18+
expect(model.entities.length, 3);
19+
20+
expect(model.entities[0].name, 'A');
21+
expect(model.entities[0].properties.length, 4);
22+
expect(model.entities[0].properties[0].name, 'id');
23+
expect(model.entities[0].properties[1].name, 'text1');
24+
expect(model.entities[0].properties[2].name, 'text2');
25+
expect(model.entities[0].properties[3].name, 'relOneId');
26+
expect(model.entities[0].properties[3].relationTarget, 'B');
27+
28+
expect(model.entities[0].relations.length, 1);
29+
expect(model.entities[0].relations[0].name, 'relMany');
30+
expect(model.entities[0].relations[0].targetId.toString(), '2:2000');
31+
32+
expect(model.entities[1].name, 'B');
33+
expect(model.entities[1].properties.length, 2);
34+
expect(model.entities[1].properties[0].name, 'id');
35+
expect(model.entities[1].properties[1].name, 'value');
36+
37+
expect(model.entities[2].name, 'A1');
38+
expect(model.entities[2].properties.length, 1);
39+
expect(model.entities[2].properties[0].name, 'id');
40+
41+
expect(model.lastEntityId.toString(), model.entities[2].id.toString());
42+
43+
expect(jsonModel.retiredEntityUids.length, 0);
44+
expect(jsonModel.retiredPropertyUids.length, 0);
45+
expect(jsonModel.retiredIndexUids.length, 0);
46+
});
47+
48+
/// test the data has been migrated from the previous version
49+
test('data', () {
50+
final srcDir = Directory('objectbox.2');
51+
final tarDir = Directory('objectbox.3');
52+
53+
expect(srcDir.existsSync(), isTrue);
54+
if (tarDir.existsSync()) tarDir.deleteSync(recursive: true);
55+
copyPathSync(srcDir.path, tarDir.path);
56+
57+
final store = Store(defs, directory: tarDir.path);
58+
final boxA = Box<A>(store);
59+
final boxB = Box<B>(store);
60+
61+
expect(boxA.count(), 3);
62+
expect(boxB.count(), 1);
63+
64+
store.close();
65+
});
66+
}

generator/integration-tests/changes/4-pre.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ class A {
2828
A();
2929
}
3030
31+
@Entity()
32+
class A1 {
33+
int? id;
34+
35+
A1();
36+
}
37+
3138
@Entity(uid: 2000)
3239
class Renamed {
3340
int? id;

generator/integration-tests/changes/4.dart

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import 'dart:io';
2+
23
import 'package:io/io.dart';
34
import 'package:test/test.dart';
5+
6+
import '../common.dart';
47
import 'lib/lib.dart';
58
import 'lib/objectbox.g.dart';
6-
import '../common.dart';
79

810
void main() {
911
final defs = getObjectBoxModel();
@@ -13,7 +15,7 @@ void main() {
1315
test('ensure current model looks like expected', () {
1416
final model = defs.model;
1517

16-
expect(model.entities.length, 2);
18+
expect(model.entities.length, 3);
1719

1820
expect(model.entities[0].name, 'A');
1921
expect(model.entities[0].properties.length, 4);
@@ -32,7 +34,11 @@ void main() {
3234
expect(model.entities[1].properties[0].name, 'id');
3335
expect(model.entities[1].properties[1].name, 'value');
3436

35-
expect(model.lastEntityId.toString(), model.entities[1].id.toString());
37+
expect(model.entities[2].name, 'A1');
38+
expect(model.entities[2].properties.length, 1);
39+
expect(model.entities[2].properties[0].name, 'id');
40+
41+
expect(model.lastEntityId.toString(), model.entities[2].id.toString());
3642

3743
expect(jsonModel.retiredEntityUids.length, 0);
3844
expect(jsonModel.retiredPropertyUids.length, 0);
@@ -41,8 +47,8 @@ void main() {
4147

4248
/// test the data has been migrated from the previous version and prepare new data for the next step
4349
test('data', () {
44-
final srcDir = Directory('objectbox.2');
45-
final tarDir = Directory('objectbox.3');
50+
final srcDir = Directory('objectbox.3');
51+
final tarDir = Directory('objectbox.4');
4652

4753
expect(srcDir.existsSync(), isTrue);
4854
if (tarDir.existsSync()) tarDir.deleteSync(recursive: true);

generator/integration-tests/changes/5-pre.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,12 @@ class A {
1616
1717
A();
1818
}
19+
20+
@Entity()
21+
class A1 {
22+
int? id;
23+
24+
A1();
25+
}
1926
''');
2027
}

generator/integration-tests/changes/5.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:test/test.dart';
2-
import 'lib/objectbox.g.dart';
2+
33
import '../common.dart';
4+
import 'lib/objectbox.g.dart';
45

56
void main() {
67
final defs = getObjectBoxModel();
@@ -10,7 +11,7 @@ void main() {
1011
test('ensure current model looks like expected', () {
1112
final model = defs.model;
1213

13-
expect(model.entities.length, 1);
14+
expect(model.entities.length, 2);
1415

1516
expect(model.entities[0].name, 'A');
1617
expect(model.entities[0].properties.length, 1);
@@ -19,7 +20,12 @@ void main() {
1920

2021
expect(model.entities[0].relations.length, 0);
2122

22-
expect(model.lastEntityId.toString(), '2:2000');
23+
expect(model.entities[1].name, 'A1');
24+
expect(model.entities[1].properties.length, 1);
25+
expect(model.entities[1].properties[0].name, 'id');
26+
27+
// Last ID should not change even after B was removed.
28+
expect(model.lastEntityId.toString(), model.entities[1].id.toString());
2329
// lastRelationId is kept even if the relation itself is removed.
2430
expect(model.lastRelationId.toString(), '1:1005');
2531

0 commit comments

Comments
 (0)