Beispiel #1
0
        public virtual void Setup()
        {
            ContextOptions = new DbContextOptionsBuilder <TheasurusDbContext>().UseSqlite("Filename=Test.db").Options;

            using var context = new TheasurusDbContext(ContextOptions);

            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();

            var anger      = new Word("anger");
            var rage       = new Word("rage");
            var irritation = new Word("irritation");

            var angerAdded      = context.Add(anger);
            var rageAdded       = context.Add(rage);
            var irritationAdded = context.Add(irritation);

            context.SaveChanges();

            var synonym1 = new WordSynonym(angerAdded.Entity.Id, rageAdded.Entity.Id);
            var synonym2 = new WordSynonym(angerAdded.Entity.Id, irritationAdded.Entity.Id);

            context.AddRange(synonym1, synonym2);

            context.SaveChanges();
        }
Beispiel #2
0
        public async Task WithNonExistantWord_ThrowsException()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.GetSynonymsAsync("love"));
        }
Beispiel #3
0
        public async Task WithNullOrWhiteSpace_ThrowsException()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.GetSynonymsAsync(null));
            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.GetSynonymsAsync(""));
            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.GetSynonymsAsync("  "));
        }
Beispiel #4
0
        public async Task WithExistingWord_ReturnsCorrectSynonyms()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            var result = await theasurus.GetSynonymsAsync("anger");

            CollectionAssert.AreEquivalent(new[] { "rage", "irritation" }, result);
        }
Beispiel #5
0
        public async Task WithExistingWord_DoesNothing()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            await theasurus.AddAsync("rAge");

            Assert.AreEqual(3, context.Words.Count());
            Assert.AreEqual(2, context.SynonymMapping.Count());
        }
Beispiel #6
0
        public async Task WithTakeMoreThanTotal_ReturnsEverything()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            var result = await theasurus.GetWordsAsync(10, 0);

            CollectionAssert.AreEquivalent(new[] { "anger", "rage", "irritation" }, result.Words);
            Assert.AreEqual(3, result.TotalResults);
            Assert.IsNull(result.NextSkip);
        }
Beispiel #7
0
        public async Task WithTakeZero_ReturnsNothing()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            var result = await theasurus.GetWordsAsync(0, 0);

            CollectionAssert.AreEquivalent(new string[] { }, result.Words);
            Assert.AreEqual(3, result.TotalResults);
            Assert.AreEqual(0, result.NextSkip);
        }
Beispiel #8
0
        public async Task SkipFirstPage_ReturnsSecondPage()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            var result = await theasurus.GetWordsAsync(2, 2);

            CollectionAssert.AreEquivalent(new[] { "irritation" }, result.Words);
            Assert.AreEqual(3, result.TotalResults);
            Assert.IsNull(result.NextSkip);
        }
Beispiel #9
0
        public async Task WithTakeLessThanTotal_ReturnsFirstPage()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            var result = await theasurus.GetWordsAsync(2, 0);

            CollectionAssert.AreEquivalent(new[] { "anger", "rage" }, result.Words);
            Assert.AreEqual(3, result.TotalResults);
            Assert.AreEqual(2, result.NextSkip);
        }
Beispiel #10
0
        public async Task WithExistingWord_And_ExistingSynonym_AddsSynonymToMappping()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            await theasurus.AddAsync("rAge", new[] { "irRitaTion" });

            CollectionAssert.AreEquivalent(new[] { "irritation" }, await theasurus.GetSynonymsAsync("rage"));         //new synonym added
            CollectionAssert.AreEquivalent(new string[0], await theasurus.GetSynonymsAsync("irRitaTion"));            //still empty in the other direction
            Assert.AreEqual(3, context.Words.Count());
            Assert.AreEqual(3, context.SynonymMapping.Count());
        }
Beispiel #11
0
        public async Task WithExistingWord_And_PreviouslyAddedSynonym_SkipsSynonym()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            await theasurus.AddAsync("aNgEr", new[] { "raGE" });

            CollectionAssert.AreEquivalent(new[] { "rage", "irritation" }, await theasurus.GetSynonymsAsync("aNgEr")); //synonym not added second time
            CollectionAssert.AreEquivalent(new string[0], await theasurus.GetSynonymsAsync("raGE"));                   //still empty to the other direction
            Assert.AreEqual(3, context.Words.Count());
            Assert.AreEqual(2, context.SynonymMapping.Count());
        }
Beispiel #12
0
        public async Task WithNonExistentWord_AddsNewWord()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            await theasurus.AddAsync("FuRy");

            CollectionAssert.Contains(context.Words.ToList(), new Word("fury")
            {
                Id = 4
            });
            Assert.AreEqual(4, context.Words.Count());
            Assert.AreEqual(2, context.SynonymMapping.Count());
        }
Beispiel #13
0
        public async Task WithNonExistentWord_And_ExistingSynonym_AddsSynonymToMappping_And_AddsNewWord()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            await theasurus.AddAsync("FuRy", new[] { "rAgE" });

            CollectionAssert.AreEquivalent(new[] { "rage" }, await theasurus.GetSynonymsAsync("fury"));         //new synonym added
            CollectionAssert.AreEquivalent(new string[0], await theasurus.GetSynonymsAsync("rage"));            //still empty in the other direction
            CollectionAssert.Contains(context.Words.ToList(), new Word("fury")
            {
                Id = 4
            });
            Assert.AreEqual(4, context.Words.Count());
            Assert.AreEqual(3, context.SynonymMapping.Count());
        }
Beispiel #14
0
        public async Task WithExistingWord_And_NonExistentSynonym_AddsSynonymToMapppingAndToWords()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            await theasurus.AddAsync("aNgEr", new[] { "AnnOyanCe" });

            CollectionAssert.AreEquivalent(new[] { "rage", "irritation", "annoyance" }, await theasurus.GetSynonymsAsync("anger")); //new synonym added
            CollectionAssert.AreEquivalent(new string[0], await theasurus.GetSynonymsAsync("annoyance"));                           //still empty to the other direction
            CollectionAssert.Contains(context.Words.ToList(), new Word("annoyance")
            {
                Id = 4
            });
            Assert.AreEqual(4, context.Words.Count());
            Assert.AreEqual(3, context.SynonymMapping.Count());
        }
Beispiel #15
0
        public async Task WithNullOrWhiteSpace_ThrowsException()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.AddAsync(null, new[] { "love" }));
            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.AddAsync("", new[] { "love" }));
            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.AddAsync("  ", new[] { "love" }));
            Assert.ThrowsAsync <ArgumentNullException>(async() => await theasurus.AddAsync("love", null));
            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.AddAsync("love", new string[] { null }));
            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.AddAsync("love", new[] { "" }));
            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.AddAsync("love", new[] { "   " }));

            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.AddAsync(null));
            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.AddAsync(""));
            Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.AddAsync("  "));
        }
Beispiel #16
0
        static void Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            using var context = new TheasurusDbContext(new DbContextOptionsBuilder <TheasurusDbContext>()
                                                       .UseSqlite(configuration.GetConnectionString("DefaultConnection"))
                                                       .Options);

            var service = new TheasurusService(context);

            context.Database.EnsureCreated();

            Parser.Default.ParseArguments <AddOptions, SynonymsOptions, WordsOptions>(args)
            .WithParsed <AddOptions>(async options => await service.AddAsync(options.Word, options.Synonyms))
            .WithParsed <SynonymsOptions>(async options => await ShowSynonyms(options, service))
            .WithParsed <WordsOptions>(async options => await ShowWords(options, service));
        }
Beispiel #17
0
        public async Task WithNonExistentWord_And_NonExistentSynonym_AddsSynonymToMappping_And_AddsBothWords()
        {
            using var context = new TheasurusDbContext(ContextOptions);
            var theasurus = new TheasurusService(context);

            await theasurus.AddAsync("  LOVE  ", new[] { "  ADORATION  " });

            CollectionAssert.AreEquivalent(new[] { "adoration" }, await theasurus.GetSynonymsAsync("love"));         //new synonym added
            CollectionAssert.AreEquivalent(new string[0], await theasurus.GetSynonymsAsync("adoration"));            //still empty in the other direction
            CollectionAssert.Contains(context.Words.ToList(), new Word("love")
            {
                Id = 4
            });
            CollectionAssert.Contains(context.Words.ToList(), new Word("adoration")
            {
                Id = 5
            });
            Assert.AreEqual(5, context.Words.Count());
            Assert.AreEqual(3, context.SynonymMapping.Count());
        }