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(); }
public async Task WithNonExistantWord_ThrowsException() { using var context = new TheasurusDbContext(ContextOptions); var theasurus = new TheasurusService(context); Assert.ThrowsAsync <ArgumentException>(async() => await theasurus.GetSynonymsAsync("love")); }
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(" ")); }
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); }
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()); }
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); }
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); }
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); }
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); }
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()); }
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()); }
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()); }
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()); }
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()); }
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(" ")); }
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)); }
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()); }