public async void WithResult()
        {
            await this.SignIn(this.Administrator);

            var data = new DataBuilder(this.Session).WithString("First").Build();

            this.Session.Commit();

            var uri = new Uri(@"allors/pull", UriKind.Relative);

            var extent = new Allors.Data.Filter(M.Data.ObjectType);

            var pullRequest = new PullRequest
            {
                P = new[]
                {
                    new Pull
                    {
                        Extent  = extent.Save(),
                        Results = new[]
                        {
                            new Result {
                                Name = "Datas"
                            },
                        },
                    },
                },
            };

            var response = await this.PostAsJsonAsync(uri, pullRequest);

            var pullResponse = await this.ReadAsAsync <PullResponse>(response);

            var namedCollection = pullResponse.NamedCollections["Datas"];

            Assert.Single(namedCollection);

            var namedObject = namedCollection.First();

            Assert.Equal(data.Id.ToString(), namedObject);

            var objects = pullResponse.Objects;

            Assert.Single(objects);

            var @object = objects[0];

            var acls = new AccessControlLists(this.Administrator);
            var acl  = acls[data];

            Assert.Equal(3, @object.Length);

            Assert.Equal(data.Strategy.ObjectId.ToString(), @object[0]);
            Assert.Equal(data.Strategy.ObjectVersion.ToString(), @object[1]);
            Assert.Equal(this.PrintAccessControls(acl), @object[2]);
        }
Esempio n. 2
0
        public async void WithResult()
        {
            var administrator = new Users(this.Session).GetUser("administrator");

            await this.SignIn(administrator);

            var data = new DataBuilder(this.Session).WithString("First").Build();

            this.Session.Commit();

            var uri = new Uri(@"Pull/Pull", UriKind.Relative);

            var extent = new Allors.Data.Filter(M.Data.ObjectType);

            var pullRequest = new PullRequest
            {
                P = new[]
                {
                    new Pull
                    {
                        Extent  = extent.Save(),
                        Results = new[]
                        {
                            new Result {
                                Name = "Datas"
                            },
                        },
                    }
                }
            };

            var response = await this.PostAsJsonAsync(uri, pullRequest);

            var pullResponse = await this.ReadAsAsync <PullResponse>(response);

            var organisations = pullResponse.NamedCollections["Datas"];

            Assert.Single(organisations);

            var dataId = organisations.First();

            Assert.Equal(data.Id.ToString(), dataId);
        }
Esempio n. 3
0
        /// <summary>
        /// Loads an <see cref="Allors.Extent"/> based on this <see cref="Extent"/>.
        /// </summary>
        /// <param name="session">
        /// The database to resolve information from.
        /// </param>
        /// <returns>
        /// The loaded <see cref="Extent"/>.
        /// </returns>
        public IExtent Load(ISession session)
        {
            IExtent[] Operands() => this.Operands.Select(v => v.Load(session)).ToArray();

            IExtent extent;

            switch (this.Kind)
            {
            case ExtentKind.Filter:
                if (!this.ObjectType.HasValue)
                {
                    return(null);
                }

                var objectType = (IComposite)session.Database.ObjectFactory.MetaPopulation.Find(this.ObjectType.Value);
                extent = new Allors.Data.Filter(objectType)
                {
                    Predicate = this.Predicate?.Load(session)
                };

                break;

            case ExtentKind.Union:
                extent = new Union(Operands());
                break;

            case ExtentKind.Except:
                extent = new Except(Operands());
                break;

            case ExtentKind.Intersect:
                extent = new Intersect(Operands());
                break;

            default:
                throw new Exception("Unknown extent kind " + this.Kind);
            }

            extent.Sorting = this.Sorting?.Select(v => v.Load(session)).ToArray();
            return(extent);
        }