Skip to content

Commit 74f163e

Browse files
authored
Open a Realm, Call a Function (#519)
* 12476 call a function * 12487 open a realm
1 parent 2edfb75 commit 74f163e

28 files changed

+1885
-130
lines changed

conf.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
'swift-sdk': ('https://docs.mongodb.com/realm-sdks/swift/10.0.0-rc.1/%s', ''),
110110
'objc-sdk': ('https://docs.mongodb.com/realm-sdks/objc/10.0.0-rc.1/%s', ''),
111111
'js-sdk': ('https://docs.mongodb.com/realm-sdks/js/latest/%s', ''),
112+
'dotnet-sdk': ('https://docs.mongodb.com/realm-sdks/dotnet/latest/%s', ''),
112113
# True External Links
113114
'android': ('https://developer.android.com/%s', ''),
114115
'apollo': ('https://www.apollographql.com/%s', ''),

examples/dotnet/Examples/Examples.cs

Lines changed: 163 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
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;
46
using MongoDB.Bson;
57
using NUnit.Framework;
68
using Realms;
79
using Realms.Sync;
10+
using TaskStatus = dotnet.TaskStatus;
811

912
namespace UnitTests
1013
{
@@ -17,20 +20,21 @@ public class Examples
1720
const string myRealmAppId = "tuts-tijya";
1821

1922
[SetUp]
20-
public async System.Threading.Tasks.Task Setup()
23+
public async Task Setup()
2124
{
2225
// :code-block-start: initialize-realm
2326
app = App.Create(myRealmAppId);
2427
// :code-block-end:
2528
user = app.LogInAsync(Credentials.EmailPassword("[email protected]", "foobar")).Result;
29+
// :code-block-start: open-synced-realm
2630
config = new SyncConfiguration("My Project", user);
27-
Realm realm = await Realm.GetInstanceAsync(config);
31+
var realm = await Realm.GetInstanceAsync(config);
2832
// :code-block-end:
2933
// :code-block-start: open-synced-realm-sync
30-
Realm synchronousRealm = Realm.GetInstance(config);
34+
var synchronousRealm = Realm.GetInstance(config);
3135
// :code-block-end:
3236
// :code-block-start: create
33-
RealmTask testTask = new RealmTask
37+
var testTask = new RealmTask
3438
{
3539
Name = "Do this thing",
3640
Status = TaskStatus.Open.ToString()
@@ -46,33 +50,73 @@ public async System.Threading.Tasks.Task Setup()
4650
}
4751

4852
[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()
5084
{
5185
// :code-block-start: anon-login
52-
User user = app.LogInAsync(Credentials.Anonymous()).Result;
86+
var user = app.LogInAsync(Credentials.Anonymous()).Result;
5387
// :code-block-end:
5488
// :code-block-start: config
5589
config = new SyncConfiguration("My Project", user);
56-
Realm realm = await Realm.GetInstanceAsync(config);
90+
var realm = await Realm.GetInstanceAsync(config);
5791
// :code-block-end:
5892
// :code-block-start: read-all
5993
var tasks = realm.All<RealmTask>();
6094
// :code-block-end:
61-
Assert.AreEqual(1, tasks.Count());
95+
Assert.AreEqual(1, tasks.Count(),"Get All");
6296
// :code-block-start: read-some
6397
tasks = realm.All<RealmTask>().Where(t => t.Status == "Open");
6498
// :code-block-end:
65-
Assert.AreEqual(1, tasks.Count());
99+
Assert.AreEqual(1, tasks.Count(), "Get Some");
66100
return;
67101
}
68102

69103
[Test]
70-
public async System.Threading.Tasks.Task ModifiesATask()
104+
public async Task ScopesARealm()
71105
{
106+
// :code-block-start: scope
72107
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);
74118
// :code-block-start: modify
75-
RealmTask t = realm.All<RealmTask>()
119+
var t = realm.All<RealmTask>()
76120
.Where(t => t.Id == testTaskId)
77121
.FirstOrDefault();
78122

@@ -90,51 +134,61 @@ public async System.Threading.Tasks.Task ModifiesATask()
90134
}
91135

92136
[Test]
93-
public async System.Threading.Tasks.Task LogsOnManyWays()
137+
public async Task LogsOnManyWays()
94138
{
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+
};
120171

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+
}
133187
try
134188
{
135189
var facebookToken = "";
136190
// :code-block-start: logon_fb
137-
User fbUser =
191+
var user =
138192
await app.LogInAsync(Credentials.Facebook(facebookToken));
139193
// :code-block-end:
140194
}
@@ -146,7 +200,7 @@ public async System.Threading.Tasks.Task LogsOnManyWays()
146200
{
147201
var googleAuthCode = "";
148202
// :code-block-start: logon_google
149-
User googleUser =
203+
var user =
150204
await app.LogInAsync(Credentials.Google(googleAuthCode));
151205
// :code-block-end:
152206
}
@@ -158,7 +212,7 @@ public async System.Threading.Tasks.Task LogsOnManyWays()
158212
{
159213
var appleToken = "";
160214
// :code-block-start: logon_apple
161-
User appleUser =
215+
var user =
162216
await app.LogInAsync(Credentials.Apple(appleToken));
163217
// :code-block-end:
164218
}
@@ -169,21 +223,65 @@ public async System.Threading.Tasks.Task LogsOnManyWays()
169223
}
170224
}
171225

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+
172252
[TearDown]
173-
public async System.Threading.Tasks.Task TearDown()
253+
public async Task TearDown()
174254
{
175255
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))
179257
{
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+
}
186268
return;
187269
}
188270
}
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+
}
189287
}

0 commit comments

Comments
 (0)