Esempio n. 1
0
        private void RelationSpecial()
        {
            Clear();

            INotesProvider npro = Provider.NotesProvider;

            IRelationsProvider pro = Provider.RelationsProvider;

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

            List <(int, string)>             nodes = new List <(int, string)>();
            Dictionary <int, HashSet <int> > adjs  = new Dictionary <int, HashSet <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, username));
                adjs.Add(tid.Value, new HashSet <int>());
            }

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

                {
                    int?tid = pro.Create(data, username).Result;
                    Assert.IsTrue(tid.HasValue, "create failed");
                    adjs[data.From].Add(data.To);
                    adjs[data.To].Add(data.From);
                }
            }

            foreach ((int id, string user) in nodes)
            {
                IEnumerable <Relation> actual = pro.GetAdjacents(id, user).Result;
                CollectionAssert.AreEquivalent(adjs[id].ToArray(), new HashSet <int>(actual.Select(x => x.From ^ x.To ^ id)).ToArray());
            }
            foreach ((int id, string user) in nodes)
            {
                pro.ClearAdjacents(id, user).Wait();
                Assert.IsFalse(pro.GetAdjacents(id, user).Result.Any());
            }
        }
Esempio n. 2
0
        private void RelationFailed()
        {
            string username = random.Choice(usernames);

            Provider.CategoriesProvider.Clear(username).Wait();
            int id = Provider.NotesProvider.Create(new Note {
                Title = "name"
            }, username).Result.Value;
            IRelationsProvider pro = Provider.RelationsProvider;

            Assert.IsNull(pro.Create(new Relation {
                From = id - 1, To = id + 1
            }, username).Result);
            Assert.IsNull(pro.Create(new Relation {
                From = id, To = id + 1
            }, username).Result);
            Assert.IsNull(pro.Create(new Relation {
                From = id - 1, To = id
            }, username).Result);
        }
Esempio n. 3
0
        public async Task <int?> Delete(int id, string identity)
        {
            if (identity == null)
            {
                return(null);
            }

            Models.Note raw = await context.Notes.FindAsync(id);

            if (raw == null || raw.UserId != identity)
            {
                return(null);
            }

            {
                IRelationsProvider provider = parent.RelationsProvider;
                await provider.ClearAdjacents(id, identity);
            }
            context.Notes.Remove(raw);
            await context.SaveChangesAsync();

            return(id);
        }
Esempio n. 4
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);
                }
            }
        }
 public RelationsController(IDataProvider provider, IIdentityDataGetter identityDataGetter)
 {
     this.provider           = provider.RelationsProvider;
     this.identityDataGetter = identityDataGetter;
 }