Skip to content

Commit 1e14c92

Browse files
committed
feat: delete test
1 parent 442f56f commit 1e14c92

File tree

4 files changed

+197
-10
lines changed

4 files changed

+197
-10
lines changed

packages/arcade_orm/example/api/basic.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ class ArcadeOrmMockAdapter
6565
}
6666

6767
Future<dynamic> orming() async {
68-
final a = await ArcadeOrm.init(
68+
final orm = await ArcadeOrm.init(
6969
adapter: ArcadeOrmMockAdapter(connection: ""),
7070
);
7171

72-
final t = a.table(
72+
final userTable = orm.table(
7373
"users",
7474
{
7575
"id": ColumnInt()..nullable(),
@@ -78,17 +78,17 @@ Future<dynamic> orming() async {
7878
},
7979
);
8080

81-
t.index({"id": 1, "name": 1});
81+
userTable.index({"id": 1, "name": 1});
8282

83-
final trx = t.transaction();
83+
final trx = userTable.transaction();
8484
await trx.start();
85-
t.findOne(transaction: trx);
85+
userTable.findOne(transaction: trx);
8686
trx.commit();
8787
trx.rollback();
8888

89-
final data = await t.transaction().start(
89+
final data = await userTable.transaction().start(
9090
(trx) async {
91-
final r = t.findOne(transaction: trx)
91+
final r = userTable.findOne(transaction: trx)
9292
..where({
9393
"id": array([1, 2, 4]),
9494
})

packages/arcade_orm/lib/src/query.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ class ArcadeOrmTableFindOperator {
217217
_operator = operator,
218218
_orm = orm;
219219

220-
Future<ExecResult> exec<T>({
220+
Future<ExecResult<T>> exec<T>({
221221
ArcadeOrmTableFromConverter<T>? fromJson,
222222
}) async {
223223
try {
@@ -237,7 +237,7 @@ class ArcadeOrmTableFindOperator {
237237

238238
final convertedData = await fromJson?.call(data);
239239

240-
return ExecResultData(convertedData ?? data);
240+
return ExecResultData(convertedData ?? data as T);
241241
} on ArcadeOrmException catch (e) {
242242
return ExecResultFailure(e);
243243
} catch (e) {
@@ -262,13 +262,15 @@ class ArcadeOrmTableFindOperator {
262262
void include(
263263
String tableName, {
264264
String? on,
265+
String? as,
265266
Map<String, WhereParamBuilder>? where,
266267
JoinOperation joinType = JoinOperation.inner,
267268
}) {
268269
_includeParams.add(
269270
IncludeParam(
270271
tableName,
271272
on: on,
273+
as: as,
272274
where: where,
273275
joinType: joinType,
274276
),
@@ -557,11 +559,13 @@ class ExecResultFailure<T> extends ExecResult<T> {
557559
class IncludeParam {
558560
final String tableName;
559561
final String? on;
562+
final String? as;
560563
final JoinOperation joinType;
561564
Map<String, WhereParam>? where;
562565
IncludeParam(
563566
this.tableName, {
564567
this.on,
568+
this.as,
565569
this.joinType = JoinOperation.inner,
566570
Map<String, WhereParamBuilder>? where,
567571
}) {

packages/arcade_orm/test/src/query/create_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ void main() {
123123
});
124124
});
125125

126-
test("create db record - failure", () async {
126+
test("db record - failure", () async {
127127
when(
128128
() => mockAdapter.operate(
129129
operator: TableOperator.create,
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
import 'package:arcade_orm/arcade_orm.dart';
2+
import 'package:mocktail/mocktail.dart';
3+
import 'package:test/test.dart';
4+
5+
class MockAdapter extends Mock implements ArcadeOrmAdapterBase {}
6+
7+
class MockTransaction extends Mock implements ArcadeOrmTransaction {}
8+
9+
class FakeWhereParam extends Fake implements WhereParam {}
10+
11+
void main() {
12+
final mockAdapter = MockAdapter();
13+
final mockTransaction = MockTransaction();
14+
15+
group('delete', () {
16+
setUp(() {
17+
registerFallbackValue(FakeWhereParam());
18+
when(() => mockAdapter.transaction()).thenReturn(mockTransaction);
19+
});
20+
21+
tearDown(() {
22+
clearOrms();
23+
reset(mockAdapter);
24+
reset(mockTransaction);
25+
});
26+
27+
group("success", () {
28+
setUp(() {
29+
when(
30+
() => mockAdapter.operate(
31+
operator: TableOperator.delete,
32+
transaction: null,
33+
isExplain: false,
34+
whereParams: any(named: "whereParams"),
35+
),
36+
).thenAnswer(
37+
(_) => Future.value({"deleted": 1}),
38+
);
39+
});
40+
41+
tearDown(() {
42+
clearOrms();
43+
reset(mockAdapter);
44+
reset(mockTransaction);
45+
});
46+
47+
test("operate", () async {
48+
final arcadeOrm = await ArcadeOrm.init(
49+
adapter: mockAdapter,
50+
);
51+
final table = arcadeOrm.table(
52+
"users",
53+
{},
54+
);
55+
final deleteQuery = table.delete()
56+
..where({"id": eq(1)})
57+
..include("role", where: {"name": notEq("admin")});
58+
59+
await deleteQuery.exec();
60+
61+
final captured = verify(
62+
() => mockAdapter.operate(
63+
operator: TableOperator.delete,
64+
transaction: null,
65+
isExplain: false,
66+
whereParams: captureAny(named: "whereParams"),
67+
havingParams: [],
68+
selectParams: [],
69+
includeParams: captureAny(named: "includeParams"),
70+
groupParams: [],
71+
sortParams: [],
72+
updateWithParams: [],
73+
createWithParams: [],
74+
),
75+
).captured;
76+
final capturedWhereParams =
77+
(captured.first as List<Map<String, WhereParam>>).first['id'];
78+
expect(
79+
capturedWhereParams?.value,
80+
equals(1),
81+
);
82+
expect(
83+
capturedWhereParams?.operator,
84+
equals(WhereOperator.eq),
85+
);
86+
final capturedIncludeParams = (captured[1] as List<IncludeParam>).first;
87+
expect(capturedIncludeParams.tableName, equals("role"));
88+
expect(
89+
capturedIncludeParams.where?["name"]?.operator,
90+
equals(WhereOperator.notEq),
91+
);
92+
expect(
93+
capturedIncludeParams.where?["name"]?.value,
94+
equals("admin"),
95+
);
96+
expect(capturedIncludeParams.as, equals(null));
97+
expect(capturedIncludeParams.on, equals(null));
98+
expect(capturedIncludeParams.joinType, equals(JoinOperation.inner));
99+
});
100+
101+
test("data", () async {
102+
final arcadeOrm = await ArcadeOrm.init(
103+
adapter: mockAdapter,
104+
);
105+
final table = arcadeOrm.table(
106+
"users",
107+
{},
108+
);
109+
final deleteQuery = table.delete()..where({"id": eq(1)});
110+
final data = await deleteQuery.exec();
111+
expect(data, isA<ExecResultData>());
112+
expect((data as ExecResultData).data, equals({"deleted": 1}));
113+
});
114+
115+
test("operate with transaction", () async {
116+
when(() => mockTransaction.start())
117+
.thenAnswer((_) async => Future.value());
118+
final arcadeOrm = await ArcadeOrm.init(
119+
adapter: mockAdapter,
120+
);
121+
final table = arcadeOrm.table(
122+
"users",
123+
{},
124+
);
125+
final trx = table.transaction();
126+
await trx.start();
127+
final deleteQuery = table.delete(transaction: trx)
128+
..where({"id": eq(1)});
129+
await deleteQuery.exec();
130+
final captured = verify(
131+
() => mockAdapter.operate(
132+
operator: TableOperator.delete,
133+
transaction: trx,
134+
isExplain: false,
135+
whereParams: captureAny(named: "whereParams"),
136+
havingParams: [],
137+
selectParams: [],
138+
includeParams: [],
139+
groupParams: [],
140+
sortParams: [],
141+
updateWithParams: [],
142+
createWithParams: [],
143+
),
144+
).captured;
145+
146+
final capturedWhereParams =
147+
(captured.first as List<Map<String, WhereParam>>).first['id'];
148+
expect(
149+
capturedWhereParams?.value,
150+
equals(1),
151+
);
152+
expect(
153+
capturedWhereParams?.operator,
154+
equals(WhereOperator.eq),
155+
);
156+
});
157+
});
158+
159+
test("db record - failure", () async {
160+
when(
161+
() => mockAdapter.operate(
162+
operator: TableOperator.delete,
163+
transaction: null,
164+
isExplain: false,
165+
whereParams: any(named: "whereParams"),
166+
),
167+
).thenThrow(
168+
ArcadeOrmException(message: "Delete Failed", originalError: null),
169+
);
170+
final arcadeOrm = await ArcadeOrm.init(
171+
adapter: mockAdapter,
172+
);
173+
final table = arcadeOrm.table(
174+
"users",
175+
{},
176+
);
177+
final createQuery = table.delete()..where({"id": eq(1)});
178+
final data = await createQuery.exec();
179+
expect(data, isA<ExecResultFailure>());
180+
expect((data as ExecResultFailure).exception.message, "Delete Failed");
181+
});
182+
});
183+
}

0 commit comments

Comments
 (0)