public void RemovingLink_BetweenTwoWords_FirstArgWillKeepTheMasterWithAllTranslations()
        {
            // Arrange
            var masterA        = new MasterWord();
            var wordInFirstArg = new Word(masterA, "Hi", new Language("English"));
            var translation    = new Word(masterA, "Hola", new Language("Spanish"));

            new Word(masterA, "some word", new Language("some lang"));

            MasterWordsService.Add(masterA);

            // Act
            WordsService.RemoveTranslation(wordInFirstArg, translation);

            // Assert
            var newMaster      = MasterWordsService.Get(masterA.ID);
            var newWord        = WordsService.Get(wordInFirstArg.ID);
            var newTranslation = WordsService.Get(translation.ID);

            Assert.AreEqual(2, newMaster.Words.Count, "Master should have two words left");
            Assert.AreEqual(newMaster, newWord.MasterWord, "Word in first argument should keep the master word");

            Assert.AreEqual(1, newTranslation.MasterWord.Words.Count, "Translation master should only have 1 translation");
            Assert.AreNotEqual(newTranslation.MasterWord, newWord.MasterWord, "Word in second argument should get new master created");
        }
        public void RemovingLink_BetweenTwoWords_WillCreateNewMasterWordForIt(bool cleanCache)
        {
            // Arrange
            var masterA = new MasterWord();
            var wordA   = new Word(masterA, "Hi", new Language("English"));
            var wordB   = new Word(masterA, "Hola", new Language("Spanish"));

            MasterWordsService.Add(masterA);

            if (cleanCache)
            {
                RefreshServicesAndClearCache();
                wordA = WordsService.GetAll().First(w => w.ID == wordA.ID);
                wordB = WordsService.GetAll().First(w => w.ID == wordB.ID);
            }

            // Act
            WordsService.RemoveTranslation(wordA, wordB);

            // Assert
            var newA = WordsService.Get(wordA.ID);
            var newB = WordsService.Get(wordB.ID);

            masterA = MasterWordsService.Get(masterA.ID);

            Assert.AreNotEqual(newA.MasterWord, newB.MasterWord, "Master words should differ. New Ref");
            Assert.AreNotEqual(wordA.MasterWord, wordB.MasterWord, "Master words should differ. Old Ref");

            Assert.AreEqual(1, masterA.Words.Count(), "MasterWord word count should be 1");
        }
        public void RemovingLink_BetweenTwoWords_WillRelinkWordsInBooks(
            [Values(true, false)] bool enBookLang,
            [Values(true, false)] bool invertRemoval)
        {
            // Arrange
            var langEn  = new Language("English");
            var langEsp = new Language("Spanish");

            var masterA = new MasterWord();
            var wordA   = new Word(masterA, "Hi", langEn);
            var wordB   = new Word(masterA, "Hola", langEsp);

            new Word(masterA, "some word", new Language("some lang"));

            var book = new Book("name", enBookLang ? langEn : langEsp);

            book.AddWord(masterA);

            MasterWordsService.Add(masterA);
            BooksService.Add(book);


            // Act
            RefreshServicesAndClearCache();
            wordA = WordsService.GetAll().First(w => w.ID == wordA.ID);
            wordB = WordsService.GetAll().First(w => w.ID == wordB.ID);

            if (invertRemoval)
            {
                WordsService.RemoveTranslation(wordA, wordB);
            }
            else
            {
                WordsService.RemoveTranslation(wordB, wordA);
            }

            // Assert
            book = BooksService.Get(book.ID);

            Assert.AreEqual(1, book.WordCount, "Book word count should be 1. Old Ref");
            Assert.AreEqual(1, book.WordCount, "Book word count should be 1. New Ref");

            Assert.IsNotNull(book.Words.First()[book.Language],
                             "After removing translation between two words, book should keep the master word which aligns with book language. New Ref");

            var wordInBook      = enBookLang ? wordA : wordB;
            var wordWithoutBook = enBookLang ? wordB : wordA;

            Assert.AreEqual(book, wordInBook.MasterWord.Books.First(), "word should be in a book");
            Assert.AreEqual(book.Language, wordInBook.Language, "book and word languages should be the same");
            Assert.AreEqual(book.Words.First(), wordInBook.MasterWord, "master word should be the same of word left of correct language");
            Assert.AreEqual(0, wordWithoutBook.MasterWord.Books.Count(), "other word should have no books");
        }
Beispiel #4
0
        public void RemovingTranslation_FromWord_WillUpdateDB()
        {
            var word  = WordsService.GetWordsWithData().First();
            var trans = word.Translations.First();
            var translationsBefore = word.Translations.Count();

            WordsService.RemoveTranslation(word, trans);

            var newWord = WordsService.GetWordsWithData().First();

            Assert.AreEqual(translationsBefore - 1, newWord.Translations.Count(), "New reference has less translations");
            Assert.AreEqual(translationsBefore - 1, word.Translations.Count(), "Old reference should also be updated");
        }