diff --git a/examples/dotnet/Examples/Examples.cs b/examples/dotnet/Examples/Examples.cs new file mode 100644 index 0000000000..08a0c080be --- /dev/null +++ b/examples/dotnet/Examples/Examples.cs @@ -0,0 +1,189 @@ +using System; +using System.Linq; +using dotnet; +using MongoDB.Bson; +using NUnit.Framework; +using Realms; +using Realms.Sync; + +namespace UnitTests +{ + public class Examples + { + App app; + ObjectId testTaskId; + User user; + SyncConfiguration config; + const string myRealmAppId = "tuts-tijya"; + + [SetUp] + public async System.Threading.Tasks.Task Setup() + { + // :code-block-start: initialize-realm + app = App.Create(myRealmAppId); + // :code-block-end: + user = app.LogInAsync(Credentials.EmailPassword("foo@foo.com", "foobar")).Result; + config = new SyncConfiguration("My Project", user); + Realm realm = await Realm.GetInstanceAsync(config); + // :code-block-end: + // :code-block-start: open-synced-realm-sync + Realm synchronousRealm = Realm.GetInstance(config); + // :code-block-end: + // :code-block-start: create + RealmTask testTask = new RealmTask + { + Name = "Do this thing", + Status = TaskStatus.Open.ToString() + }; + + realm.Write(() => + { + realm.Add(testTask); + }); + // :code-block-end: + testTaskId = testTask.Id; + return; + } + + [Test] + public async System.Threading.Tasks.Task GetsSyncedTasks() + { + // :code-block-start: anon-login + User user = app.LogInAsync(Credentials.Anonymous()).Result; + // :code-block-end: + // :code-block-start: config + config = new SyncConfiguration("My Project", user); + Realm realm = await Realm.GetInstanceAsync(config); + // :code-block-end: + // :code-block-start: read-all + var tasks = realm.All(); + // :code-block-end: + Assert.AreEqual(1, tasks.Count()); + // :code-block-start: read-some + tasks = realm.All().Where(t => t.Status == "Open"); + // :code-block-end: + Assert.AreEqual(1, tasks.Count()); + return; + } + + [Test] + public async System.Threading.Tasks.Task ModifiesATask() + { + config = new SyncConfiguration("My Project", user); + Realm realm = await Realm.GetInstanceAsync(config); + // :code-block-start: modify + RealmTask t = realm.All() + .Where(t => t.Id == testTaskId) + .FirstOrDefault(); + + realm.Write(() => + { + t.Status = TaskStatus.InProgress.ToString(); + }); + + // :code-block-end: + var allTasks = realm.All().ToList(); + Assert.AreEqual(1, allTasks.Count); + Assert.AreEqual(TaskStatus.InProgress.ToString(), allTasks.First().Status); + + return; + } + + [Test] + public async System.Threading.Tasks.Task LogsOnManyWays() + { + // :code-block-start: logon_anon + User anonUser = await app.LogInAsync(Credentials.Anonymous()); + // :code-block-end: + Assert.AreEqual(UserState.LoggedIn, anonUser.State); + await anonUser.LogOutAsync(); + // :code-block-start: logon_EP + User emailUser = await app.LogInAsync( + Credentials.EmailPassword("caleb@mongodb.com", "shhhItsASektrit!")); + // :code-block-end: + Assert.AreEqual(UserState.LoggedIn, emailUser.State); + await emailUser.LogOutAsync(); + var apiKey = "eRECwv1e6gkLEse99XokWOgegzoguEkwmvYvXk08zAucG4kXmZu7TTgV832SwFCv"; + // :code-block-start: logon_API + User apiUser = await app.LogInAsync(Credentials.ApiKey(apiKey)); + // :code-block-end: + Assert.AreEqual(UserState.LoggedIn, apiUser.State); + await apiUser.LogOutAsync(); + // :code-block-start: logon_Function + var functionParameters = new + { + username= "caleb", + password = "shhhItsASektrit!", + IQ = 42, + isCool = false + }; + + User functionUser = + await app.LogInAsync(Credentials.Function(functionParameters)); + // :code-block-end: + Assert.AreEqual(UserState.LoggedIn, functionUser.State); + await functionUser.LogOutAsync(); + var jwt_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkNhbGViIiwiaWF0IjoxNjAxNjc4ODcyLCJleHAiOjI1MTYyMzkwMjIsImF1ZCI6InR1dHMtdGlqeWEifQ.LHbeSI2FDWrlUVOBxe-rasuFiW-etv2Gu5e3eAa6Y6k"; + // :code-block-start: logon_JWT + User jwtUser = + await app.LogInAsync(Credentials.JWT(jwt_token)); + // :code-block-end: + Assert.AreEqual(UserState.LoggedIn, jwtUser.State); + await jwtUser.LogOutAsync(); + try + { + var facebookToken = ""; + // :code-block-start: logon_fb + User fbUser = + await app.LogInAsync(Credentials.Facebook(facebookToken)); + // :code-block-end: + } + catch (Exception e) + { + Assert.AreEqual("InvalidSession: authentication via 'oauth2-facebook' is unsupported", e.Message); + } + try + { + var googleAuthCode = ""; + // :code-block-start: logon_google + User googleUser = + await app.LogInAsync(Credentials.Google(googleAuthCode)); + // :code-block-end: + } + catch (Exception e) + { + Assert.AreEqual("InvalidSession: authentication via 'oauth2-google' is unsupported", e.Message); + } + try + { + var appleToken = ""; + // :code-block-start: logon_apple + User appleUser = + await app.LogInAsync(Credentials.Apple(appleToken)); + // :code-block-end: + } + + catch (Exception e) + { + Assert.AreEqual("InvalidSession: authentication via 'oauth2-apple' is unsupported", e.Message); + } + } + + [TearDown] + public async System.Threading.Tasks.Task TearDown() + { + config = new SyncConfiguration("My Project", user); + Realm realm = await Realm.GetInstanceAsync(config); + // :code-block-start: delete + realm.Write(() => + { + realm.RemoveAll(); + }); + // :code-block-end: + // :code-block-start: logout + await user.LogOutAsync(); + // :code-block-end: + return; + } + } +} \ No newline at end of file diff --git a/examples/dotnet/Examples/Examples.csproj b/examples/dotnet/Examples/Examples.csproj index 1763e1108d..1f6138a9e5 100644 --- a/examples/dotnet/Examples/Examples.csproj +++ b/examples/dotnet/Examples/Examples.csproj @@ -10,11 +10,12 @@ - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/examples/dotnet/Examples/Project.cs b/examples/dotnet/Examples/RealmProject.cs similarity index 87% rename from examples/dotnet/Examples/Project.cs rename to examples/dotnet/Examples/RealmProject.cs index ae2b7bb905..a843ee6039 100644 --- a/examples/dotnet/Examples/Project.cs +++ b/examples/dotnet/Examples/RealmProject.cs @@ -3,7 +3,7 @@ namespace dotnet { - public class Project : RealmObject + public class RealmProject : RealmObject { [PrimaryKey] [MapTo("_id")] diff --git a/examples/dotnet/Examples/Task.cs b/examples/dotnet/Examples/RealmTask.cs similarity index 84% rename from examples/dotnet/Examples/Task.cs rename to examples/dotnet/Examples/RealmTask.cs index 9fa0c81f06..208a8ccabe 100644 --- a/examples/dotnet/Examples/Task.cs +++ b/examples/dotnet/Examples/RealmTask.cs @@ -3,7 +3,7 @@ using Realms; namespace dotnet { - public class Task : RealmObject + public class RealmTask : RealmObject { [PrimaryKey] [MapTo("_id")] @@ -13,7 +13,7 @@ public class Task : RealmObject public string Partition { get; set; } [MapTo("assignee")] - public User Assignee { get; set; } + public RealmUser Assignee { get; set; } [MapTo("name")] [Required] @@ -23,7 +23,7 @@ public class Task : RealmObject [Required] public string Status { get; set; } - public Task() + public RealmTask() { this.Id = ObjectId.GenerateNewId(); } diff --git a/examples/dotnet/Examples/RealmTests.cs b/examples/dotnet/Examples/RealmTests.cs deleted file mode 100644 index 372bfc2518..0000000000 --- a/examples/dotnet/Examples/RealmTests.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System.Linq; -using dotnet; -using MongoDB.Bson; -using NUnit.Framework; -using Realms; -using Realms.Sync; - -namespace UnitTests -{ - public class RealmTests - { - Realms.Sync.App app; - ObjectId testTaskId; - Realms.Sync.User user; - SyncConfiguration config; - const string myRealmAppId = "tuts-tijya"; - - [SetUp] - public async System.Threading.Tasks.Task Setup() - { - // :code-block-start: initialize-realm - app = Realms.Sync.App.Create(myRealmAppId); - // :code-block-end: - user = app.LogInAsync(Credentials.EmailPassword("foo@foo.com", "foobar")).Result; - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - // :code-block-start: create - Task testTask = new Task() - { - Name = "Do this thing", - Status = TaskStatus.Open.ToString() - }; - - realm.Write(() => - { - realm.Add(testTask); - }); - // :code-block-end: - testTaskId = testTask.Id; - return; - } - - [Test] - public async System.Threading.Tasks.Task GetsSyncedTasks() - { - // :code-block-start: anon-login - Realms.Sync.User user = app.LogInAsync(Credentials.Anonymous()).Result; - // :code-block-end: - // :code-block-start: config - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - // :code-block-end: - // :code-block-start: read-all - var tasks = realm.All().ToList(); - // :code-block-end: - Assert.AreEqual(1, tasks.Count); - // :code-block-start: read-some - tasks = realm.All().Where(t=>t.Status == "Open").ToList(); - // :code-block-end: - Assert.AreEqual(1, tasks.Count); - return; - } - - [Test] - public async System.Threading.Tasks.Task ModifiesATask() - { - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - // :code-block-start: modify - Task t = realm.All() - .Where(t => t.Id == testTaskId) - .FirstOrDefault(); - - realm.Write(() => - { - t.Status = TaskStatus.InProgress.ToString(); - }); - - // :code-block-end: - var allTasks = realm.All().ToList(); - Assert.AreEqual(1, allTasks.Count); - Assert.AreEqual(TaskStatus.InProgress.ToString(), allTasks.First().Status); - - return; - } - - - [TearDown] - public async System.Threading.Tasks.Task TearDown() - { - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - // :code-block-start: delete - realm.Write(() => - { - realm.RemoveAll(); - }); - // :code-block-end: - // :code-block-start: logout - await user.LogOutAsync(); - // :code-block-end: - return; - } - } -} \ No newline at end of file diff --git a/examples/dotnet/Examples/User.cs b/examples/dotnet/Examples/RealmUser.cs similarity index 90% rename from examples/dotnet/Examples/User.cs rename to examples/dotnet/Examples/RealmUser.cs index ddb5a82c89..dc1bd58cbb 100644 --- a/examples/dotnet/Examples/User.cs +++ b/examples/dotnet/Examples/RealmUser.cs @@ -3,7 +3,7 @@ namespace dotnet { - public class User : RealmObject + public class RealmUser : RealmObject { [PrimaryKey] [MapTo("_id")] diff --git a/examples/dotnet/dotnet.sln b/examples/dotnet/dotnet.sln index 8b1b81fab5..09d1a7a44f 100644 --- a/examples/dotnet/dotnet.sln +++ b/examples/dotnet/dotnet.sln @@ -1,7 +1,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Examples", "Examples\Examples.csproj", "{C97249A2-33A1-457A-AAEC-389B62984885}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Examples", "Examples\Examples.csproj", "{C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,17 +13,17 @@ Global Release|iPhone = Release|iPhone EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C97249A2-33A1-457A-AAEC-389B62984885}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Release|Any CPU.Build.0 = Release|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Debug|iPhone.Build.0 = Debug|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Release|iPhone.ActiveCfg = Release|Any CPU - {C97249A2-33A1-457A-AAEC-389B62984885}.Release|iPhone.Build.0 = Release|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Release|Any CPU.Build.0 = Release|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Debug|iPhone.Build.0 = Debug|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Release|iPhone.ActiveCfg = Release|Any CPU + {C7CFE106-78AB-4B53-A1F1-1008EAD4FA5C}.Release|iPhone.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/source/dotnet/authenticate.txt b/source/dotnet/authenticate.txt index 74baef7b7f..b88c0be6d2 100644 --- a/source/dotnet/authenticate.txt +++ b/source/dotnet/authenticate.txt @@ -15,115 +15,148 @@ Authenticate a User Overview -------- -.. _dotnet-login: +{+service+} provides an API for authenticating users using any enabled +authentication provider. Instantiate a ``Credentials`` object and pass +it to the ``app.LogInAsync()`` method to authenticate and obtain a ``User`` +instance. The ``Credentials`` class exposes factory methods that correspond to +each of the authentication providers: + +.. list-table:: + :header-rows: 1 + :widths: 50 50 + + * - Authentication Provider + - Credentials Generation Method + + * - :ref:`Anonymous ` + - ``Credentials.Anonymous()`` + + * - :ref:`Email/Password ` + - ``Credentials.EmailPassword(email, password)`` + + * - :ref:`API Key ` + - ``Credentials.ApiKey(userAPIKey)`` + + * - :ref:`Custom Function ` + - ``Credentials.Function(functionPayload)`` + + * - :ref:`Custom JWT ` + - ``Credentials.JWT(jwt)`` + + * - :ref:`Google OAuth ` + - ``Credentials.Google(googleAuthCode)`` + + * - :ref:`Facebook OAuth ` + - ``Credentials.Facebook(facebookToken)`` + + * - :ref:`Sign-in With Apple ` + - ``Credentials.Apple(appleToken)`` + + +Before you can authenticate a user, ensure you have: + +- :ref:`Created a {+app+} ` +- Enabled one or more :ref:`authentication providers ` +- :ref:`Installed the .NET SDK ` + Log In ------ .. _dotnet-login-anonymous: -Anonymous -~~~~~~~~~ +Anonymous Authentication +~~~~~~~~~~~~~~~~~~~~~~~~ -.. tabs-realm-languages:: - - .. tab:: - :tabid: c-sharp - - .. code-block:: csharp +If you have enabled :ref:`Anonymous authentication ` in the +{+ui+}, users can immediately log into your app without providing any identifying +information. The following code shows how to do this: + +.. literalinclude:: /examples/generated/code/start/Examples.codeblock.logon_anon.cs + :language: csharp .. _dotnet-login-email-password: -Email/Password -~~~~~~~~~~~~~~ +Email/Password Authentication +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. tabs-realm-languages:: - - .. tab:: - :tabid: c-sharp - - .. code-block:: csharp +If you have enabled :ref:`Email/Password authentication `, +you can log in using the following code: + +.. literalinclude:: /examples/generated/code/start/Examples.codeblock.logon_EP.cs + :language: csharp .. _dotnet-login-api-key: -API Key -~~~~~~~ +API Key Authentication +~~~~~~~~~~~~~~~~~~~~~~ +If you have enabled :ref:`API Key authentication `, +you can log in using the following code: -.. tabs-realm-languages:: - - .. tab:: - :tabid: c-sharp - - .. code-block:: csharp +.. literalinclude:: /examples/generated/code/start/Examples.codeblock.logon_API.cs + :language: csharp .. _dotnet-login-custom-function: -Custom Function -~~~~~~~~~~~~~~~ +Custom Function Authentication +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you have enabled the +:doc:`Custom Function authentication provider `, +you can log in using the following code: -.. tabs-realm-languages:: - - .. tab:: - :tabid: c-sharp - - .. code-block:: csharp +.. literalinclude:: /examples/generated/code/start/Examples.codeblock.logon_Function.cs + :language: csharp .. _dotnet-login-custom-jwt: -Custom JWT -~~~~~~~~~~ +Custom JWT Authentication +~~~~~~~~~~~~~~~~~~~~~~~~~ +If you have enabled the :doc:`Custom JWT authentication provider `, +you can log in using the following code: -.. tabs-realm-languages:: - - .. tab:: - :tabid: c-sharp - - .. code-block:: csharp +.. literalinclude:: /examples/generated/code/start/Examples.codeblock.logon_JWT.cs + :language: csharp .. _dotnet-login-facebook: -Facebook OAuth -~~~~~~~~~~~~~~ +Facebook Authentication +~~~~~~~~~~~~~~~~~~~~~~~ -.. tabs-realm-languages:: - - .. tab:: - :tabid: c-sharp - - .. code-block:: csharp +If you have enabled :ref:`Facebook authentication `, +you can log in using the following code: + +.. literalinclude:: /examples/generated/code/start/Examples.codeblock.logon_fb.cs + :language: csharp .. _dotnet-login-google: -Google OAuth -~~~~~~~~~~~~ +Google Authentication +~~~~~~~~~~~~~~~~~~~~~ -.. tabs-realm-languages:: - - .. tab:: - :tabid: c-sharp - - .. code-block:: csharp +If you have enabled :ref:`Google authentication `, +you can log in using the following code: + +.. literalinclude:: /examples/generated/code/start/Examples.codeblock.logon_google.cs + :language: csharp .. _dotnet-login-apple: Sign-in with Apple ~~~~~~~~~~~~~~~~~~ +If you have enabled :ref:`Sign-in with Apple authentication `, +you can log in using the following code: -.. tabs-realm-languages:: - - .. tab:: - :tabid: c-sharp - - .. code-block:: csharp +.. literalinclude:: /examples/generated/code/start/Examples.codeblock.logon_apple.cs + :language: csharp .. _dotnet-logout: Log Out ------- -.. tabs-realm-languages:: - - .. tab:: - :tabid: c-sharp - - .. code-block:: csharp +Once logged in, you can log out by calling the ``LogOutAsync()`` method: + +.. literalinclude:: /examples/generated/code/start/Examples.codeblock.logout.cs + :language: csharp + +.. include:: /includes/log-out-queries-in-progress.rst diff --git a/source/examples/generated/code/final/RealmTests.codeblock.anon-login.cs b/source/examples/generated/code/final/RealmTests.codeblock.anon-login.cs deleted file mode 100644 index 5e657a9a5a..0000000000 --- a/source/examples/generated/code/final/RealmTests.codeblock.anon-login.cs +++ /dev/null @@ -1 +0,0 @@ -Realms.Sync.User user = app.LogInAsync(Credentials.Anonymous()).Result; \ No newline at end of file diff --git a/source/examples/generated/code/final/RealmTests.codeblock.delete.cs b/source/examples/generated/code/final/RealmTests.codeblock.delete.cs deleted file mode 100644 index 47a6dbbe09..0000000000 --- a/source/examples/generated/code/final/RealmTests.codeblock.delete.cs +++ /dev/null @@ -1,4 +0,0 @@ -realm.Write(() => -{ - realm.RemoveAll(); -}); \ No newline at end of file diff --git a/source/examples/generated/code/final/RealmTests.codeblock.initialize-realm.cs b/source/examples/generated/code/final/RealmTests.codeblock.initialize-realm.cs deleted file mode 100644 index 401c235f6f..0000000000 --- a/source/examples/generated/code/final/RealmTests.codeblock.initialize-realm.cs +++ /dev/null @@ -1,2 +0,0 @@ -const string appId = "tuts-tijya"; -app = Realms.Sync.App.Create(appId); \ No newline at end of file diff --git a/source/examples/generated/code/final/RealmTests.codeblock.read-all.cs b/source/examples/generated/code/final/RealmTests.codeblock.read-all.cs deleted file mode 100644 index 2493973cf9..0000000000 --- a/source/examples/generated/code/final/RealmTests.codeblock.read-all.cs +++ /dev/null @@ -1 +0,0 @@ -var tasks = realm.All().ToList(); \ No newline at end of file diff --git a/source/examples/generated/code/final/RealmTests.codeblock.read-some.cs b/source/examples/generated/code/final/RealmTests.codeblock.read-some.cs deleted file mode 100644 index e4b6a50eae..0000000000 --- a/source/examples/generated/code/final/RealmTests.codeblock.read-some.cs +++ /dev/null @@ -1 +0,0 @@ -tasks = realm.All().Where(t=>t.Status == "Open").ToList(); \ No newline at end of file diff --git a/source/examples/generated/code/final/RealmTests.cs b/source/examples/generated/code/final/RealmTests.cs deleted file mode 100644 index eff7daa07b..0000000000 --- a/source/examples/generated/code/final/RealmTests.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System.Linq; -using dotnet; -using MongoDB.Bson; -using NUnit.Framework; -using Realms; -using Realms.Sync; - -namespace UnitTests -{ - public class RealmTests - { - Realms.Sync.App app; - ObjectId testTaskId; - Realms.Sync.User user; - SyncConfiguration config; - - [SetUp] - public async System.Threading.Tasks.Task Setup() - { - const string appId = "tuts-tijya"; - app = Realms.Sync.App.Create(appId); - user = app.LogInAsync(Credentials.EmailPassword("foo@foo.com", "foobar")).Result; - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - Task testTask = new Task() - { - Name = "Do this thing", - Status = TaskStatus.Open.ToString() - }; - - realm.Write(() => - { - realm.Add(testTask); - }); - testTaskId = testTask.Id; - return; - } - - [Test] - public async System.Threading.Tasks.Task GetsSyncedTasks() - { - Realms.Sync.User user = app.LogInAsync(Credentials.Anonymous()).Result; - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - var tasks = realm.All().ToList(); - Assert.AreEqual(1, tasks.Count); - tasks = realm.All().Where(t=>t.Status == "Open").ToList(); - Assert.AreEqual(1, tasks.Count); - return; - } - - [Test] - public async System.Threading.Tasks.Task ModifiesATask() - { - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - Task t = realm.All() - .Where(t => t.Id == testTaskId) - .FirstOrDefault(); - - realm.Write(() => - { - t.Status = TaskStatus.InProgress.ToString(); - }); - - var allTasks = realm.All().ToList(); - Assert.AreEqual(1, allTasks.Count); - Assert.AreEqual(TaskStatus.InProgress.ToString(), allTasks.First().Status); - - return; - } - - - [TearDown] - public async System.Threading.Tasks.Task TearDown() - { - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - realm.Write(() => - { - realm.RemoveAll(); - }); - await user.LogOutAsync(); - return; - } - } -} \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.anon-login.cs b/source/examples/generated/code/start/Examples.codeblock.anon-login.cs new file mode 100644 index 0000000000..fcc769457b --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.anon-login.cs @@ -0,0 +1 @@ +User user = app.LogInAsync(Credentials.Anonymous()).Result; \ No newline at end of file diff --git a/source/examples/generated/code/final/RealmTests.codeblock.config.cs b/source/examples/generated/code/start/Examples.codeblock.config.cs similarity index 100% rename from source/examples/generated/code/final/RealmTests.codeblock.config.cs rename to source/examples/generated/code/start/Examples.codeblock.config.cs diff --git a/source/examples/generated/code/final/RealmTests.codeblock.create.cs b/source/examples/generated/code/start/Examples.codeblock.create.cs similarity index 77% rename from source/examples/generated/code/final/RealmTests.codeblock.create.cs rename to source/examples/generated/code/start/Examples.codeblock.create.cs index 64f986ee3e..324e4c8c49 100644 --- a/source/examples/generated/code/final/RealmTests.codeblock.create.cs +++ b/source/examples/generated/code/start/Examples.codeblock.create.cs @@ -1,4 +1,4 @@ -Task testTask = new Task() +RealmTask testTask = new RealmTask { Name = "Do this thing", Status = TaskStatus.Open.ToString() diff --git a/source/examples/generated/code/start/Examples.codeblock.delete.cs b/source/examples/generated/code/start/Examples.codeblock.delete.cs new file mode 100644 index 0000000000..af767023f3 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.delete.cs @@ -0,0 +1,4 @@ +realm.Write(() => +{ + realm.RemoveAll(); +}); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.initialize-realm.cs b/source/examples/generated/code/start/Examples.codeblock.initialize-realm.cs new file mode 100644 index 0000000000..6ed9ca3ab1 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.initialize-realm.cs @@ -0,0 +1 @@ +app = App.Create(myRealmAppId); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.logon_API.cs b/source/examples/generated/code/start/Examples.codeblock.logon_API.cs new file mode 100644 index 0000000000..539fc8dab0 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.logon_API.cs @@ -0,0 +1 @@ +User apiUser = await app.LogInAsync(Credentials.ApiKey(apiKey)); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.logon_EP.cs b/source/examples/generated/code/start/Examples.codeblock.logon_EP.cs new file mode 100644 index 0000000000..b423aa7a52 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.logon_EP.cs @@ -0,0 +1,2 @@ +User emailUser = await app.LogInAsync( + Credentials.EmailPassword("caleb@mongodb.com", "shhhItsASektrit!")); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.logon_Function.cs b/source/examples/generated/code/start/Examples.codeblock.logon_Function.cs new file mode 100644 index 0000000000..f311f2eed2 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.logon_Function.cs @@ -0,0 +1,10 @@ +var functionParameters = new +{ + username= "caleb", + password = "shhhItsASektrit!", + IQ = 42, + isCool = false +}; + +User functionUser = + await app.LogInAsync(Credentials.Function(functionParameters)); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.logon_JWT.cs b/source/examples/generated/code/start/Examples.codeblock.logon_JWT.cs new file mode 100644 index 0000000000..e6e915381b --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.logon_JWT.cs @@ -0,0 +1,2 @@ +User jwtUser = + await app.LogInAsync(Credentials.JWT(jwt_token)); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.logon_anon.cs b/source/examples/generated/code/start/Examples.codeblock.logon_anon.cs new file mode 100644 index 0000000000..120bd0d8c7 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.logon_anon.cs @@ -0,0 +1 @@ +User anonUser = await app.LogInAsync(Credentials.Anonymous()); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.logon_apple.cs b/source/examples/generated/code/start/Examples.codeblock.logon_apple.cs new file mode 100644 index 0000000000..d025f2e529 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.logon_apple.cs @@ -0,0 +1,2 @@ +User appleUser = + await app.LogInAsync(Credentials.Apple(appleToken)); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.logon_fb.cs b/source/examples/generated/code/start/Examples.codeblock.logon_fb.cs new file mode 100644 index 0000000000..b09ca006a1 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.logon_fb.cs @@ -0,0 +1,2 @@ +User fbUser = + await app.LogInAsync(Credentials.Facebook(facebookToken)); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.logon_google.cs b/source/examples/generated/code/start/Examples.codeblock.logon_google.cs new file mode 100644 index 0000000000..39c99723e2 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.logon_google.cs @@ -0,0 +1,2 @@ +User googleUser = + await app.LogInAsync(Credentials.Google(googleAuthCode)); \ No newline at end of file diff --git a/source/examples/generated/code/final/RealmTests.codeblock.logout.cs b/source/examples/generated/code/start/Examples.codeblock.logout.cs similarity index 100% rename from source/examples/generated/code/final/RealmTests.codeblock.logout.cs rename to source/examples/generated/code/start/Examples.codeblock.logout.cs diff --git a/source/examples/generated/code/final/RealmTests.codeblock.modify.cs b/source/examples/generated/code/start/Examples.codeblock.modify.cs similarity index 78% rename from source/examples/generated/code/final/RealmTests.codeblock.modify.cs rename to source/examples/generated/code/start/Examples.codeblock.modify.cs index 734f89c1f8..0d1d2edfba 100644 --- a/source/examples/generated/code/final/RealmTests.codeblock.modify.cs +++ b/source/examples/generated/code/start/Examples.codeblock.modify.cs @@ -1,4 +1,4 @@ -Task t = realm.All() +RealmTask t = realm.All() .Where(t => t.Id == testTaskId) .FirstOrDefault(); diff --git a/source/examples/generated/code/start/Examples.codeblock.open-synced-realm-sync.cs b/source/examples/generated/code/start/Examples.codeblock.open-synced-realm-sync.cs new file mode 100644 index 0000000000..ddd77b8a88 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.open-synced-realm-sync.cs @@ -0,0 +1 @@ +Realm synchronousRealm = Realm.GetInstance(config); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.read-all.cs b/source/examples/generated/code/start/Examples.codeblock.read-all.cs new file mode 100644 index 0000000000..55e0215bb9 --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.read-all.cs @@ -0,0 +1 @@ +var tasks = realm.All(); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.codeblock.read-some.cs b/source/examples/generated/code/start/Examples.codeblock.read-some.cs new file mode 100644 index 0000000000..957e45505b --- /dev/null +++ b/source/examples/generated/code/start/Examples.codeblock.read-some.cs @@ -0,0 +1 @@ +tasks = realm.All().Where(t => t.Status == "Open"); \ No newline at end of file diff --git a/source/examples/generated/code/start/Examples.cs b/source/examples/generated/code/start/Examples.cs new file mode 100644 index 0000000000..4a0d64b5a5 --- /dev/null +++ b/source/examples/generated/code/start/Examples.cs @@ -0,0 +1,152 @@ +using System; +using System.Linq; +using dotnet; +using MongoDB.Bson; +using NUnit.Framework; +using Realms; +using Realms.Sync; + +namespace UnitTests +{ + public class Examples + { + App app; + ObjectId testTaskId; + User user; + SyncConfiguration config; + const string myRealmAppId = "tuts-tijya"; + + [SetUp] + public async System.Threading.Tasks.Task Setup() + { + app = App.Create(myRealmAppId); + user = app.LogInAsync(Credentials.EmailPassword("foo@foo.com", "foobar")).Result; + config = new SyncConfiguration("My Project", user); + Realm realm = await Realm.GetInstanceAsync(config); + Realm synchronousRealm = Realm.GetInstance(config); + RealmTask testTask = new RealmTask + { + Name = "Do this thing", + Status = TaskStatus.Open.ToString() + }; + + realm.Write(() => + { + realm.Add(testTask); + }); + testTaskId = testTask.Id; + return; + } + + [Test] + public async System.Threading.Tasks.Task GetsSyncedTasks() + { + User user = app.LogInAsync(Credentials.Anonymous()).Result; + config = new SyncConfiguration("My Project", user); + Realm realm = await Realm.GetInstanceAsync(config); + var tasks = realm.All(); + Assert.AreEqual(1, tasks.Count()); + tasks = realm.All().Where(t => t.Status == "Open"); + Assert.AreEqual(1, tasks.Count()); + return; + } + + [Test] + public async System.Threading.Tasks.Task ModifiesATask() + { + config = new SyncConfiguration("My Project", user); + Realm realm = await Realm.GetInstanceAsync(config); + RealmTask t = realm.All() + .Where(t => t.Id == testTaskId) + .FirstOrDefault(); + + realm.Write(() => + { + t.Status = TaskStatus.InProgress.ToString(); + }); + + var allTasks = realm.All().ToList(); + Assert.AreEqual(1, allTasks.Count); + Assert.AreEqual(TaskStatus.InProgress.ToString(), allTasks.First().Status); + + return; + } + + [Test] + public async System.Threading.Tasks.Task LogsOnManyWays() + { + User anonUser = await app.LogInAsync(Credentials.Anonymous()); + Assert.AreEqual(UserState.LoggedIn, anonUser.State); + await anonUser.LogOutAsync(); + User emailUser = await app.LogInAsync( + Credentials.EmailPassword("caleb@mongodb.com", "shhhItsASektrit!")); + Assert.AreEqual(UserState.LoggedIn, emailUser.State); + await emailUser.LogOutAsync(); + var apiKey = "eRECwv1e6gkLEse99XokWOgegzoguEkwmvYvXk08zAucG4kXmZu7TTgV832SwFCv"; + User apiUser = await app.LogInAsync(Credentials.ApiKey(apiKey)); + Assert.AreEqual(UserState.LoggedIn, apiUser.State); + await apiUser.LogOutAsync(); + var functionParameters = new + { + username= "caleb", + password = "shhhItsASektrit!", + IQ = 42, + isCool = false + }; + + User functionUser = + await app.LogInAsync(Credentials.Function(functionParameters)); + Assert.AreEqual(UserState.LoggedIn, functionUser.State); + await functionUser.LogOutAsync(); + var jwt_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkNhbGViIiwiaWF0IjoxNjAxNjc4ODcyLCJleHAiOjI1MTYyMzkwMjIsImF1ZCI6InR1dHMtdGlqeWEifQ.LHbeSI2FDWrlUVOBxe-rasuFiW-etv2Gu5e3eAa6Y6k"; + User jwtUser = + await app.LogInAsync(Credentials.JWT(jwt_token)); + Assert.AreEqual(UserState.LoggedIn, jwtUser.State); + await jwtUser.LogOutAsync(); + try + { + var facebookToken = ""; + User fbUser = + await app.LogInAsync(Credentials.Facebook(facebookToken)); + } + catch (Exception e) + { + Assert.AreEqual("InvalidSession: authentication via 'oauth2-facebook' is unsupported", e.Message); + } + try + { + var googleAuthCode = ""; + User googleUser = + await app.LogInAsync(Credentials.Google(googleAuthCode)); + } + catch (Exception e) + { + Assert.AreEqual("InvalidSession: authentication via 'oauth2-google' is unsupported", e.Message); + } + try + { + var appleToken = ""; + User appleUser = + await app.LogInAsync(Credentials.Apple(appleToken)); + } + + catch (Exception e) + { + Assert.AreEqual("InvalidSession: authentication via 'oauth2-apple' is unsupported", e.Message); + } + } + + [TearDown] + public async System.Threading.Tasks.Task TearDown() + { + config = new SyncConfiguration("My Project", user); + Realm realm = await Realm.GetInstanceAsync(config); + realm.Write(() => + { + realm.RemoveAll(); + }); + await user.LogOutAsync(); + return; + } + } +} \ No newline at end of file diff --git a/source/examples/generated/code/start/RealmApp.swift b/source/examples/generated/code/start/RealmApp.swift deleted file mode 100644 index e435fcf681..0000000000 --- a/source/examples/generated/code/start/RealmApp.swift +++ /dev/null @@ -1,5 +0,0 @@ -import RealmSwift - -let YOUR_REALM_APP_ID = "example-testers-kvjdy" - -let app = App(id: YOUR_REALM_APP_ID) diff --git a/source/examples/generated/code/start/RealmTests.codeblock.anon-login.cs b/source/examples/generated/code/start/RealmTests.codeblock.anon-login.cs deleted file mode 100644 index 5e657a9a5a..0000000000 --- a/source/examples/generated/code/start/RealmTests.codeblock.anon-login.cs +++ /dev/null @@ -1 +0,0 @@ -Realms.Sync.User user = app.LogInAsync(Credentials.Anonymous()).Result; \ No newline at end of file diff --git a/source/examples/generated/code/start/RealmTests.codeblock.config.cs b/source/examples/generated/code/start/RealmTests.codeblock.config.cs deleted file mode 100644 index 0488b955fa..0000000000 --- a/source/examples/generated/code/start/RealmTests.codeblock.config.cs +++ /dev/null @@ -1,2 +0,0 @@ -config = new SyncConfiguration("My Project", user); -Realm realm = await Realm.GetInstanceAsync(config); \ No newline at end of file diff --git a/source/examples/generated/code/start/RealmTests.codeblock.create.cs b/source/examples/generated/code/start/RealmTests.codeblock.create.cs deleted file mode 100644 index 64f986ee3e..0000000000 --- a/source/examples/generated/code/start/RealmTests.codeblock.create.cs +++ /dev/null @@ -1,10 +0,0 @@ -Task testTask = new Task() -{ - Name = "Do this thing", - Status = TaskStatus.Open.ToString() -}; - -realm.Write(() => -{ - realm.Add(testTask); -}); \ No newline at end of file diff --git a/source/examples/generated/code/start/RealmTests.codeblock.delete.cs b/source/examples/generated/code/start/RealmTests.codeblock.delete.cs deleted file mode 100644 index 47a6dbbe09..0000000000 --- a/source/examples/generated/code/start/RealmTests.codeblock.delete.cs +++ /dev/null @@ -1,4 +0,0 @@ -realm.Write(() => -{ - realm.RemoveAll(); -}); \ No newline at end of file diff --git a/source/examples/generated/code/start/RealmTests.codeblock.initialize-realm.cs b/source/examples/generated/code/start/RealmTests.codeblock.initialize-realm.cs deleted file mode 100644 index 401c235f6f..0000000000 --- a/source/examples/generated/code/start/RealmTests.codeblock.initialize-realm.cs +++ /dev/null @@ -1,2 +0,0 @@ -const string appId = "tuts-tijya"; -app = Realms.Sync.App.Create(appId); \ No newline at end of file diff --git a/source/examples/generated/code/start/RealmTests.codeblock.logout.cs b/source/examples/generated/code/start/RealmTests.codeblock.logout.cs deleted file mode 100644 index 1c6e25f246..0000000000 --- a/source/examples/generated/code/start/RealmTests.codeblock.logout.cs +++ /dev/null @@ -1 +0,0 @@ -await user.LogOutAsync(); \ No newline at end of file diff --git a/source/examples/generated/code/start/RealmTests.codeblock.modify.cs b/source/examples/generated/code/start/RealmTests.codeblock.modify.cs deleted file mode 100644 index 734f89c1f8..0000000000 --- a/source/examples/generated/code/start/RealmTests.codeblock.modify.cs +++ /dev/null @@ -1,8 +0,0 @@ -Task t = realm.All() - .Where(t => t.Id == testTaskId) - .FirstOrDefault(); - -realm.Write(() => -{ - t.Status = TaskStatus.InProgress.ToString(); -}); diff --git a/source/examples/generated/code/start/RealmTests.codeblock.read-all.cs b/source/examples/generated/code/start/RealmTests.codeblock.read-all.cs deleted file mode 100644 index 2493973cf9..0000000000 --- a/source/examples/generated/code/start/RealmTests.codeblock.read-all.cs +++ /dev/null @@ -1 +0,0 @@ -var tasks = realm.All().ToList(); \ No newline at end of file diff --git a/source/examples/generated/code/start/RealmTests.codeblock.read-some.cs b/source/examples/generated/code/start/RealmTests.codeblock.read-some.cs deleted file mode 100644 index e4b6a50eae..0000000000 --- a/source/examples/generated/code/start/RealmTests.codeblock.read-some.cs +++ /dev/null @@ -1 +0,0 @@ -tasks = realm.All().Where(t=>t.Status == "Open").ToList(); \ No newline at end of file diff --git a/source/examples/generated/code/start/RealmTests.cs b/source/examples/generated/code/start/RealmTests.cs deleted file mode 100644 index eff7daa07b..0000000000 --- a/source/examples/generated/code/start/RealmTests.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System.Linq; -using dotnet; -using MongoDB.Bson; -using NUnit.Framework; -using Realms; -using Realms.Sync; - -namespace UnitTests -{ - public class RealmTests - { - Realms.Sync.App app; - ObjectId testTaskId; - Realms.Sync.User user; - SyncConfiguration config; - - [SetUp] - public async System.Threading.Tasks.Task Setup() - { - const string appId = "tuts-tijya"; - app = Realms.Sync.App.Create(appId); - user = app.LogInAsync(Credentials.EmailPassword("foo@foo.com", "foobar")).Result; - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - Task testTask = new Task() - { - Name = "Do this thing", - Status = TaskStatus.Open.ToString() - }; - - realm.Write(() => - { - realm.Add(testTask); - }); - testTaskId = testTask.Id; - return; - } - - [Test] - public async System.Threading.Tasks.Task GetsSyncedTasks() - { - Realms.Sync.User user = app.LogInAsync(Credentials.Anonymous()).Result; - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - var tasks = realm.All().ToList(); - Assert.AreEqual(1, tasks.Count); - tasks = realm.All().Where(t=>t.Status == "Open").ToList(); - Assert.AreEqual(1, tasks.Count); - return; - } - - [Test] - public async System.Threading.Tasks.Task ModifiesATask() - { - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - Task t = realm.All() - .Where(t => t.Id == testTaskId) - .FirstOrDefault(); - - realm.Write(() => - { - t.Status = TaskStatus.InProgress.ToString(); - }); - - var allTasks = realm.All().ToList(); - Assert.AreEqual(1, allTasks.Count); - Assert.AreEqual(TaskStatus.InProgress.ToString(), allTasks.First().Status); - - return; - } - - - [TearDown] - public async System.Threading.Tasks.Task TearDown() - { - config = new SyncConfiguration("My Project", user); - Realm realm = await Realm.GetInstanceAsync(config); - realm.Write(() => - { - realm.RemoveAll(); - }); - await user.LogOutAsync(); - return; - } - } -} \ No newline at end of file