public async Task VerifyThatReadRdlNotWorksWithoutActivePerson()
        {
            var siteDirectoryPoco = new CDP4Common.SiteDirectoryData.SiteDirectory(this.sieSiteDirectoryDto.Iid, this.session.Assembler.Cache, this.uri);
            var johnDoe           = new CDP4Common.SiteDirectoryData.Person(this.person.Iid, this.session.Assembler.Cache, this.uri)
            {
                ShortName = "John"
            };

            siteDirectoryPoco.Person.Add(johnDoe);

            var rdlDto = new CDP4Common.DTO.SiteReferenceDataLibrary
            {
                Iid = Guid.NewGuid()
            };

            var rdlPoco = new CDP4Common.SiteDirectoryData.SiteReferenceDataLibrary
            {
                Iid       = rdlDto.Iid,
                Name      = rdlDto.Name,
                ShortName = rdlDto.ShortName,
                Container = siteDirectoryPoco
            };

            this.session.GetType().GetProperty("ActivePerson")?.SetValue(this.session, null, null);
            await this.session.Assembler.Synchronize(new List <Thing> {
                rdlDto
            });

            Assert.ThrowsAsync <InvalidOperationException>(async() => await this.session.Read(rdlPoco));
        }
        public async Task VerifyThatOpenSiteRDLUpdatesListInSession()
        {
            var siteDir = new CDP4Common.SiteDirectoryData.SiteDirectory(Guid.NewGuid(), null, null);
            var JohnDoe = new CDP4Common.SiteDirectoryData.Person(this.person.Iid, this.session.Assembler.Cache, this.uri)
            {
                ShortName = "John"
            };
            var rdlDto = new CDP4Common.DTO.SiteReferenceDataLibrary {
                Iid = Guid.NewGuid()
            };
            var siteDirDto = new CDP4Common.DTO.SiteDirectory()
            {
                Iid = Guid.NewGuid()
            };
            var requiredPocoDto = new CDP4Common.DTO.SiteReferenceDataLibrary()
            {
                Iid = Guid.NewGuid()
            };
            var requiredPocoRdl = new CDP4Common.SiteDirectoryData.SiteReferenceDataLibrary(requiredPocoDto.Iid, null, null);

            rdlDto.RequiredRdl = requiredPocoDto.Iid;

            var credentials = new Credentials("admin", "pass", new Uri("http://www.rheagroup.com"));
            var session2    = new Session(this.mockedDal.Object, credentials);
            var rdlPoco     = new CDP4Common.SiteDirectoryData.SiteReferenceDataLibrary {
                Iid = rdlDto.Iid, Name = rdlDto.Name, ShortName = rdlDto.ShortName, Container = siteDir, RequiredRdl = requiredPocoRdl
            };
            var thingsToAdd = new List <Thing>()
            {
                siteDirDto, requiredPocoDto, rdlDto
            };

            session2.GetType().GetProperty("ActivePerson").SetValue(session2, JohnDoe, null);
            await session2.Assembler.Synchronize(thingsToAdd);

            Assert.IsEmpty(session2.OpenReferenceDataLibraries);

            await session2.Read(rdlPoco);

            Assert.AreEqual(2, session2.OpenReferenceDataLibraries.ToList().Count());

            await session2.Close();

            Assert.IsEmpty(session2.OpenReferenceDataLibraries);
        }
        public async Task VerifyThatCloseRdlWorks()
        {
            var siteDirectoryPoco = new CDP4Common.SiteDirectoryData.SiteDirectory(this.sieSiteDirectoryDto.Iid, this.session.Assembler.Cache, this.uri);
            var JohnDoe           = new CDP4Common.SiteDirectoryData.Person(this.person.Iid, this.session.Assembler.Cache, this.uri)
            {
                ShortName = "John"
            };

            siteDirectoryPoco.Person.Add(JohnDoe);

            var rdlDto = new CDP4Common.DTO.SiteReferenceDataLibrary {
                Iid = Guid.NewGuid()
            };
            var rdlPoco = new CDP4Common.SiteDirectoryData.SiteReferenceDataLibrary {
                Iid = rdlDto.Iid, Name = rdlDto.Name, ShortName = rdlDto.ShortName, Container = siteDirectoryPoco
            };

            var requiredSiteReferenceDataLibraryDto = new CDP4Common.DTO.SiteReferenceDataLibrary()
            {
                Iid = Guid.NewGuid()
            };
            var requiredSiteReferenceDataLibraryPoco = new CDP4Common.SiteDirectoryData.SiteReferenceDataLibrary(requiredSiteReferenceDataLibraryDto.Iid, this.session.Assembler.Cache, this.uri);

            rdlDto.RequiredRdl  = requiredSiteReferenceDataLibraryDto.Iid;
            rdlPoco.RequiredRdl = requiredSiteReferenceDataLibraryPoco;

            var thingsToAdd = new List <Thing>()
            {
                requiredSiteReferenceDataLibraryDto, rdlDto
            };

            session.GetType().GetProperty("ActivePerson").SetValue(session, JohnDoe, null);
            await session.Assembler.Synchronize(thingsToAdd);

            await session.Read(rdlPoco);

            Assert.AreEqual(2, session.OpenReferenceDataLibraries.ToList().Count());

            Lazy <CDP4Common.CommonData.Thing> rdlPocoToClose;

            session.Assembler.Cache.TryGetValue(new CacheKey(rdlPoco.Iid, null), out rdlPocoToClose);
            await session.CloseRdl((CDP4Common.SiteDirectoryData.SiteReferenceDataLibrary) rdlPocoToClose.Value);

            Assert.AreEqual(1, session.OpenReferenceDataLibraries.ToList().Count());

            await session.Read(rdlPoco);

            Assert.AreEqual(2, session.OpenReferenceDataLibraries.ToList().Count());

            session.Assembler.Cache.TryGetValue(new CacheKey(rdlPoco.Iid, null), out rdlPocoToClose);
            Lazy <CDP4Common.CommonData.Thing> requiredRdlToClose;

            session.Assembler.Cache.TryGetValue(new CacheKey(requiredSiteReferenceDataLibraryPoco.Iid, null), out requiredRdlToClose);
            await session.CloseRdl((CDP4Common.SiteDirectoryData.SiteReferenceDataLibrary) requiredRdlToClose.Value);

            Assert.AreEqual(0, session.OpenReferenceDataLibraries.ToList().Count());

            await session.CloseRdl((CDP4Common.SiteDirectoryData.SiteReferenceDataLibrary) rdlPocoToClose.Value);

            Assert.AreEqual(0, session.OpenReferenceDataLibraries.ToList().Count());
        }