public async void TestOneToOneRecursiveInsertOrReplaceGuidAsync() {
            var conn = Utils.CreateAsyncConnection();
            await conn.DropTableAsync<PassportGuid>();
            await conn.DropTableAsync<PersonGuid>();
            await conn.CreateTableAsync<PassportGuid>();
            await conn.CreateTableAsync<PersonGuid>();

            var person = new PersonGuid
            {
                Identifier = Guid.NewGuid(),
                Name = "John",
                Surname = "Smith",
                Passport = new PassportGuid {
                    Id = Guid.NewGuid(),
                    PassportNumber = "JS123456"
                }
            };

            // Insert the elements in the database recursively
            await conn.InsertOrReplaceWithChildrenAsync(person, recursive: true);

            var obtainedPerson = await conn.FindAsync<PersonGuid>(person.Identifier);
            var obtainedPassport = await conn.FindAsync<PassportGuid>(person.Passport.Id);

            Assert.NotNull(obtainedPerson);
            Assert.NotNull(obtainedPassport);
            Assert.That(obtainedPerson.Name, Is.EqualTo(person.Name));
            Assert.That(obtainedPerson.Surname, Is.EqualTo(person.Surname));
            Assert.That(obtainedPassport.PassportNumber, Is.EqualTo(person.Passport.PassportNumber));
            Assert.That(obtainedPassport.OwnerId, Is.EqualTo(person.Identifier));


            var newPerson = new PersonGuid
            {
                Identifier = person.Identifier,
                Name = "John",
                Surname = "Smith",
                Passport = new PassportGuid {
                    Id = person.Passport.Id,
                    PassportNumber = "JS123456"
                }
            };
            person = newPerson;

            // Replace the elements in the database recursively
            await conn.InsertOrReplaceWithChildrenAsync(person, recursive: true);

            obtainedPerson = await conn.FindAsync<PersonGuid>(person.Identifier);
            obtainedPassport = await conn.FindAsync<PassportGuid>(person.Passport.Id);

            Assert.NotNull(obtainedPerson);
            Assert.NotNull(obtainedPassport);
            Assert.That(obtainedPerson.Name, Is.EqualTo(person.Name));
            Assert.That(obtainedPerson.Surname, Is.EqualTo(person.Surname));
            Assert.That(obtainedPassport.PassportNumber, Is.EqualTo(person.Passport.PassportNumber));
            Assert.That(obtainedPassport.OwnerId, Is.EqualTo(person.Identifier));
        }
        public void TestGuidIdType()
        {
            // ARRANGE
            var grandpaId = Guid.NewGuid();
            var dadId     = Guid.NewGuid();
            var uncleId   = Guid.NewGuid();
            var cousinId  = Guid.NewGuid();
            var sisterId  = Guid.NewGuid();
            var meId      = Guid.NewGuid();

            var grandpa = new PersonGuid {
                Id = grandpaId, Name = "Richard"
            };
            var dad = new PersonGuid {
                Id = dadId, ParentId = grandpaId, Name = "Richard Jr."
            };
            var uncle = new PersonGuid {
                Id = uncleId, ParentId = grandpaId, Name = "John"
            };
            var cousin = new PersonGuid {
                Id = cousinId, ParentId = uncleId, Name = "Ann"
            };
            var sister = new PersonGuid {
                Id = sisterId, ParentId = dadId, Name = "Jane"
            };
            var me = new PersonGuid {
                Id = meId, ParentId = dadId, Name = "MeMyselfAndI"
            };

            var familyMembers = new List <PersonGuid>
            {
                sister,
                dad,
                uncle,
                grandpa,
                me,
                cousin
            };

            // ACTION
            var familyTree = TreeNode <Guid, PersonGuid> .CreateTree(familyMembers);

            // ASSERT
            Assert.NotNull(familyTree);

            // _grandpa is the root Person
            Assert.True(familyTree == grandpa);

            // _grandpa has two children (_dad and _uncle)
            Assert.True(familyTree.Children.Count == 2);
            Assert.True(familyTree.Children[0] == dad);
            Assert.True(familyTree.Children[0].Parent == grandpa);
            Assert.True(familyTree.Children[1] == uncle);
            Assert.True(familyTree.Children[1].Parent == grandpa);

            // _dad has two children (_me and _sister)
            Assert.True(familyTree.Children[0].Children.Count == 2);
            Assert.True(familyTree.Children[0].Children[0] == sister);
            Assert.True(familyTree.Children[0].Children[0].Parent == dad);
            Assert.True(familyTree.Children[0].Children[1] == me);
            Assert.True(familyTree.Children[0].Children[1].Parent == dad);

            // _uncle has one child (_cousin)
            Assert.True(familyTree.Children[1].Children.Count == 1);
            Assert.True(familyTree.Children[1].Children[0] == cousin);
            Assert.True(familyTree.Children[1].Children[0].Parent == uncle);

            Assert.True(grandpa.Root == null);
            Assert.True(dad.Root == grandpa);
            Assert.True(uncle.Root == grandpa);
            Assert.True(sister.Root == grandpa);
            Assert.True(me.Root == grandpa);
            Assert.True(cousin.Root == grandpa);

            Assert.True(grandpa.ParentId == Guid.Empty);
        }
        public void TestOneToOneRecursiveInsertGuid() {
            var conn = Utils.CreateConnection();
            conn.DropTable<PassportGuid>();
            conn.DropTable<PersonGuid>();
            conn.CreateTable<PassportGuid>();
            conn.CreateTable<PersonGuid>();

            var person = new PersonGuid
            {
                Identifier = Guid.NewGuid(),
                Name = "John",
                Surname = "Smith",
                Passport = new PassportGuid {
                    Id = Guid.NewGuid(),
                    PassportNumber = "JS123456"
                }
            };

            // Insert the elements in the database recursively
            conn.InsertWithChildren(person, recursive: true);

            var obtainedPerson = conn.Find<PersonGuid>(person.Identifier);
            var obtainedPassport = conn.Find<PassportGuid>(person.Passport.Id);

            Assert.NotNull(obtainedPerson);
            Assert.NotNull(obtainedPassport);
            Assert.That(obtainedPerson.Name, Is.EqualTo(person.Name));
            Assert.That(obtainedPerson.Surname, Is.EqualTo(person.Surname));
            Assert.That(obtainedPassport.PassportNumber, Is.EqualTo(person.Passport.PassportNumber));
            Assert.That(obtainedPassport.OwnerId, Is.EqualTo(person.Identifier));
        }