1
1
using System ;
2
- using System . Linq ;
3
- using dotnet ;
2
+ using System . IO ;
3
+ using System . Linq ;
4
+ using System . Threading . Tasks ;
5
+ using dotnet ;
4
6
using MongoDB . Bson ;
5
7
using NUnit . Framework ;
6
8
using Realms ;
7
9
using Realms . Sync ;
10
+ using TaskStatus = dotnet . TaskStatus ;
8
11
9
12
namespace UnitTests
10
13
{
@@ -17,20 +20,21 @@ public class Examples
17
20
const string myRealmAppId = "tuts-tijya" ;
18
21
19
22
[ SetUp ]
20
- public async System . Threading . Tasks . Task Setup ( )
23
+ public async Task Setup ( )
21
24
{
22
25
// :code-block-start: initialize-realm
23
26
app = App . Create ( myRealmAppId ) ;
24
27
// :code-block-end:
25
28
user = app . LogInAsync ( Credentials . EmailPassword ( "[email protected] " , "foobar" ) ) . Result ;
29
+ // :code-block-start: open-synced-realm
26
30
config = new SyncConfiguration ( "My Project" , user ) ;
27
- Realm realm = await Realm . GetInstanceAsync ( config ) ;
31
+ var realm = await Realm . GetInstanceAsync ( config ) ;
28
32
// :code-block-end:
29
33
// :code-block-start: open-synced-realm-sync
30
- Realm synchronousRealm = Realm . GetInstance ( config ) ;
34
+ var synchronousRealm = Realm . GetInstance ( config ) ;
31
35
// :code-block-end:
32
36
// :code-block-start: create
33
- RealmTask testTask = new RealmTask
37
+ var testTask = new RealmTask
34
38
{
35
39
Name = "Do this thing" ,
36
40
Status = TaskStatus . Open . ToString ( )
@@ -46,33 +50,73 @@ public async System.Threading.Tasks.Task Setup()
46
50
}
47
51
48
52
[ Test ]
49
- public async System . Threading . Tasks . Task GetsSyncedTasks ( )
53
+ public void OpensLocalRealm ( )
54
+ {
55
+ var pathToDb = Directory . GetCurrentDirectory ( ) + "/db" ;
56
+ if ( ! File . Exists ( pathToDb ) )
57
+ {
58
+ Directory . CreateDirectory ( pathToDb ) ;
59
+ }
60
+ var tempConfig = new RealmConfiguration ( pathToDb + "/my.realm" )
61
+ {
62
+ IsReadOnly = false ,
63
+ } ;
64
+ var realm = Realm . GetInstance ( tempConfig ) ;
65
+
66
+ // :code-block-start: dispose
67
+ realm . Dispose ( ) ;
68
+ // :code-block-end:
69
+
70
+ // :code-block-start: local-realm
71
+ var config = new RealmConfiguration ( pathToDb + "/my.realm" )
72
+ {
73
+ IsReadOnly = true ,
74
+ } ;
75
+ var localRealm = Realm . GetInstance ( config ) ;
76
+ // :code-block-end:
77
+ Assert . IsNotNull ( localRealm ) ;
78
+
79
+ Directory . Delete ( pathToDb , true ) ;
80
+ }
81
+
82
+ [ Test ]
83
+ public async Task GetsSyncedTasks ( )
50
84
{
51
85
// :code-block-start: anon-login
52
- User user = app . LogInAsync ( Credentials . Anonymous ( ) ) . Result ;
86
+ var user = app . LogInAsync ( Credentials . Anonymous ( ) ) . Result ;
53
87
// :code-block-end:
54
88
// :code-block-start: config
55
89
config = new SyncConfiguration ( "My Project" , user ) ;
56
- Realm realm = await Realm . GetInstanceAsync ( config ) ;
90
+ var realm = await Realm . GetInstanceAsync ( config ) ;
57
91
// :code-block-end:
58
92
// :code-block-start: read-all
59
93
var tasks = realm . All < RealmTask > ( ) ;
60
94
// :code-block-end:
61
- Assert . AreEqual ( 1 , tasks . Count ( ) ) ;
95
+ Assert . AreEqual ( 1 , tasks . Count ( ) , "Get All" ) ;
62
96
// :code-block-start: read-some
63
97
tasks = realm . All < RealmTask > ( ) . Where ( t => t . Status == "Open" ) ;
64
98
// :code-block-end:
65
- Assert . AreEqual ( 1 , tasks . Count ( ) ) ;
99
+ Assert . AreEqual ( 1 , tasks . Count ( ) , "Get Some" ) ;
66
100
return ;
67
101
}
68
102
69
103
[ Test ]
70
- public async System . Threading . Tasks . Task ModifiesATask ( )
104
+ public async Task ScopesARealm ( )
71
105
{
106
+ // :code-block-start: scope
72
107
config = new SyncConfiguration ( "My Project" , user ) ;
73
- Realm realm = await Realm . GetInstanceAsync ( config ) ;
108
+ using var realm = await Realm . GetInstanceAsync ( config ) ;
109
+ var allTasks = realm . All < RealmTask > ( ) ;
110
+ // :code-block-end:
111
+ }
112
+
113
+ [ Test ]
114
+ public async Task ModifiesATask ( )
115
+ {
116
+ config = new SyncConfiguration ( "My Project" , user ) ;
117
+ var realm = await Realm . GetInstanceAsync ( config ) ;
74
118
// :code-block-start: modify
75
- RealmTask t = realm . All < RealmTask > ( )
119
+ var t = realm . All < RealmTask > ( )
76
120
. Where ( t => t . Id == testTaskId )
77
121
. FirstOrDefault ( ) ;
78
122
@@ -90,51 +134,61 @@ public async System.Threading.Tasks.Task ModifiesATask()
90
134
}
91
135
92
136
[ Test ]
93
- public async System . Threading . Tasks . Task LogsOnManyWays ( )
137
+ public async Task LogsOnManyWays ( )
94
138
{
95
- // :code-block-start: logon_anon
96
- User anonUser = await app . LogInAsync ( Credentials . Anonymous ( ) ) ;
97
- // :code-block-end:
98
- Assert . AreEqual ( UserState . LoggedIn , anonUser . State ) ;
99
- await anonUser . LogOutAsync ( ) ;
100
- // :code-block-start: logon_EP
101
- User emailUser = await app . LogInAsync (
102
- Credentials . EmailPassword ( "[email protected] " , "shhhItsASektrit!" ) ) ;
103
- // :code-block-end:
104
- Assert . AreEqual ( UserState . LoggedIn , emailUser . State ) ;
105
- await emailUser . LogOutAsync ( ) ;
106
- var apiKey = "eRECwv1e6gkLEse99XokWOgegzoguEkwmvYvXk08zAucG4kXmZu7TTgV832SwFCv" ;
107
- // :code-block-start: logon_API
108
- User apiUser = await app . LogInAsync ( Credentials . ApiKey ( apiKey ) ) ;
109
- // :code-block-end:
110
- Assert . AreEqual ( UserState . LoggedIn , apiUser . State ) ;
111
- await apiUser . LogOutAsync ( ) ;
112
- // :code-block-start: logon_Function
113
- var functionParameters = new
114
- {
115
- username = "caleb" ,
116
- password = "shhhItsASektrit!" ,
117
- IQ = 42 ,
118
- isCool = false
119
- } ;
139
+ {
140
+ // :code-block-start: logon_anon
141
+ var user = await app . LogInAsync ( Credentials . Anonymous ( ) ) ;
142
+ // :code-block-end:
143
+ Assert . AreEqual ( UserState . LoggedIn , user . State ) ;
144
+ await user . LogOutAsync ( ) ;
145
+ }
146
+ {
147
+ // :code-block-start: logon_EP
148
+ var user = await app . LogInAsync (
149
+ Credentials . EmailPassword ( "[email protected] " , "shhhItsASektrit!" ) ) ;
150
+ // :code-block-end:
151
+ Assert . AreEqual ( UserState . LoggedIn , user . State ) ;
152
+ await user . LogOutAsync ( ) ;
153
+ }
154
+ {
155
+ var apiKey = "eRECwv1e6gkLEse99XokWOgegzoguEkwmvYvXk08zAucG4kXmZu7TTgV832SwFCv" ;
156
+ // :code-block-start: logon_API
157
+ var user = await app . LogInAsync ( Credentials . ApiKey ( apiKey ) ) ;
158
+ // :code-block-end:
159
+ Assert . AreEqual ( UserState . LoggedIn , user . State ) ;
160
+ await user . LogOutAsync ( ) ;
161
+ }
162
+ {
163
+ // :code-block-start: logon_Function
164
+ var functionParameters = new
165
+ {
166
+ username = "caleb" ,
167
+ password = "shhhItsASektrit!" ,
168
+ IQ = 42 ,
169
+ isCool = false
170
+ } ;
120
171
121
- User functionUser =
122
- await app . LogInAsync ( Credentials . Function ( functionParameters ) ) ;
123
- // :code-block-end:
124
- Assert . AreEqual ( UserState . LoggedIn , functionUser . State ) ;
125
- await functionUser . LogOutAsync ( ) ;
126
- var jwt_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkNhbGViIiwiaWF0IjoxNjAxNjc4ODcyLCJleHAiOjI1MTYyMzkwMjIsImF1ZCI6InR1dHMtdGlqeWEifQ.LHbeSI2FDWrlUVOBxe-rasuFiW-etv2Gu5e3eAa6Y6k" ;
127
- // :code-block-start: logon_JWT
128
- User jwtUser =
129
- await app . LogInAsync ( Credentials . JWT ( jwt_token ) ) ;
130
- // :code-block-end:
131
- Assert . AreEqual ( UserState . LoggedIn , jwtUser . State ) ;
132
- await jwtUser . LogOutAsync ( ) ;
172
+ var user =
173
+ await app . LogInAsync ( Credentials . Function ( functionParameters ) ) ;
174
+ // :code-block-end:
175
+ Assert . AreEqual ( UserState . LoggedIn , user . State ) ;
176
+ await user . LogOutAsync ( ) ;
177
+ }
178
+ {
179
+ var jwt_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkNhbGViIiwiaWF0IjoxNjAxNjc4ODcyLCJleHAiOjI1MTYyMzkwMjIsImF1ZCI6InR1dHMtdGlqeWEifQ.LHbeSI2FDWrlUVOBxe-rasuFiW-etv2Gu5e3eAa6Y6k" ;
180
+ // :code-block-start: logon_JWT
181
+ var user =
182
+ await app . LogInAsync ( Credentials . JWT ( jwt_token ) ) ;
183
+ // :code-block-end:
184
+ Assert . AreEqual ( UserState . LoggedIn , user . State ) ;
185
+ await user . LogOutAsync ( ) ;
186
+ }
133
187
try
134
188
{
135
189
var facebookToken = "" ;
136
190
// :code-block-start: logon_fb
137
- User fbUser =
191
+ var user =
138
192
await app . LogInAsync ( Credentials . Facebook ( facebookToken ) ) ;
139
193
// :code-block-end:
140
194
}
@@ -146,7 +200,7 @@ public async System.Threading.Tasks.Task LogsOnManyWays()
146
200
{
147
201
var googleAuthCode = "" ;
148
202
// :code-block-start: logon_google
149
- User googleUser =
203
+ var user =
150
204
await app . LogInAsync ( Credentials . Google ( googleAuthCode ) ) ;
151
205
// :code-block-end:
152
206
}
@@ -158,7 +212,7 @@ public async System.Threading.Tasks.Task LogsOnManyWays()
158
212
{
159
213
var appleToken = "" ;
160
214
// :code-block-start: logon_apple
161
- User appleUser =
215
+ var user =
162
216
await app . LogInAsync ( Credentials . Apple ( appleToken ) ) ;
163
217
// :code-block-end:
164
218
}
@@ -169,21 +223,65 @@ public async System.Threading.Tasks.Task LogsOnManyWays()
169
223
}
170
224
}
171
225
226
+ [ Test ]
227
+ public async Task CallsAFunction ( )
228
+ {
229
+ // :code-block-start: callfunc
230
+ var bsonValue = await
231
+ user . Functions . CallAsync ( "sum" , 2 , 40 ) ;
232
+
233
+ // The result must now be cast to Int32:
234
+ var sum = bsonValue . ToInt32 ( ) ;
235
+
236
+ // Or use the generic overloads to avoid casting the BsonValue:
237
+ sum = await
238
+ user . Functions . CallAsync < int > ( "sum" , 2 , 40 ) ;
239
+ // :code-block-end:
240
+ Assert . AreEqual ( 42 , sum ) ;
241
+ // :code-block-start: callfuncWithPOCO
242
+ var task = await user . Functions . CallAsync < MyClass >
243
+ ( "getTask" , "5f7f7638024a99f41a3c8de4" ) ;
244
+
245
+ var name = task . Name ;
246
+ // :code-block-end:
247
+ return ;
248
+
249
+ //{ "_id":{ "$oid":"5f0f69dc4eeabfd3366be2be"},"_partition":"myPartition","name":"do this NOW","status":"Closed"}
250
+ }
251
+
172
252
[ TearDown ]
173
- public async System . Threading . Tasks . Task TearDown ( )
253
+ public async Task TearDown ( )
174
254
{
175
255
config = new SyncConfiguration ( "My Project" , user ) ;
176
- Realm realm = await Realm . GetInstanceAsync ( config ) ;
177
- // :code-block-start: delete
178
- realm . Write ( ( ) =>
256
+ using ( var realm = await Realm . GetInstanceAsync ( config ) )
179
257
{
180
- realm . RemoveAll < RealmTask > ( ) ;
181
- } ) ;
182
- // :code-block-end:
183
- // :code-block-start: logout
184
- await user . LogOutAsync ( ) ;
185
- // :code-block-end:
258
+ // :code-block-start: delete
259
+ realm . Write ( ( ) =>
260
+ {
261
+ realm . RemoveAll < RealmTask > ( ) ;
262
+ } ) ;
263
+ // :code-block-end:
264
+ // :code-block-start: logout
265
+ await user . LogOutAsync ( ) ;
266
+ // :code-block-end:
267
+ }
186
268
return ;
187
269
}
188
270
}
271
+
272
+ public class MyClass : RealmObject
273
+ {
274
+ [ PrimaryKey ]
275
+ [ MapTo ( "_id" ) ]
276
+ public ObjectId Id { get ; set ; }
277
+
278
+ [ MapTo ( "name" ) ]
279
+ [ Required ]
280
+ public string Name { get ; set ; }
281
+
282
+ public MyClass ( )
283
+ {
284
+ this . Id = ObjectId . GenerateNewId ( ) ;
285
+ }
286
+ }
189
287
}
0 commit comments