Esempio n. 1
0
        public async Task <int?> Create(Relation data, string userId)
        {
            if ((await parent.NotesProvider.Get(data.From, userId) == null) || (await parent.NotesProvider.Get(data.To, userId) == null))
            {
                return(null);
            }
            Model <Relation> raw = new Model <Relation>
            {
                Data   = (Relation)data.Clone(),
                UserId = userId,
            };

            raw.Data.Id = Interlocked.Increment(ref count);
            Data.Add(raw.Data.Id, raw);
            return(raw.Data.Id);
        }
Esempio n. 2
0
        private void RelationBasic()
        {
            Clear();

            INotesProvider npro = Provider.NotesProvider;

            IRelationsProvider pro = Provider.RelationsProvider;

            string[] usernames = new string[] { "user" };

            List <int> nodes = new List <int>();

            for (int i = 0; i < TestCount; i++)
            {
                Note data = new Note
                {
                    Title      = $"item {i}",
                    Content    = $"item content {i}",
                    CategoryId = null,
                };
                string username = random.Choice(usernames);
                int?   tid      = npro.Create(data, username).Result;
                Assert.IsTrue(tid.HasValue, "create failed");
                nodes.Add(tid.Value);
            }

            for (int i = 0; i < TestCount; i++)
            {
                Relation data = new Relation
                {
                    From = random.Choice(nodes),
                    To   = random.Choice(nodes),
                };
                string username = random.Choice(usernames);
                Assert.AreEqual(data, data.Clone());

                int id;
                {
                    int?tid = pro.Create(data, username).Result;
                    Assert.IsTrue(tid.HasValue, "create failed");
                    id = tid.Value;

                    Assert.IsNotNull(pro.Get(id, username), "get after create failed");

                    Relation actual = pro.Get(id, username).Result;
                    Valid(actual, username);

                    data.Id = id;
                    Assert.AreEqual(data, actual, "get failed");
                    Assert.AreEqual(data.GetHashCode(), actual.GetHashCode(), "get failed");
                }

                {
                    data.From = random.Choice(nodes);
                    data.To   = random.Choice(nodes);
                    data.Id   = random.Next();
                    Assert.AreEqual(id, pro.Update(id, data, username).Result, "update failed");

                    IEnumerable <Relation> items = pro.Query(id, data.From, data.To, username).Result;
                    Assert.AreEqual(1, items.Count(), "query failed");
                    Relation actual = items.First();
                    Valid(actual, username);

                    data.Id = id;
                    Assert.AreEqual(data, actual, "query failed");
                }

                if (random.NextDouble() < DeleteRate)
                {
                    Assert.IsNotNull(pro.Delete(id, username).Result, "delete failed");
                    Assert.IsNull(pro.Get(id, username).Result, "get after delete failed");
                }
            }

            foreach (string user in usernames)
            {
                IEnumerable <Relation> items = pro.GetAll(user).Result;
                foreach (Relation v in items)
                {
                    Valid(v, user);
                }
            }
        }